Docker 通过Dockerfile创建自定义镜像

版权声明:代码就是程序,程序就是艺术,艺术来源于生活,每一行代码都有它存在的意义! https://blog.csdn.net/Axela30W/article/details/82155757

Dockerfile是一个文本格式的配置文件,可以使用其来快速创建自定义镜像。包含了创建镜像需要的所有信息和需要执行的命令行。


一、指令说明

下面是一个创建支持SSH服务的镜像的Dockerfile文件

#设置基础镜像
FROM ubuntu:latest

#作者信息
MAINTAINER mistra ([email protected])

#要执行的命令
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实践


这里写图片描述

猜你喜欢

转载自blog.csdn.net/Axela30W/article/details/82155757