Dockerfile及新型容器镜像构建技术详解

本站所有内容来自互联网收集,仅供学习和交流,请勿用于商业用途。如有侵权、不妥之处,请第一时间联系我们删除!Q群:迪思分享

免费资源网 – https://freexyz.cn/
目录一、容器镜像分类1、操作系统类2、应用类二、容器镜像获取方法1、在dockerhub直接下载2、把操作系统中文件系统打包为容器镜像3、把正在运行的容器打包为容器镜像,即docker commit4、通过dockerfile实现容器镜像的自定义以及生成三、dockerfile1、dockerfile介绍2、dockerfile指令构建类指令置类指令3、dockerfile基本组成4、dockerfile生成容器镜像过程5、dockerfile生成容器镜像案例dockerfile生成容器镜像步骤6、使用Dockerfile生成Nginx容器镜像7、Dockerfile生成容器镜像优化的方法a、减少镜像分层b、清理无用数据

一、容器镜像分类

1、操作系统类

centos

ubuntu

自行制作

2、应用类

tomcat

nginx

mysql

redis

二、容器镜像获取方法

1、在dockerhub直接下载

docker pull centos:latest

2、把操作系统中文件系统打包为容器镜像

3、把正在运行的容器打包为容器镜像,即docker commit

[root@mylinux1 ~]# docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES ca081c0529d1 mysql:5.5 “docker-entrypoint.s…” 28 hours ago Up 2 minutes 0.0.0.0:8888->3306/tcp, :::8888->3306/tcp my_mysql [root@mylinux1 ~]# docker commit ca081c0529d1 mysql:v1.0 [root@mylinux1 ~]# docker images REPOSITORY TAG IMAGE ID CREATED SIZE mysql v1.0 d404d78aa797 3 years ago 205MB [root@mylinux1 ~]# docker run –name new_mysql -d mysql:v1.0 2fd23f7e01889fbdc74e02305c910a8d8d2ddb48f00241b83469c671d82e586f [root@mylinux1 ~]# docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 2fd23f7e0188 mysql:v1.0 “docker-entrypoint.s…” 4 seconds ago Up 3 seconds 3306/tcp new_mysql ca081c0529d1 mysql:5.5 “docker-entrypoint.s…” 28 hours ago Up 4 minutes 0.0.0.0:8888->3306/tcp, :::8888->3306/tcp my_mysql

4、通过dockerfile实现容器镜像的自定义以及生成

三、dockerfile

1、dockerfile介绍

Dockerfile是一种能够被Docker程序解释的剧本。Dockerfile由一条一条的指令组成,并且有自己的书写格式和支持的命令。当我们需要在容器镜像中指定自己额外的需求时,只需在Dockerfile上添加或修改指令,然后通过docker build生成我们自定义的容器镜像(image)。

Dockerfile及新型容器镜像构建技术详解插图

2、dockerfile指令

构建类指令

用于构建image

其指定的操作不会在运行image的容器上执行(FROM、MAINTAINER、RUN、ENV、ADD、COPY) 设置类指令

用于设置image属性

其指定的操作将在运行image的容器中执行(CMD、ENTRYPOINT、USER、EXPORT、VOLUME、WORKDIR、ONBUILD)

Dockerfile及新型容器镜像构建技术详解插图1

FROM指令用于指定其构建新镜像所使用的基础镜像

FROM指令必须是Dockerfile文佳中的首条命令

FROM指令指定的基础image可以是官方远程仓库中的,也可以位于本地仓库的

格式:FROM :

例如:FROM centos:latest

RUN指令用于构建镜像中执行命令,有以下两种格式

Dockerfile及新型容器镜像构建技术详解插图2

注意:按优化的角度来讲:当有多条要执行的命令,不要使用多条RUN,尽量使用&&符号与符号连接成一行。因为多条RUN命令会让镜像建立多层

(总之就是会变得臃肿了)。

Dockerfile及新型容器镜像构建技术详解插图3

CMD:不同于RUN,CMD用于指定在容器启动时所要执行的命令,而RUN用于指定镜像构建时所要执行的命令

Dockerfile及新型容器镜像构建技术详解插图4

每个Dockerfile只能有一条CMD命令。如果指定了多条命令,只有最后一条会被执行。

如果用户启动容器时候指定了运行的命令,则会覆盖掉CMD指定的命令。

EXPORT:用于指定容器在运行时监听的端口

Dockerfile及新型容器镜像构建技术详解插图5

ENV:用于指定一个环境变量

Dockerfile及新型容器镜像构建技术详解插图6

ADD:用于把宿主机上的文件拷贝到镜像中

Dockerfile及新型容器镜像构建技术详解插图7

COPY:与ADD指令类似,但是COPY的源文件只能时本地文件

Dockerfile及新型容器镜像构建技术详解插图8

ENTRYPOINT:与CMD非常类似

Dockerfile及新型容器镜像构建技术详解插图9

VOLUME:用于把宿主机里的目录与容器里的目录映射

