zoukankan      html  css  js  c++  java
  • Docker学习第二天

    CentOS 系列安装 Docker

    Docker 支持 CentOS6 及以后的版本。

    CentOS6

    对于 CentOS6,可以使用 EPEL 库安装 Docker,命令如下

    [root@MSJTVL-MJSP-A35 opt]# yum install http://mirrors.yun-idc.com/epel/6/i386/epel-release-6-8.noarch.rpm
    Loaded plugins: fastestmirror, security
    Setting up Install Process
    epel-release-6-8.noarch.rpm                                                                                                                                                                                          |  14 kB     00:00     
    Examining /var/tmp/yum-root-dp2p3m/epel-release-6-8.noarch.rpm: epel-release-6-8.noarch
    /var/tmp/yum-root-dp2p3m/epel-release-6-8.noarch.rpm: does not update installed package.
    Error: Nothing to do
    [root@MSJTVL-MJSP-A35 opt]# yum install docker-io

    CentOS7

    CentOS7 系统 CentOS-Extras 库中已带 Docker,可以直接安装:

    $ sudo yum install docker
    

    安装之后启动 Docker 服务,并让它随系统启动自动加载。

    [root@MSJTVL-MJSP-A35 opt]# service docker start
    Starting cgconfig service:                                 [  OK  ]
    Starting docker:                                       [  OK  ]
    [root@MSJTVL-MJSP-A35 opt]# chkconfig docker on

    Docker 镜像

    镜像是 Docker 的三大组件之一

    Docker 运行容器前需要本地存在对应的镜像,如果镜像不存在本地,Docker 会从镜像仓库下载(默认是 Docker Hub 公共注册服务器中的仓库)。

    下面介绍:

    • 从仓库获取镜像;
    • 管理本地主机上的镜像;
    • 介绍镜像实现的基本原理。

    获取镜像

    可以使用 docker pull 命令来从仓库获取所需要的镜像。

    下面的例子将从 Docker Hub 仓库下载一个 Ubuntu 12.04 操作系统的镜像。

    [root@MSJTVL-MJSP-A35 docker]# docker pull ubuntu:12.04
    12.04: Pulling from ubuntu
    191c4e1e4400: Pull complete 
    fd04a9dc157f: Pull complete 
    be08d59fa177: Pull complete 
    ecf8c2069900: Pull complete 
    8ea067ad7a27: Pull complete 
    8ea067ad7a27: Pulling fs layer 
    Digest: sha256:57a83f4b4f43f2d008c8ceaa9663a6f7ecd061fefa80da8f32e0f22c7b923390
    Status: Downloaded newer image for ubuntu:12.04

    下载过程中,会输出获取镜像的每一层信息。

    该命令实际上相当于 $ sudo docker pull registry.hub.docker.com/ubuntu:12.04 命令,即从注册服务器registry.hub.docker.com 中的 ubuntu 仓库来下载标记为 12.04 的镜像。

    为了方便在后续工作中使用这个镜像,还可以使用docker tag 命令为本地镜像添加新的标签,例如:

    [root@MSJTVL-MJSP-A35 docker]# docker tag ubuntu:12.04 unbutn:02.09
    [root@MSJTVL-MJSP-A35 docker]# docker images
    REPOSITORY          TAG                 IMAGE ID            CREATED             VIRTUAL SIZE
    ubuntu              12.04               8ea067ad7a27        7 weeks ago         103.6 MB
    unbutn              02.09               8ea067ad7a27        7 weeks ago         103.6 MB

    列出本地镜像

    使用 docker images 显示本地已有的镜像。

    [root@MSJTVL-MJSP-A35 docker]# docker images
    REPOSITORY          TAG                 IMAGE ID            CREATED             VIRTUAL SIZE
    ubuntu              12.04               8ea067ad7a27        7 weeks ago         103.6 MB
    unbutn              02.09               8ea067ad7a27        7 weeks ago         103.6 MB

    在列出信息中,可以看到几个字段信息

    • 来自于哪个仓库,比如 ubuntu
    • 镜像的标记,比如 12.04
    • 它的 ID 号(唯一)
    • 创建时间
    • 镜像大小

    其中镜像的 ID 唯一标识了镜像,注意到 ubuntu:12.04 和 ubuntu:02.09 具有相同的镜像 ID,说明它们实际上是同一镜像。

    TAG 信息用来标记来自同一个仓库的不同镜像。例如 ubuntu 仓库中有多个镜像,通过 TAG 信息来区分发行版本,例如 10.0412.0412.1013.0414.04 等。例如下面的命令指定使用镜像 ubuntu:12.04 来启动一个容器。

    [root@MSJTVL-MJSP-A35 docker]# docker run -t -i ubuntu:12.04 /bin/bash
    root@d67d32057f1c:/# ls
    bin  boot  dev  etc  home  lib  lib64  media  mnt  opt  proc  root  run  sbin  selinux  srv  sys  tmp  usr  var
    root@d67d32057f1c:/# pwd
    /
    root@d67d32057f1c:/# id
    uid=0(root) gid=0(root) groups=0(root)
    root@d67d32057f1c:/# ip a
    4: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP 
        link/ether 02:42:ac:11:00:01 brd ff:ff:ff:ff:ff:ff
        inet 172.17.0.1/16 scope global eth0
        inet6 fe80::42:acff:fe11:1/64 scope link 
           valid_lft forever preferred_lft forever
    6: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN 
        link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
        inet 127.0.0.1/8 scope host lo
        inet6 ::1/128 scope host 
           valid_lft forever preferred_lft forever
    root@d67d32057f1c:/# exit

    如果不指定具体的标记,则默认使用latest标记信息。

    创建镜像

    创建镜像的方法有三种:基于已有镜像的容器创建,基于本地模板导入,基于Dockerfile创建

    接下来重点介绍前两种,最后一种基于Dockerfile创建的方法将在后续的专门详细介绍

    基于已有镜像的容器创建

    该方法主要使用docker commit命令,其命令格式为docker commit[OPTIONS]CONTAINER[REPOSUTORY[:TAG]] 主要选项包括:

    ·-a,--author="作者信息"

    ·-m,--message="提交信息"

    ·-p,--pause=true提交时暂停容器运行

    下面演示如何使用命令创建新的镜像。

    首先启动一个镜像,并在其中进行修改操作,例如创建一个test文件,之后退出:

    [root@MSJTVL-MJSP-A35 docker]# docker run -t -i ubuntu:12.04 /bin/bash
    root@5b098fe766ca:/# touch test
    root@5b098fe766ca:/# exit
    exit
    [root@MSJTVL-MJSP-A35 docker]#

    注:记住容器的ID:5b098fe766ca。

    此时该容器跟原Ubuntu:12.04镜像相比,已经发生了改变,可以使用docker commit命令来提交一个新的镜像。提交时可以使用ID或者名称来指定容器

    [root@MSJTVL-MJSP-A35 docker]# docker commit -m "Added a new file" -a "Docker Tian" 5b098fe766ca test
    1a67c55ea39412ca5f64b9b56050683dd5d269ef0c6c037412d1a20b033d6c3d
    [root@MSJTVL-MJSP-A35 docker]# 

    此时查看本地镜像列表,即可看到先创建的镜像:

    [root@MSJTVL-MJSP-A35 docker]# docker images
    REPOSITORY          TAG                 IMAGE ID            CREATED              VIRTUAL SIZE
    test                latest              1a67c55ea394        About a minute ago   103.6 MB
    ubuntu              12.04               8ea067ad7a27        7 weeks ago          103.6 MB
    unbutn              02.09               8ea067ad7a27        7 weeks ago          103.6 MB

     基于本地模板导入

    也可以直接从一个操作系统模板文件导入一个镜像。在这里,推荐使用Open VZ提供的模板创建。在OPENVZ模板的下载地址为:https://openvz.org/Download/template/precreated

    比如,笔者现在一个下载一个centos的模板压缩包后,可以使用以下的命令导入,并且查看新导入的镜像,已经在本地存在了:

    [root@MSJTVL-MJSP-A35 docker]# cat centos-6-x86-minimal.tar.gz |docker import - centos:14.04
    2197ed1032f71381bf4746f2423aea5b22f9dacd7407c1794ea36d0b6a70a84e
    [root@MSJTVL-MJSP-A35 docker]# docker images
    REPOSITORY          TAG                 IMAGE ID            CREATED             VIRTUAL SIZE
    centos              14.04               2197ed1032f7        6 minutes ago       512.1 MB
    test                latest              1a67c55ea394        2 hours ago         103.6 MB
    ubuntu              12.04               8ea067ad7a27        7 weeks ago         103.6 MB
    unbutn              02.09               8ea067ad7a27        7 weeks ago         103.6 MB

     存出和载入镜像

    可以使用docker save 和docker load命令来存出和载入镜像。

    存出镜像

    如果要存出镜像到本地文件,可以使用docker save命令。例如ubuntu:12.04镜像为文件ubuntu_12.04.tar

    [root@MSJTVL-MJSP-A35 docker]# docker save -o ubuntu_12.04.tar ubuntu:12.04
    [root@MSJTVL-MJSP-A35 docker]# docker images
    REPOSITORY          TAG                 IMAGE ID            CREATED             VIRTUAL SIZE
    centos              14.04               2197ed1032f7        41 minutes ago      512.1 MB
    test                latest              1a67c55ea394        2 hours ago         103.6 MB
    ubuntu              12.04               8ea067ad7a27        7 weeks ago         103.6 MB
    unbutn              02.09               8ea067ad7a27        7 weeks ago         103.6 MB
    <none>              <none>              511136ea3c5a        3 years ago         0 B
    [root@MSJTVL-MJSP-A35 docker]# ll
    total 312636
    -rw-r--r-- 1 root root 210291971 Feb  9 13:40 centos-6-x86-minimal.tar.gz
    -rw-r--r-- 1 root root 109515264 Feb  9 14:00 ubuntu_12.04.tar
    [root@MSJTVL-MJSP-A35 docker]# 

    导入镜像

    可以使用docker load从存出的本地文件中再导入到本地镜像库,例如从文件ubuntu_12.04.tar到入镜像到本地镜像列表,如下所示:

    [root@MSJTVL-MJSP-A35 docker]# docker load --input ubuntu_12.04.tar 
  • 相关阅读:
    cmd 进入不同的驱动盘及上下级目录
    子网/ip/子网掩码
    虚拟化技术与"云"
    OSI 7层模型
    第一天的CI笔记
    在本地Apache服务器配置虚拟主机站点
    phpmailer 发送邮件
    mysql 中执行的 sql 注意字段之间的反向引号和单引号
    手动部署LNMT(Nginx+Tomcat)并实现Nginx反向代理Tomcat
    JS 创建元素的三种方法
  • 原文地址:https://www.cnblogs.com/tian880820/p/6381329.html
Copyright © 2011-2022 走看看