欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

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文件
Docker 通过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文件)

Docker 通过Dockerfile创建自定义镜像
可以清楚看到创建命令执行过程。
可以通过Dockerfile创建,订制自己需要的镜像,比如包含了java运行环境的镜像,包含了nginx的镜像等等。

参考:
Docker Dockerfile 定制镜像
docker之Dockerfile实践


Docker 通过Dockerfile创建自定义镜像

相关标签: docker Dockerfile