zoukankan      html  css  js  c++  java
  • Docker 镜像制作方法

    本文档介绍 Docker 镜像制作的两种方法,使用的系统是 CentOS7
    Docker Image 的制作两种方法
    方法 1:docker commit #保存 container 的当前状态到 image 后,然后生成对应的 image
    方法 2:docker build #使用 Dockerfile 文件自动化制作 image
    
    方法一:docker commit

    创建一个安装好 apache 工具的容器镜像

    [root@Docker ~]# docker images
    REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
    centos              latest              470671670cac        4 months ago        237MB
    [root@Docker ~]# docker ps
    CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES
    [root@Docker ~]# docker run -it centos:latest /bin/bash
    [root@1b96e68a3cce /]#
    [root@1b96e68a3cce /]# yum -y install httpd #在 container 中安装 apache 软件包
    [root@1b96e68a3cce /]# exit
    

    查看 images 列表

    [root@Docker ~]# docker images
    REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
    centos              latest              470671670cac        4 months ago        237MB
    

    根据容器当前状态做一个 image 镜像:创建一个安装了 apache 工具的 centos 镜像

    语法: docker commit "container 的 ID" 或 "image_name"

    查看容器 ID

    [root@Docker ~]# docker ps -a
    CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS                        PORTS               NAMES
    1b96e68a3cce        centos:latest       "/bin/bash"              3 minutes ago       Exited (0) 2 minutes ago                          awesome_hypatia
    607752360adf        centos:latest       "/bin/bash -c 'while…"   18 minutes ago      Exited (137) 12 minutes ago                       brave_fermi
    0a297ff99af8        centos:latest       "/bin/bash"              22 minutes ago      Exited (1) 20 minutes ago                         ecstatic_yonath
    efb4af688330        centos:latest       "/bin/bash"              24 minutes ago      Exited (0) 23 minutes ago                         epic_mcclintock
    [root@Docker ~]# docker commit 1b96e68a3cce centos:apache
    sha256:b8822ec8a7bbb325793e7908e355180be82a49481cff197661fb5d0da5872e88
    [root@Docker ~]# docker images
    REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
    centos              apache              b8822ec8a7bb        9 seconds ago       280MB
    centos              latest              470671670cac        4 months ago        237MB
    

    使用新创建的 centos:apache 镜像,生成一个容器实例

    [root@Docker ~]# docker run -it centos:apache /bin/bash
    [root@e4c295d27581 /]# rpm -qa httpd 
    httpd-2.4.37-16.module_el8.1.0+256+ae790463.x86_64
    

    看到httpd软件名称说明基于 apache 镜像的容器创建成功

    方法二:通过:docker build 创建一个基于 centos 的 httpd web 服务器镜像

    使用 docker build 创建镜像时,需要使用 Dockerfile 文件自动化制作 image 镜像
    Dockerfile 有点像源码编译时./configure 后产生的 Makefile

    1、创建工作目录
    [root@Docker ~]# mkdir /docker-build
    [root@Docker ~]# cd /docker-build
    [root@Docker docker-build]# touch Dockerfile
    [root@Docker docker-build]# ls
    Dockerfile
    注: make 自动化编译时需要 Makefile 文件,自动化创建 docker 镜像时,需要 Dockerfile
    
    2、编辑 Dockerfile
    Dockerfile 用来创建一个自定义的 image,包含了用户挃定的软件依赖等。
    [root@Docker docker-build ]# vim Dockerfile
    FROM centos:latest
    MAINTAINER <docker@jaking.cn>
    RUN yum -y install httpd
    ADD start.sh /usr/local/bin/start.sh
    ADD index.html /var/www/html/index.html
    CMD echo hello world
    

    注释

    FROM centos:latest # FROM 基于哪个镜像
    MAINTAINER <docker@jaking.cn> # MAINTAINER 镜像创建者
    RUN yum -y install httpd #RUN 安装软件用
    ADD start.sh /usr/local/bin/start.sh
    ADD index.html /var/www/html/index.html
    # ADD 将文件拷贝到新产生的镜像的文件系统对应的路径。所有拷贝到新镜像中的
    文件和文件夹权限为 0755,uid 和 gid 为 0
    CMD echo hello world #container 启动时执行的命令或启动服务,但是一个 Dockerfile 中只能有一条 CMD 命令,有多条则另执行最后一条 CMD
    
    3、创建 start.sh 脚本启动 httpd 服务和 apache 默认首页 index.html 文件
    [root@Docker docker-build ]# echo "#!/bin/bash" >> start.sh
    [root@Docker docker-build ]# echo "/usr/sbin/httpd -DFOREGROUND" >> start.sh
    注:/usr/sbin/httpd -DFOREGROUND 相当于执行了 systemctl start httpd
    
    [root@Docker docker-build ]# chmod a+x start.sh
    
    创建 index.html
    [root@Docker docker-build ]# echo "docker image build  test from jaking" > index.html
    
    4、使用命令 build 来创建新的 image

    语法:docker build -t 父镜像名:镜像的 tag Dockerfile 文件所在路径
    -t :表示 tag,镜像名

    例:使用命令 docker build 来创建新的 image,并命名为 centos:httpd

    [root@Docker docker-build]# ls
    Dockerfile  index.html  start.sh
    [root@Docker docker-build]# docker build -t centos:httpd ./
    # 注: ./ 表示当前目录,另外你的当前目录下要包含 Dockerfile
    Sending build context to Docker daemon  4.096kB
    Step 1/5 : FROM centos:latest
     ---> 470671670cac
    Step 2/5 : MAINTAINER <docker@jaking.cn.cn>
     ---> Running in 0180810d2ab3
    Removing intermediate container 0180810d2ab3
     ---> 5b9af0184bcf
    Step 3/5 : RUN yum -y install httpd
     ---> Running in 8f5c114649ed
    CentOS-8 - AppStream                            228 kB/s | 7.0 MB     00:31    
    CentOS-8 - Base                                 547 kB/s | 2.2 MB     00:04    
    CentOS-8 - Extras                               431  B/s | 5.9 kB     00:14    
    Dependencies resolved.
    ================================================================================
     Package           Arch   Version                               Repo       Size
    ================================================================================
    Installing:
     httpd             x86_64 2.4.37-16.module_el8.1.0+256+ae790463 AppStream 1.7 M
    Installing dependencies:
     apr               x86_64 1.6.3-9.el8                           AppStream 125 k
     apr-util          x86_64 1.6.1-6.el8                           AppStream 105 k
     centos-logos-httpd
                       noarch 80.5-2.el8                            AppStream  24 k
    
     ...省略部分输出信息...                
    
    Complete!
    Removing intermediate container 8f5c114649ed
     ---> 040b5f229962
    Step 4/5 : ADD start.sh /usr/local/bin/start.sh
     ---> 11a106005031
    Step 5/5 : ADD index.html /var/www/html/index.html
     ---> 85b4a3657ced
    Successfully built 85b4a3657ced
    Successfully tagged centos:httpd
    

    查看 images 列表

    [root@Docker docker-build]# docker images
    REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
    centos              httpd               85b4a3657ced        45 seconds ago      280MB
    centos              apache              b8822ec8a7bb        20 minutes ago      280MB
    centos              latest              470671670cac        4 months ago        237MB
    # 注:docker 镜像=应用/程序+库
    

    运行新生成的镜像

    [root@Docker docker-build]# docker run -it centos:httpd /bin/bash 
    [root@1188a43a4585 /]# ls
    bin  etc   lib    lost+found  mnt  proc  run   srv  tmp  var
    dev  home  lib64  media       opt  root  sbin  sys  usr
    [root@1188a43a4585 /]# rpm -qa httpd
    httpd-2.4.37-16.module_el8.1.0+256+ae790463.x86_64
    [root@1188a43a4585 /]# exit
    exit
    [root@Docker docker-build]#
    
    总结

    以上就是 Docker 镜像制作方法的介绍,希望能给大家带来帮助。

  • 相关阅读:
    CnForums1.0 Alpha 开始试运行
    asp.net Forums2.0修改密码后无法登陆问题——都是Cache惹的祸
    CnForums1.0 Alpha RC1 发布
    Docker: Nvidia Driver, Nvidia Docker 推荐安装步骤
    Docker: docker pull, wget, curl, git clone 等如何更快?
    DL4J实战之三:经典卷积实例(LeNet5)
    纯净Ubuntu16安装CUDA(9.1)和cuDNN
    DL4J实战之四:经典卷积实例(GPU版本)
    JAVA 中静态块、静态变量加载顺序详解
    设计模式之单例模式
  • 原文地址:https://www.cnblogs.com/linuxprobe/p/14334384.html
Copyright © 2011-2022 走看看