• docker入门~安装及操作(1)


    测试过程中发现如果换电脑或者跳槽,测试环境需要重新搭建,有没有一种开箱即用的懒人模式呢?答案就是docker,作为容器(背包

    我们可以把测试过程中需要安装的软件(物品)内置,打包镜像,随取随用,这个就是本学习系列的来由


    和安装其他软件一样,安装Docker也需要一些基本的前提条件。Docker要求的条件具体如下:

    • 运行64位CPU构架的计算机(目前只能是x86_64和amd64),Docker目前不支持32位CPU。
    • 运行Linux3.8或更高版本的内核。
    • 内核必须支持一种适合的存储驱动(storage driver),例如:
      • Device Manager;
      • AUFS;
      • vfs;
      • btrfs;
      • 默认存储驱动通常是Device Manager。
    • 内核必须支持并开启cgroup和命名空间(namespace)功能。

    在Centos 6上安装docker

    安装前的准备:

    • 内核检测
    # uname -a
    Linux docker 2.6.32-696.1.1.el6.x86_64 #1 SMP Tue Apr 11 17:13:24 UTC 2017 x86_64 x86_64 x86_64 GNU/Linux

    通过uname命令来确认是否安装了3.8或更高的内核版本,一些老板本的2.6.x或其后的内核也能够运行Docker,但运行结果会有很大的不同。而且,如果你需要就老版本内核寻求帮助时,通常大家会建议你升到更高版本的内核。所以这里我们需要升级我们的内核版本。

    如何更新内核可以参考http://www.cnblogs.com/Bourbon-tian/p/6868850.html

    • 检查Device Mapper

    我们这里使用Device Mapper作为Docker的存储驱动,为Docker提供存储能力。

    # ls -l /sys/class/misc/device-mapper
    lrwxrwxrwx 1 root root 0 May 12  2017 /sys/class/misc/device-mapper -> ../../devices/virtual/misc/device-mapper

    同样,也可以在/proc/devices文件中检测是否有device-mapper条目:

    # grep device-mapper /proc/devices
    253 device-mapper

    如果没有检测到Device Mapper,我们也可以试着安装device-mapper软件包:

    # yum install -y device-mapper
    ## 安装完成后,还需要加载dm_mod模块
    # modprobe dm_mod
    ## 模块加载完,我们就应该可以找到/sys/class/misc/device-mapper条目了。

    安装Docker:

    安装命令如下:

    # curl -fsSL https://get.docker.com | bash -s docker --mirror Aliyun

    也可以使用国内 daocloud 一键安装命令:

    # curl -sSL https://get.daocloud.io/docker | sh

    daocloud方式安装完成:

    运行第一个容器

    首先,我们会查看Docker是否能正常工作,功能是否正常:

    # docker info

    info命令会返回所有容器和镜像(镜像即是Docker用来构建容器的“构建块”)的数量、Docker使用的执行驱动和存储驱动(execution and storage driver),以及Docker的基本配置。

    接下来通过docker run命令创建容器,docker run命令提供了Docker容器的创建到启动的功能。

    # docker run -i -t ubuntu /bin/bash
    • -i: 以交互模式运行容器,通常与 -t 同时使用;
    • -t: 为容器重新分配一个伪输入终端,通常与 -i 同时使用;
    • ubuntu: 告诉Docker基于什么镜像来创建容器,它由Docker Hub Registry 提供。

    我们可以用ubuntu基础镜像(以及类似的fedora,debian,centos等镜像)为基础,构建自己的镜像,这里我们基于此基础镜像启动了一个容器,并且没有对容器进行任何改动。

    Docker首先会检查本地是否存在ubuntu镜像,如果本地还没有该镜像的话,那么Docker就会连接官方维护的Docker Hub Registry,查看Docker Hub中是否有该镜像。一旦找到,则会下载该镜像并将其保存到本地宿主机中。随后,Docker在文件系统内部用这个镜像创建了一个新容器。该容器拥有自己的网络、IP地址,以及一个用来和宿主机进行通信的桥接网络接口。最后,我们告诉Docker在新容器中要运行什么命令,在本例中我们在容器中运行/bin/bash命令启动了一个Bash Shell。

    当容器创建完成后,Docker就会执行容器中的/bin/bash命令,这时我们就可以看到容器内的shell了:

    注意 root@a7cc5aa1417e:/#  ,此时我们已进入一个 ubuntu系统的容器

    使用第一个容器:

    现在,我们已经以root用户登录到了新容器中,容器的ID:a7cc5aa1417e,这是一个完整的Ubuntu系统,你可以用它来做任何事情

    # 获取该容器的主机名
    root@a7cc5aa1417e:/# hostname                           
    a7cc5aa1417e
    
    # 查看/etc/hosts 文件
    root@a7cc5aa1417e:/# cat /etc/hosts
    127.0.0.1       localhost
    ::1     localhost ip6-localhost ip6-loopback
    fe00::0 ip6-localnet
    ff00::0 ip6-mcastprefix
    ff02::1 ip6-allnodes
    ff02::2 ip6-allrouters
    172.17.0.2      a7cc5aa1417e
    
    # 如果新装的Ubuntu没有ifconfig命令和ping命令,则我们需要手动安装
    root@a7cc5aa1417e:/# apt-get update
    
    # ifconfig
    root@a7cc5aa1417e:/# apt install net-tools       
    
    # ping
    root@a7cc5aa1417e:/# apt install iputils-ping
     
    # 接下来我们就可以通过ifconfig来看看容器的网络配置情况
    root@a7cc5aa1417e:/# ifconfig
    eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
            inet 172.17.0.2  netmask 255.255.0.0  broadcast 172.17.255.255
            ether 02:42:ac:11:00:02  txqueuelen 0  (Ethernet)
            RX packets 4584  bytes 21327174 (21.3 MB)
            RX errors 0  dropped 0  overruns 0  frame 0
            TX packets 4198  bytes 305573 (305.5 KB)
            TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0
    
    lo: flags=73<UP,LOOPBACK,RUNNING>  mtu 65536
            inet 127.0.0.1  netmask 255.0.0.0
            loop  txqueuelen 1000  (Local Loopback)
            RX packets 0  bytes 0 (0.0 B)
            RX errors 0  dropped 0  overruns 0  frame 0
            TX packets 0  bytes 0 (0.0 B)
            TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0
            
    # 我们还可以查看容器中运行的进程
    root@a7cc5aa1417e:/# ps -aux
    USER       PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND
    root         1  0.0  0.1   4100  2120 pts/0    Ss   05:29   0:00 /bin/bash
    root       328  0.0  0.0   5888  1412 pts/0    R+   05:38   0:00 ps -aux
    
    # 再尝试安装一个vim
    root@a7cc5aa1417e:/# apt-get install vim

    当所有工作都结束时,输入exit,就可以返回到宿主机的命令提示符了。这时容器已经停止运行了!只有在指定的/bin/bash命令处于运行状态的时候,我们容器才会相应地处于运行状态。一旦退出容器,/bin/bash 命令也就结束了,这时容器也随之停止运行。但容器仍是存在的,我们可以用docker ps -a命令查看当前系统中容器的列表:

    [root@VM-16-9-centos ~]# docker ps -a
    CONTAINER ID   IMAGE     COMMAND       CREATED          STATUS                      PORTS     NAMES
    a7cc5aa1417e   ubuntu    "/bin/bash"   14 minutes ago   Exited (0) 22 seconds ago             gracious_chatterjee

    默认情况下,当执行docker ps命令时,只能看到正在运行的容器。

    -a 参数则是列出所有容器,包括正在运行和已经停止的。

    -l 参数列出最后一次运行的容器,包括正在运行和已经停止的。

    -n 参数列出最近创建的n个容器。(# docker ps -n 5  则表示列出最近创建的5个容器)

    容器命名:

    Docker会为我们创建的每一个容器自动生成一个随机的名称,如果想为容器命名,则可以用--name标志来实现。一个合法的容器名称只能包含以下字符:

    • 小写字母a~z;
    • 大写字母A~Z;
    • 数字0-9;
    • 下划线、
    • 圆点、
    • 横线(如果用正则表示来表示这些符号,就是[a-zA-Z0-9_.-])。
    # docker run --name SetName -i -t ubuntu /bin/bash
    root@a7cc5aa1417e:/# exit

    容器的名称有助于分辨容器,当构建容器和应用程序之间的逻辑连接时,容器的名称也有助于从逻辑上理解连接关系。具体的名称(如web、db)比容器ID和随机容器名好记多。我推荐大家都使用容器名称,以更加方便地管理容器。

    容器的命名必须是唯一的。如果我们试图创建两个名称相同的容器,则命令将会失败。如果要使用的容器名称已经存在,可以先用docker rm命令删除已有的同名容器后,再来创建新的容器。

    重启已经停止的容器:

    SetName容器已经停止了,如果想重新启动这个容器,则可以同过docker start + 容器名或者是容器的ID来启动一个已经停止的容器

    ## 回归刚刚我们所讲的知识,通过ps -a 查看所有已创建容器
    # docker ps -a
    CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS                      PORTS               NAMES
    78679e02be1c        ubuntu              "/bin/bash"         9 minutes ago       Exited (0) 9 minutes ago                        myubuntu            
    a7cc5aa1417e        ubuntu              "/bin/bash"        14 minutes ago       Exited (0) 22 seconds ago                       gracious_chatterjee
     
    ## 通过容器名启动容器
    # docker start SetName
    # docker ps
    CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES
    a7cc5aa1417e        ubuntu              "/bin/bash"         11 minutes ago      Up 21 seconds                           gracious_chatterjee
     
    ## 我们也可以通过ID来启动容器
    # docker start 78679e02be1c
    # docker ps
    CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES
    a7cc5aa1417e        ubuntu              "/bin/bash"         12 minutes ago      Up 2 seconds                            gracious_chatterjee

    创建多个容器后,想删掉某个容器:

    #强制删除容器 db01、db02:
    docker rm -f db01 db02
    
    #移除容器 nginx01 对容器 db01 的连接,连接名 db:
    docker rm -l db 
    
    #删除容器 nginx01, 并删除容器挂载的数据卷:
    docker rm -v nginx01
    
    #删除所有已经停止的容器:
    docker rm $(docker ps -a -q)
  • 相关阅读:
    SharePoint 2013中Office Web Apps的一次排错
    如何在Ubuntu上让root帐号可以登录SSH
    如何确定自己的SQL Server的实例是32位的还是64位的?
    [ADO.NET] 如何 使用 OLE DB 讀寫 Excel / 建立 Excel 檔案 (一)
    windows使用nginx实现网站负载均衡测试实例
    jqPlot的Option配置对象详解
    Windows Server 2003安装卡巴斯基2010成功
    Log4Net的使用方法
    在ADO.NET中使用参数化SQL语句的大同小异
    ASP.NET安全问题--Froms验证的具体介绍(中篇)
  • 原文地址:https://www.cnblogs.com/test_home_c/p/15823537.html
Copyright © 2020-2023  润新知