只指定挂载点,docker宿主机映射的目录为自动生成的

Dockerfile及新型容器镜像构建技术详解插图10

Dockerfile及新型容器镜像构建技术详解插图11

3、dockerfile基本组成

基础镜像信息

维护者信息

镜像操作指令

容器启动时执行指令

4、dockerfile生成容器镜像过程

Dockerfile及新型容器镜像构建技术详解插图12

5、dockerfile生成容器镜像案例

dockerfile生成容器镜像步骤

第一步:创建一个文件夹(目录)

第二步:在文件夹(目录)中创建Dockerfile(固定)文件并编写,以及其他文件

第三步:使用docker build命令构建镜像

第四步:使用构建的镜像启动容器

6、使用Dockerfile生成Nginx容器镜像

[root@mylinux1 dockerfile_nginx]# ls Dockerfile index.html [root@mylinux1 dockerfile_nginx]# cat index.html nginx is running [root@mylinux1 dockerfile_nginx]# vim Dockerfile FROM centos:centos7 MAINTAINER “1181068365@qq.com” RUN yum -y install wget RUN wget -O /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-7.repo RUN yum -y install nginx ADD index.html /usr/share/nginx/html/ RUN echo “daemon off;” >> /etc/nginx/nginx.conf EXPOSE 80 CMD /usr/sbin/nginx

生成镜像

[root@mylinux1 dockerfile_nginx]# docker build -t centos7-nginx:v1.0 . [+] Building 69.6s (11/11) FINISHED => [internal] load build definition from Dockerfile 0.0s => => transferring dockerfile: 405B 0.0s => [internal] load .dockerignore 0.0s => => transferring context: 2B 0.0s => [internal] load metadata for docker.io/library/centos:centos7 25.6s => CACHED [1/6] FROM docker.io/library/centos:centos7@sha256:be65f488b7764ad3638f236b7b51 0.0s => [internal] load build context 0.0s => => transferring context: 114B 0.0s => [2/6] RUN yum -y install wget 15.9s => [3/6] RUN wget -O /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-7.rep 1.5s => [4/6] RUN yum -y install nginx 24.3s => [5/6] ADD index.html /usr/share/nginx/html/ 0.1s => [6/6] RUN echo “daemon off;” >> /etc/nginx/nginx.conf 1.2s => exporting to image 0.8s => => exporting layers 0.8s => => writing image sha256:337b3bac42dda5f878cb671f3306f7753a0693bbddb74388663c943d51ca20 0.0s => => naming to docker.io/library/centos7-nginx:v1.0 0.0s [root@mylinux1 dockerfile_nginx]# docker images | grep “centos7-nginx” centos7-nginx v1.0 337b3bac42dd 11 minutes ago 657MB

运行容器

[root@mylinux1 dockerfile_nginx]# docker run -d centos7-nginx:v1.0 62b15bc281b433f213f019d7ae9f1ef0ceb2f2d6ee98972d58029f28c548b0ab

查看运行的容器

[root@mylinux1 dockerfile_nginx]# docker inspect “62b” | address -bash: address: 未找到命令 [root@mylinux1 dockerfile_nginx]# docker inspect “62b” | grep “IPAddress” “SecondaryIPAddresses”: null, “IPAddress”: “172.17.0.5”, “IPAddress”: “172.17.0.5”, [root@mylinux1 dockerfile_nginx]# curl http://172.17.0.5 nginx is running [root@mylinux1 dockerfile_nginx]# docker inspect “62b” | address -bash: address: 未找到命令 [root@mylinux1 dockerfile_nginx]# docker inspect “62b” | grep “IPAddress” “SecondaryIPAddresses”: null, “IPAddress”: “172.17.0.5”, “IPAddress”: “172.17.0.5”, [root@mylinux1 dockerfile_nginx]# curl http://172.17.0.5 nginx is running

7、Dockerfile生成容器镜像优化的方法

a、减少镜像分层

Dockerfile中包含多种指令,如果涉及到部署最多使用的算是RUN命令了,使用RUN命令时,不建议每次安装都使用一条单独的RUN命令,可

以把能够合并安装指令合并为一条,这样就可以减少镜像分层。

Dockerfile及新型容器镜像构建技术详解插图13

优化内容如下

Dockerfile及新型容器镜像构建技术详解插图14

b、清理无用数据

一次RUN形成新的一层,如果没有在同一层删除,无论文件是否最后删除,都会带到下一层,所以要在每一层清理对应的残留数据,减小

镜像大小。

把生成容器镜像过程中部署的应用软件包做删除处理

以上就是Dockerfile及新型容器镜像构建技术详解的详细内容,更多关于Dockerfile及新型容器镜像构建的资料请关注其它相关文章!

免费资源网 – https://freexyz.cn/


© 版权声明
THE END
★喜欢这篇文章吗?喜欢的话,麻烦动动手指支持一下!★
点赞14 分享
评论 抢沙发

请登录后发表评论

    暂无评论内容