dokerfile结构:
一、基础镜像信息
二、维护者信息
三、操作指令
四、容器启动时执行指令
如何将镜像体积缩小??
1.基础镜像尽量用最小化的来构建
2.dockerfile尽量少用指令,能合并就合并,来减少镜像的层数
3.用之前构建过的镜像进行二次构建,在原来基础上再构建一次(相当于只追求第一次的结果)
镜像的分层:
dockerfile操作的常用的指令:
优先级:
docker run --entrypoint > Dockerfile ENTRYPOINT > docker run命令 > dockerfile
(1)FROM 镜像
指定镜像所基于的基础镜像,第一条指令必须为FROM指令,每创建一个镜像就需要一条FROM指令
(2)MAINTAINER 名字
说明新镜像的维护人员信息
(3)RUN命令
基于镜像上执行的命令,并且提交到新的镜像中
(4)ENTRYPOINT【“要运行的程序”,“参数1”,“参数2”】
设定容器启动时的第一个运行的命令及其参数
可以通过使用docker run --entrypoint 来覆盖镜像中的
exec(数值格式):ENTRYPOINT["命令",“选项”,“参数”]
shell格式:entrypoint 命令 选项 参数
(5)CMD【“要运行的程序”,“参数1”,“参数2”】
设定容器运行时的默认指令
CMD可以给ENTRYPOINT进行传参
****ENTRYPOINT 和CMD区别
- 优先级 ENTRYPOINT 高于 CMD
- entrypoint是设定容器启动时的第一个运行的命令及其参数
- cmd是执行默认命令
- 他们若同时存在,cmd将作为传参作用
优先级:
docker run --entrypoint > Dockerfile ENTRYPOINT > docker run命令 > dockerfile
CMD
(6)EXPOSE端口号
指定新镜像加载到Docker时要开启的端口
暴露端口之后,外部才可以访问
docker run -p 3400:80
port可以查看暴露的端口
(7)ENV环境变量 变量值
设置一个环境变量的值,后面会被RUN使用
(8)***ADD源文件/目录 目标文件/目录
将文件复制到镜像中,源文件要与Dockerfile位于相同目录中、
(9)COPY 源文件/目录 目标文件/目录
****ADD和COPY的区别
都具有复制作用
ADD支持源文件下载到目标目录
也支持将源文件解压后然后复制目标目录
(10)VOLUME【“目录”】
在容器中创建一个数据卷
(11)USER 用户名/UID
指定运行容器时的用户
(12)WORKDIR 路径
为后续的RUN 、CMD、ENTRYPOINT指定工作目录
用于切换当前工作目录用的
(13)ONBUILD 命令
(14)ARG
设置编译镜像时加入的参数
- 第一行必须使用FROM指令指明所有基于的镜像名称
- 之后使用MAINTAINER指令说明维护镜像的用户信息
- 然后是镜像操作的相关指令,如RUN指令,每运行一条指令,都会给基础镜像添加新一层
- 最后使用CMD指令指定启动容器时要运行的命令操作
Dockerfile 案例部署
脚本:
构建SSH镜像
systemclt镜像