Docker 通过Dockerfile创建自定义镜像
程序员文章站
2022-06-03 15:53:46
...
Dockerfile是一个文本格式的配置文件,可以使用其来快速创建自定义镜像。包含了创建镜像需要的所有信息和需要执行的命令行。
一、指令说明
下面是一个创建支持SSH服务的镜像的Dockerfile文件
#设置基础镜像
FROM ubuntu:latest
#作者信息
MAINTAINER mistra (aaa@qq.com)
#要执行的命令
RUN apt-get update
#安装SSH服务
RUN apt-get install -y openssh-server
RUN mkdir -p /var/run/sshd
RUN mkdir -p /root/.ssh
#取消pam限制
RUN sed -ri 's/session required pam_loginuid.so/#session required pam_loginuid.so/g' /etc/pam.d/sshd
#复制配置文件导对应位置,为脚本添加可执行权限
ADD authorized_keys /root/.ssh/authorized_keys
ADD run.sh /run.sh
RUN chmod 755 /run.sh
#开放端口
EXPOSE 22
#设置自启动命令
CMD ["/run.sh"]
以此来说明Dockerfile的指令
- FROM:指定所创建镜像的基础镜像,本地没有就会去官方库下载
- MAINTAINER:作者信息
-
RUN:运行指定命令。创建镜像的重点,每一个条RUN 的行为,就和手工建立镜像的过程一样:新建立一层,在其上执行这些命令,执行结束后,提交这一层的修改,构成新的镜像。上面的写法有6个RUN语句,那就会创建6层镜像,结果就是产生非常臃肿、非常多层的镜像。所以当命令比较多时要用 \ 换行 和 && 连接符连接命令。用尽量少的RUN语句。上面就可以这样写
RUN apt-get update \
&& apt-get install -y openssh-server….. - CMD:指定容器启动时默认执行的命令,每个Dockerfile文件只能有一条CMD命令,Docker 不是虚拟机,容器就是进程。既然是进程,那么在启动容器的时候,需要指定所运行的程序及参数。 CMD 指令就是用于指定默认的容器主进程的启动命令的。
- EXPOSE:声明镜像内服务所监听的端口
- ADD/COPY:复制文件
- ENTRYPOINT:指定镜像的默认入口命令。该命令会在容器启动时作为根命令执行,所有传入值作为该命令的参数。
- ENV:设置环境变量,无论是后面的其它指令,如 RUN ,还是运行时的应用,都可以直接使用这里定义的环境变量。
- ARG:指定一些镜像内使用的参数(例如版本号),在执行docker build命令时以–build-arg< varname>=< value>的格式传入。
- WORKDIR:指定工作目录
二、创建一个简单的自定义镜像
创建一个临时文件夹ubuntu_demo,并在里面创建一个Dockerfile文件
编辑Dockerfile
FROM ubuntu:latest
MAINTAINER mistra@docker.com
RUN mkdir /opt/leh \
&& touch /opt/leh/test
CMD echo "Hello Mistra"
创建镜像
- docker build -t mistra:v1 . 最后的 . 表示执行当前目录的Dockerfile文件,如果需要全路径则为/root/ubuntu_demo(就是找到Dockerfile文件)
可以清楚看到创建命令执行过程。
可以通过Dockerfile创建,订制自己需要的镜像,比如包含了java运行环境的镜像,包含了nginx的镜像等等。
参考:
Docker Dockerfile 定制镜像
docker之Dockerfile实践
上一篇: Locust 设置断言