• Docker系列教程04-Docker构建镜像的三种方式


    简介

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

    今天就逐一讲述为大家讲述,如何构建属于自己的docker镜像。

    1、基于容器构建镜像

    基于已有容器构建镜像主要是通过docker commit命令来构建新的镜像,语法规则如下:

    docker commit 语法

    下面将演示下如何基于已有容器构建镜像

    1、首先,创建一个容器,并在其容器内创建一个test文件,之后退出。代码如下:

    root@ubuntu:~# docker run -it ubuntu:18.04 /bin/bash
    root@b66c08d61f9e:/# echo "DIY" > /test
    root@b66c08d61f9e:/# exit
    exit
    

    2、基于该容器使用docker commit命令构建新的镜像

    root@ubuntu:~# docker commit -m "new_image" -a "cnLinuxer" b66 myubuntu:v1
    sha256:de7a0211f27fb71ca34c3a5c1829f6d2a69c15ef74cd397a52f2cc8a5e98e1b9
    

    参数解释:上面-m选项指定了新镜像的提交信息,-a标注作者信息,b66是容器ID,myubuntu:v1是指定的新镜像名称。

    3、此时本地镜像库已生成myubuntu:v1镜像

    root@ubuntu:~# docker images
    REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
    myubuntu            v1                  de7a0211f27f        8 minutes ago       64.2MB
    ...
    

    4、使用新生成的镜像构建容器,测试自定义数据有无丢失

    root@ubuntu:~# docker run -it myubuntu:v1 /bin/bash
    root@d11d9577f31b:/# cat /test
    DIY
    root@d11d9577f31b:/#
    

    基于已有容器构建镜像,其实质就是将容器里运行的程序以及该程序的运行环境打包起来生成新的镜像。

    2、基于本地模板导入

    用户也可以从模板文件中导入镜像,主要使用docker import命令

    下面演示基于本地模板导入镜像

    1、首先,创造出一个模板,即 将容器导入到一个模板文件中

    root@ubuntu:~# docker export b66 > /root/myubuntu.tar
    root@ubuntu:~# ls /root
    /root/myubuntu.tar
    

    2、利用模板导入成镜像

    root@ubuntu:~# docker import /root/myubuntu.tar qinlulu/ubuntu:18.04
    sha256:498afccbfb2ddcc7b8ce5a697e982f5bc8d3af9a55adf6a7cc2fd1121dbee36e
    

    3、此时本地镜像仓库多出一个qinlulu/ubuntu:18.04镜像

    root@ubuntu:~# docker images
    REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
    qinlulu/ubuntu      18.04               498afccbfb2d        6 seconds ago       64.2MB
    

    3、基于Dockerfile构建

    基于Dockerfile构建镜像就目前而言是使用最为广泛的。Dockerfile是由一组指令组成的文件,其每条指令对应Linux中的一条命令,Docker程序通过读取Dockerfile中的指令最终生成镜像。

    Dockerfile指令

    下面演示基于Dockerfile文件构建nginx镜像的实例

    1、准备工作:

    创建一个目录,在该目录里编写dockerfile及存放nginx软件包

    root@ubuntu:~# mkdir -p /opt/nginx
    root@ubuntu:~# wget -P /opt/nginx http://nginx.org/download/nginx-1.11.1.tar.gz
    root@ubuntu:~# touch /opt/nginx/Dockerfile
      // 需要准备好以下两个文件
    root@ubuntu:~# ls /opt/nginx/
    Dockerfile  nginx-1.11.1.tar.gz
    

    2、编写dockerfile文件,代码如下:

    root@ubuntu:~# vim /opt/nginx/Dockerfile
    FROM centos:7.5.1804 #指定父镜像
    MAINTAINER mynginx   #指定维护者信息
    ADD nginx-1.11.1.tar.gz /usr/local #将本地nginx软件包上传至容器/usr/local/下
    RUN yum -y install vim wget gcc gcc-c++ make openssl-devel pcre-devel #yum安装依赖软件
    WORKDIR /usr/local/nginx-1.11.1/ #进入nginx工作目录
    RUN ./configure --prefix=/usr/local/nginx && make && make install #编译并安装nginx服务
    RUN echo "daemon off;" >> /usr/local/nginx/conf/nginx.conf #关闭nginx后台运行
    ENV PATH /usr/local/nginx/sbin:$PATH #添加nginx的环境变量
    EXPOSE 80 #将容器的80端口映射出来
    CMD ["nginx"]  #执行nginx命令,启动nginx
    

    3、构建nginx镜像

    root@ubuntu:/opt/nginx# docker build -t mynginx:v1
    

    输出两个Successfully即为构建成功!如下图:

    dockerfile构建镜像过程

    4、运行nginx镜像

    root@ubuntu:~# docker run -itd -p 888:80 mynginx:v1
    e93a52fffd9ea4928a062f00613e4325296042a143307602700ddf0c463c02c9
    

    5、测试nginx服务

    浏览器访问测试

    更多Dockerfile的内容将通过后面大量的构建实例再为大家详细介绍。

    十年磨一剑
  • 相关阅读:
    CSS相关(2)
    CSS相关(1)
    Git(待补充)
    Jenkins学习(1)-什么是Jenkins
    Yaml(待补充)
    Tomcat(待补充)
    Json(待补充)
    Java语言学习(8)-Java中的异常处理
    Java语言学习(7)-Java中IO
    Java语言学习(6)-Java中封装类(正则表达式操作类)
  • 原文地址:https://www.cnblogs.com/qinlulu/p/13204796.html
Copyright © 2020-2023  润新知