创建Docker镜像有几种方式
时间:2022-02-23 18:22
创建Docker镜像有2种方式:1、使用“docker commit”命令基于已有容器手动构建镜像;2、使用Dockerfile自动构建镜像,Docker程序会通过读取Dockerfile构建文件中的指令自动生成镜像。 本教程操作环境:linux5.9.8系统、docker-1.13.1版、Dell G3电脑。 有时候从Docker镜像仓库中下载的镜像不能满足要求,我们可以基于一个基础镜像构建一个自己的镜像. 在什么情况下我们需要自己构建镜像那? (1)当我们找不到现有的镜像,比如自己开发的应用程序 (2)需要在镜像中加入特定的功能 docker构建镜像有两种方式: 基于已有容器构建镜像主要是通过 dockercommit构建进行主要有三步: 比如在centos镜像中安装vim编辑器并存为新的镜像 (1)运行容器 (2)安装vim编辑器 vim编辑器确认没有安装 进行安装 (3)保存为新得镜像 首先查看当前运行的镜像 使用commit存为新的镜像 69f501e858a6是运行容器的ID使用name下面的名称也行 查看一下是否有了centos-vim镜像 重新启动新的镜像,验证是否可以使用vim编辑器 可以发现新的镜像可以使用vim编辑器了 上面演示了如何使用commit创建新的镜像,但是docker并不建议使用这种方式创建镜像,原因如下: Dockerfile是由一组指令组成的文件,其每条指令对应Linux中的一条命令,Docker程序通过读取Dockerfile中的指令最终生成镜像。 第一步:创建一个新的目录 第二步:编写Dockerfile 名称就叫Dockerfile,且第一个D需要大写 FROMcentos表示使用centos这个基础镜像 RUN表示在centos上安装vim编辑器 第三步:构建镜像 -t后面指定新的镜像的标签名(tag) . 最后的一个点指明docker context为当前目录。docker默认会从build context中查找 Dockerfile文件,我们也可以通过-f参数指定Dockerfile的位置 第四步:查看镜像 docker history会显示镜像的构建历史,也就是Dockerfile的执行过程。 指定base镜像 设置镜像的作者。可以是任意的字符 将文件从build context复制到镜像 COPY支持两种格式:COPY src dest 和 COPY [“src”,”dest”] 注意:src只能制动build context中的文件或目录即在和Dockerfile同目录下才可以 与COPY类似,从build context复制文件到镜像。 不同的是,如果src是归档文件(tar,zip,tgz,xz),文件会被自动接要到dest 设置环境变量,环境变量可被后面的指令使用,例如: ENV name ken RUN echo $name 指定容器中的进程会监听某个端口,Docker可以将该端口暴露出来 将文件或目录声明为volume 为后面的RUN,ENTRYPINT,ADD,COPY指令设置镜像中的当前工作目录 在容器中运行指定的命令 容器启动时运行指定的命令 dockerfile中可以多个CMD指令,但是只要最后一个生效。CMD可以被docker run之后的参数替换 设置容器启东市的命令 dockerfile中可以有多个ENTRYPOINT,但是只有最后一个生效。 CMD或者docker run之后的参数会被当做参数传递给ENTERYPOINT. 下面演示一个比较全面的dockerfile 注意:Dockerfile支持以#开头的注释 构建镜像 查看镜像 运行该镜像 推荐学习:《docker视频教程》 以上就是创建Docker镜像有几种方式的详细内容,更多请关注gxlcms其它相关文章!镜像构建介绍
docker commit
命令与Dockerfile
构建文件docker commit构建镜像
docker commit
命令来构建新的镜像。[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
[root@69f501e858a6 /]# vim
bash: vim: command not found
[root@69f501e858a6 /]# yum install vim -y
[root@ken1 ~]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
69f501e858a6 centos "/bin/bash" 2 minutes ago Up 2 minutes quizzical_torvalds
[root@ken1 ~]# docker commit 69f501e858a6 centos-vim
sha256:42083b89a179368bc29a8f40d14f8824990183c8e4b28fd84411d440c26342e5
centos-vim是新镜像的名字[root@ken1 ~]# docker run -it centos-vim
[root@61d090898bad /]# vim
[root@61d090898bad /]# vim test
Dockerfile构建镜像
第一个Dockerfike
[root@ken1 ~]# mkdir /test
[root@ken1 ~]# cat Dockerfile
FROM centos
RUN yum install vim -y
[root@ken1 ~]# docker build -t centos-vim2 .
查看镜像分层结构
Dcokerfile常用指令
1.FROM
2. MAINTAINER
3.COPY
4.ADD
5.ENV
6.EXPOSE
7.VOLUME
8.WORKDIR
9.RUN
10.CMD
11.ENTRYPOINT
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"
[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