• 技术文章 >运维 >Docker

    创建Docker镜像有几种方式

    青灯夜游青灯夜游2022-02-23 18:22:36原创1270

    创建Docker镜像有2种方式:1、使用“docker commit”命令基于已有容器手动构建镜像;2、使用Dockerfile自动构建镜像,Docker程序会通过读取Dockerfile构建文件中的指令自动生成镜像。

    本教程操作环境:linux5.9.8系统、docker-1.13.1版、Dell G3电脑。

    有时候从Docker镜像仓库中下载的镜像不能满足要求,我们可以基于一个基础镜像构建一个自己的镜像.

    镜像构建介绍

    在什么情况下我们需要自己构建镜像那?

    (1)当我们找不到现有的镜像,比如自己开发的应用程序

    (2)需要在镜像中加入特定的功能

    docker构建镜像有两种方式:docker commit命令与Dockerfile构建文件

    docker commit构建镜像

    基于已有容器构建镜像主要是通过docker commit命令来构建新的镜像。

    dockercommit构建进行主要有三步:

    比如在centos镜像中安装vim编辑器并存为新的镜像

    (1)运行容器

    [root@ken1 docker]# docker run -it centos
    Unable to find image 'centos:latest' locally
    latest: Pulling from library/centos
    a02a4930cb5d: Pull complete 
    Digest: sha256:184e5f35598e333bfa7de10d8fb1cebb5ee4df5bc0f970bf2b1e7c7345136426
    Status: Downloaded newer image for centos:latest

    (2)安装vim编辑器

    vim编辑器确认没有安装

    [root@69f501e858a6 /]# vim
    bash: vim: command not found

    进行安装

    [root@69f501e858a6 /]# yum install vim -y

    (3)保存为新得镜像

    首先查看当前运行的镜像

    [root@ken1 ~]# docker ps
    CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES
    69f501e858a6        centos              "/bin/bash"         2 minutes ago       Up 2 minutes                            quizzical_torvalds

    使用commit存为新的镜像

    [root@ken1 ~]# docker commit 69f501e858a6 centos-vim
    sha256:42083b89a179368bc29a8f40d14f8824990183c8e4b28fd84411d440c26342e5

    69f501e858a6是运行容器的ID使用name下面的名称也行
    centos-vim是新镜像的名字

    查看一下是否有了centos-vim镜像

    重新启动新的镜像,验证是否可以使用vim编辑器

    可以发现新的镜像可以使用vim编辑器了

    [root@ken1 ~]# docker run -it centos-vim 
    [root@61d090898bad /]# vim
    [root@61d090898bad /]# vim test

    上面演示了如何使用commit创建新的镜像,但是docker并不建议使用这种方式创建镜像,原因如下:

    Dockerfile构建镜像

    Dockerfile是由一组指令组成的文件,其每条指令对应Linux中的一条命令,Docker程序通过读取Dockerfile中的指令最终生成镜像。

    第一个Dockerfike

    第一步:创建一个新的目录

    [root@ken1 ~]# mkdir /test

    第二步:编写Dockerfile

    名称就叫Dockerfile,且第一个D需要大写

    [root@ken1 ~]# cat Dockerfile
    FROM centos
    RUN yum install vim -y

    FROMcentos表示使用centos这个基础镜像

    RUN表示在centos上安装vim编辑器

    第三步:构建镜像

    [root@ken1 ~]# docker build -t centos-vim2 .

    -t后面指定新的镜像的标签名(tag)

    . 最后的一个点指明docker context为当前目录。docker默认会从build context中查找 Dockerfile文件,我们也可以通过-f参数指定Dockerfile的位置

    第四步:查看镜像

    查看镜像分层结构

    docker history会显示镜像的构建历史,也就是Dockerfile的执行过程。

    Dcokerfile常用指令

      1.FROM

    指定base镜像

      2. MAINTAINER

    设置镜像的作者。可以是任意的字符

      3.COPY

    将文件从build context复制到镜像

    COPY支持两种格式:COPY src dest 和 COPY [“src”,”dest”]

    注意:src只能制动build context中的文件或目录即在和Dockerfile同目录下才可以

      4.ADD

    与COPY类似,从build context复制文件到镜像。

    不同的是,如果src是归档文件(tar,zip,tgz,xz),文件会被自动接要到dest

      5.ENV

    设置环境变量,环境变量可被后面的指令使用,例如:

    ENV name ken RUN echo $name

      6.EXPOSE

    指定容器中的进程会监听某个端口,Docker可以将该端口暴露出来

      7.VOLUME

    将文件或目录声明为volume

      8.WORKDIR

    为后面的RUN,ENTRYPINT,ADD,COPY指令设置镜像中的当前工作目录

      9.RUN

    在容器中运行指定的命令

      10.CMD

    容器启动时运行指定的命令

    dockerfile中可以多个CMD指令,但是只要最后一个生效。CMD可以被docker run之后的参数替换

      11.ENTRYPOINT

    设置容器启东市的命令

    dockerfile中可以有多个ENTRYPOINT,但是只有最后一个生效。

    CMD或者docker run之后的参数会被当做参数传递给ENTERYPOINT.

    Dockerfile演示

    下面演示一个比较全面的dockerfile

    [root@ken1 test]# cat Dockerfile 
    #my Dockerfile
    FROM busybox
    MAINTAINER ken
    WORKDIR /ken
    RUN touch test
    COPY ["ken1","."]
    ADD ["wordpress.tar.gz","."]
    ENV name "ken"

    注意:Dockerfile支持以#开头的注释

    构建镜像

    [root@ken1 test]# docker build -t myimage .
    Sending build context to Docker daemon  4.281MB
    Step 1/7 : FROM busybox
     ---> 3a093384ac30
    Step 2/7 : MAINTAINER ken
     ---> Running in 2a73a83507ce
    Removing intermediate container 2a73a83507ce
     ---> 8c3df9b3d823
    Step 3/7 : WORKDIR /ken
     ---> Running in 31c6f9fe2195
    Removing intermediate container 31c6f9fe2195
     ---> a458cf986072
    Step 4/7 : RUN touch test
     ---> Running in e1b08ebd363c
    Removing intermediate container e1b08ebd363c
     ---> 41601920009a
    Step 5/7 : COPY ["ken1","."]
     ---> 2ebfa0933fca
    Step 6/7 : ADD ["wordpress.tar.gz","."]
     ---> d0ad29d3aa34
    Step 7/7 : ENV name "ken"
     ---> Running in fceae6e20e63
    Removing intermediate container fceae6e20e63
     ---> 7efe0600e48f
    Successfully built 7efe0600e48f
    Successfully tagged myimage:latest

    查看镜像

    运行该镜像

    [root@ken1 test]# docker run -it myimage
    /ken # ls
    ken1       test       wordpress
    /ken # echo $name
    ken

    推荐学习:《docker视频教程

    以上就是创建Docker镜像有几种方式的详细内容,更多请关注php中文网其它相关文章!

    声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn核实处理。
    专题推荐:Docker 镜像
    上一篇:最详细的整理docker数据卷教程 下一篇:docker保存的镜像在哪儿
    Web大前端开发直播班

    相关文章推荐

    • docker中镜像和容器的区别是什么• 解析docker怎么搭建lnmp环境(php7.4 + nginx )• 带你搞懂怎么基于Docker安装Nginx搭建静态服务器• Docker镜像原理之联合文件系统和分层理解(实例详解)• docker不能对什么进行隔离• docker四种网络模式有什么区别

    全部评论我要评论

  • 取消发布评论发送
  • 1/1

    PHP中文网