ToB企服应用市场:ToB评测及商务社交产业平台
标题:
【云原生】第六篇--Dockerfile精讲及新型容器镜像构建技术
[打印本页]
作者:
反转基因福娃
时间:
2022-6-25 09:02
标题:
【云原生】第六篇--Dockerfile精讲及新型容器镜像构建技术
Dockerfile精讲及新型容器镜像构建技术
一、容器与容器镜像之间的关系
二、容器镜像分类
三、容器镜像获取的方法
四、容器镜像获取方法演示
4.1 在DockerHub直接下载
4.2 把操作系统中文件系统打包为容器镜像
4.2.1 安装一个最小化的操作系统
4.2.2 把操作系统中文件系统进行打包
4.2.3 把打包后文件加载至本地文件系统生成本地容器镜像
4.3 把正在运行的容器打包为容器镜像
4.3.1 运行一个容器
4.3.2 在容器中安装应用
4.3.3 把正在运行的容器打包为容器镜像
4.4 通过Dockerfile实现容器镜像的自定义及生成
4.4.1 Dockerfile介绍
4.4.2 Dockerfile指令
4.4.3 Dockerfile基本构成
4.4.4 Dockerfile生成容器镜像方法
4.4.5 Dockerfile生成容器镜像案例
4.4.5.0 使用Dockerfile生成容器镜像步骤
4.4.5.1 使用Dockerfile生成Nginx容器镜像
4.4.5.2 使用Dockerfile生成Tomcat容器镜像
4.4.6 使用Dockerfile生成容器镜像优化
4.4.6.1 减少镜像分层
4.4.6.2 清理无用数据
4.4.6.3 多阶段构建镜像
一、容器与容器镜像之间的关系
说到Docker管理的容器不得不说容器镜像,主要因为容器镜像是容器模板,通过容器镜像我们才能快速创建容器。
如下图所示:
Docker Daemon通过容器镜像创建容器。
二、容器镜像分类
操作系统类
CentOS
Ubuntu
在dockerhub下载或自行制作
应用类
Tomcat
Nginx
MySQL
Redis
三、容器镜像获取的方法
主要有以下几种:
1、在DockerHub直接下载
2、把操作系统中文件系统打包为容器镜像
3、把正在运行的容器打包为容器镜像,即docker commit
4、通过Dockerfile实现容器镜像的自定义及生成
四、容器镜像获取方法演示
4.1 在DockerHub直接下载
# docker pull centos:latest
复制代码
# docker pull nginx:latest
复制代码
4.2 把操作系统中文件系统打包为容器镜像
4.2.1 安装一个最小化的操作系统
4.2.2 把操作系统中文件系统进行打包
# tar --numeric-owner --exclude=/proc --exclude=/sys -cvf centos7u6.tar /
复制代码
4.2.3 把打包后文件加载至本地文件系统生成本地容器镜像
# ls
centos7u6.tar
复制代码
# docker import centos7u6.tar centos7u6:v1
复制代码
# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
centos7u6 v1 130cb005b2dc 7 seconds ago 1.09GB
复制代码
# docker run -it centos7u6:v1 bash
[root@50f24f688b4d /]# ip a s
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
valid_lft forever preferred_lft forever
7: eth0@if8: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default
link/ether 02:42:ac:11:00:02 brd ff:ff:ff:ff:ff:ff link-netnsid 0
inet 172.17.0.2/16 brd 172.17.255.255 scope global eth0
valid_lft forever preferred_lft forever
复制代码
4.3 把正在运行的容器打包为容器镜像
4.3.1 运行一个容器
# docker run -it centos7u6:v1 bash
复制代码
4.3.2 在容器中安装应用
[root@064aace45718 /]# yum -y install httpd
复制代码
4.3.3 把正在运行的容器打包为容器镜像
[root@064aace45718 /]# ctrl + p +q
复制代码
# docker commit 064aace45718 centos7u6-httpd:v1
复制代码
# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
centos7u6-httpd v1 30ec9d728880 6 seconds ago 1.29GB
复制代码
# docker run -it centos7u6-httpd:v1 bash
[root@01a1373b4a3f /]# rpm -qa | grep httpd
httpd-tools-2.4.6-97.el7.centos.4.x86_64
httpd-2.4.6-97.el7.centos.4.x86_64
复制代码
4.4 通过Dockerfile实现容器镜像的自定义及生成
4.4.1 Dockerfile介绍
Dockerfile是一种能够被Docker程序解释的剧本。Dockerfile由一条一条的指令组成,并且有自己的书写格式和支持的命令。当我们需要在容器镜像中指定自己额外的需求时,只需在Dockerfile上添加或修改指令,然后通过docker build生成我们自定义的容器镜像(image)。
4.4.2 Dockerfile指令
构建类指令
用于构建image
其指定的操作不会在运行image的容器上执行(FROM、MAINTAINER、RUN、ENV、ADD、COPY)
设置类指令
用于设置image的属性
其指定的操作将在运行image的容器中执行(CMD、ENTRYPOINT、USER 、EXPOSE、VOLUME、WORKDIR、ONBUILD)
指令说明
指令描述FROM构建新镜像基于的基础镜像LABEL标签RUN构建镜像时运行的Shell命令COPY拷贝文件或目录到镜像中ADD解压压缩包并拷贝ENV设置环境变量USER为RUN、CMD和ENTRYPOINT执行命令指定运行用户EXPOSE声明容器运行的服务端口WORKDIR为RUN、CMD、ENTRYPOINT、COPY和ADD设置工作目录CMD运行容器时默认执行,如果有多个CMD指令,最后一个生效
指令详细解释
通过man dockerfile可以查看到详细的说明,这里简单的翻译并列出常用的指令
1、
FROM
FROM指令用于指定其后构建新镜像所使用的基础镜像。
FROM指令必是Dockerfile文件中的首条命令。
FROM指令指定的基础image可以是官方远程仓库中的,也可以位于本地仓库,优先本地仓库。
格式:FROM <image>:<tag>
例:FROM centos:latest
复制代码
2、
RUN
RUN指令用于在
构建
镜像中执行命令,有以下两种格式:
shell格式
格式:RUN <命令>
例:RUN echo 'kubemsb' > /var/www/html/index.html
复制代码
exec格式
格式:RUN ["可执行文件", "参数1", "参数2"]
例:RUN ["/bin/bash", "-c", "echo kubemsb > /var/www/html/index.html"]
复制代码
注意:
按优化的角度来讲:当有多条要执行的命令,不要使用多条RUN,尽量使用&&符号与\符号连接成一行。因为多条RUN命令会让镜像建立多层(总之就是会变得臃肿了
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!
欢迎光临 ToB企服应用市场:ToB评测及商务社交产业平台 (https://dis.qidao123.com/)
Powered by Discuz! X3.4