• 微服务-封装-docker by daysn大雄


    目录
    序言
    一、什么是容器
    二、docker入门
    2.1安装启动
    2.2docker使用
      2.2.1 helloworld
    2.2.2 容器
    2.2.3 镜像
    2.2.4 容器的连接
     
     

    序言

      虚拟化一般指的是虚拟机,虚拟机之前是物理机时代。

      首先物理机有以下缺点,1.费用太贵了2.运维以前基于某种os开发,可移植性过低3.物理机可能跑一点应用而已,资源不能有效利用 4.购买物理机需要时间,组装等导致上线速度慢

      那么虚拟技术应运而生,现在是基于Hypervisor,比如VMWare,KVM、,AWS等等。相对物理机我们能装不同的操作系统。

    优点:

    1.资源有效利用相对物理机,一个os可以运行很多操作系统

    2.上线快

    3.扩展、伸缩

    局限:

    1.os内核资源重复消耗资源

    2.应用的移植性不高

      所以现在我们基于容器做虚拟化。

    一、什么是容器

    容器是一种轻量级的,可移植的软件的打包技术,我们需要容器就是因为我们需要它的可移植能力。docker里面先把容器理解为一个虚拟机,好的我们开始吧。

    二、docker入门

    2.1安装启动

    
    
    $ sudo yum remove docker 
                      docker-client 
                      docker-client-latest 
                      docker-common 
                      docker-latest 
                      docker-latest-logrotate 
                      docker-logrotate 
                      docker-selinux 
                      docker-engine-selinux 
                      docker-engine
    
    

    安装一些必要的系统工具:

    
    
    sudo yum install -y yum-utils device-mapper-persistent-data lvm2
    
    

    添加软件源信息:

    
    
    sudo yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
    
    

    更新 yum 缓存:

    
    
    sudo yum makecache fast
    
    

    安装 Docker-ce:

    
    
    sudo yum -y install docker
    
    

    启动 Docker 后台服务

    
    
    sudo systemctl start docker
    
    

    测试运行 hello-world,这个命令会发现很卡,执行一分钟不动的话就ctr+c退出,我们接下来配置国内镜像加速

     docker run hello-world

    现在配置国内镜像

    vi /etc/docker/daemon.json

    请在该配置文件中加入(没有该文件的话,请先建一个):
    {
      "registry-mirrors": ["http://hub-mirror.c.163.com"]
    }

    打开后发现里面内容是{},直接加上去就好了。

    现在我们重新运行helloworld

    2.2 docker使用

    2.2.1 docker helloworld

     现在我们跑一个容器,在容器里面输出helloworld,其实就相当于开了个ubanto在里面执行

    /bin/echo "Hello world"命令
    docker run ubuntu:15.10 /bin/echo "Hello world"

    我们也可以弄个交互式,所谓交互式就是我们不是创建了个ubantu容器嘛,我们现在进去里面look一look

    docker run -i -t ubuntu:15.10 /bin/bash

    呐,现在我们就进去了,exit可以退出来。如果想后台启动,加上-d即可,首先它可以这么用的

    我们发现这他么没打helloworld,却打印了个长字符,这个就是容器的id

    它的后台进程也可以/bin/sh -c “”你的sh脚本”来执行

    docker run -d ubuntu:15.10 /bin/sh -c "while true; do echo hello world; sleep 1; done"

     打印出来的也是个容器id

     我们 docker ps查看一下运行的容器

    复制这个containerId

    docker logs 你的容器id或name
    

      

    可以看到容器内输出了一堆的hello world,使用name也是可以的

    可以用docker stop+id把这个容器停止了

     2.2.2 docker 容器的使用

    现在我们用docker搞个web应用,我们在docker容器里面跑一个Python的flask应用~令人怀念的flask啊。

     我们使用docker pull 命令可以拉取一个镜像

    docker pull training/webapp

    现在我们启动容器

     docker run -d -P training/webapp python app.py

    之前说过-d是后台,-p是将容器内部的端口映射到主机上面去。

     

    现在我们用docker ps 查看我们现在在运行的容器

    这个的意思就是docker开放了5000端口到主机的32768端口,咱访问一下

    好的,这样我们就访问到了,但是整天32768也不是个事儿,自己定义5000端口吧

     docker run -d -p 5000:5000 training/webapp python app.py

     对了,这个时候是启动了新的容器,原来的容器是没有关掉的

    想查看端口的话,docker port+id或者名字挺好。

    假如我想看里面运行的python程序的日志

    docker logs -f +id

     

    查看docker容器的进程也是top命令,我们用docker top

    我们可以用docker inspect查看docker容器的配置和状态信息

     

    现在我们看一下run启动和start(重启)这两个

    我们停一下容器,再将它重启。。。慢着,我去哪儿看已经停止的docker容器啊我去

    docker ps 下面没了呀我去

    好吧,我们先试着下一个命令,docker rm 删除不需要的容器

    会发现报错了,因为我们的docker容器还在开着,好吧把他关了

    现在就删除成功了

     2.2.3 镜像

     我们之前run hello-world的时候也看到这一幕

     

    运行容器的时候,如果本地的镜像是不存在的,那么docker自动从docker镜像仓库dockerhub下载

    我们用docker images列出所有docker的镜像

    • REPOSITORY:表示镜像的仓库源

    • TAG:镜像的标签,同一个仓库员可以有多个tag版本

    • IMAGE ID:镜像ID

    • CREATED:镜像创建时间

    • SIZE:镜像大小

     获取镜像

    ,我们用docker pull

    docker pull ubuntu:13.10

     查找镜像,我们用docker search +镜像名称

    现在我们创建一个新的镜像,首先我们用之前的镜像做一个容器,然后apt-get update进行更新

    docker run -t -i ubuntu:15.10 /bin/bash
    apt-get update

    完毕后exit退出。现在这个容器被我们改了。我们用docker commit提交它 ,daysn/ubantu:v2是定义的镜像名

    docker commit -m="更新的信息 " -a="镜像的作者名" f641b501fc52 daysn/ubantu:v2

    现在我们docker images一下

    现在我们启动一下我们的这个镜像

     

    我们刚刚用一个已经有的镜像建立了一个新的镜像,现在我们从0开始建立镜像

    在路径下新建一个Dockerfile ,vi Dockerfile

    开始build,“.”表示拿当前路径的Dockerfile

    docker build -t daysn/centos:6.7 .

     docker images看一看

     

    参考链接

     http://www.runoob.com

  • 相关阅读:
    大道至简观后感
    冲刺第二天
    梦断代码阅读笔记 02
    冲刺第一天
    第十周学习进度
    个人冲刺第一阶段个人任务--界面
    软工第二周个人作业
    软件工程开课博客(自我介绍)
    梦断代码阅读笔记01
    第二周学习进度报告
  • 原文地址:https://www.cnblogs.com/daysn/p/10391722.html
Copyright © 2020-2023  润新知