Dockerfile是一个文本格式的配置文件,用户可以使用Dockerfile来快速创建自定义的镜像。
Dockerfile由一行行命令语句组成,并支持以#开头的注释行。
一般来说Dockerfile主题内容分为四部分:基础镜像信息、维护者信息、镜像操作指令和容器启动时执行命令。
Dockerfile指令说明:
#配置指令 ARG:定义创建镜像过程中使用的变量 FROM:指定所创建镜像的基础镜像 LABEL:为生成的镜像添加标签信息 EXPOSE:声明镜像内服务监听的端口 ENV:指定环境变量 ENTERPOINT:指定镜像的默认入口命令 VOLUME:创建一个数据卷挂载点 USER:指定运行容器时的用户名或UID WORKDIR:配置工作目录 ONBUILD:创建子镜像时指定自动执行的操作指令 STOPSIGNAL:指定退出的信号值 HEALTHCHECK:配置所启动容器如何进行健康检查 SHELL:指定默认shell类型 #操作指令 RUN:运行指定命令 CMD:启动容器时默认执行的命令 ADD:添加内容到镜像 COPY:复制内容到镜像
常用指令说明:
ARG:
格式:ARG [=]
只存在于镜像内部使用,镜像编译成功后,ARG变量将不存在
Docker内置了一些镜像创建变量,可以直接使用。如:HTTP_PROXY,HTTPS_PROXY,FTP_PROXY,NO_PROXY
FROM:
格式:FROM 或 FROM :
dockfile第一条指令必须是FROM指令。
FROM centos:7.4
LABEL:
格式:LABEL =
LABEL date="2020-05-13" LABEL auther="123@qq.com"
EXPOSE:
格式:EXPOSE
EXPOSE 22 EXPOSE 22 80
ENV:
格式:ENV 或 =
ENV APP_HOME=/usr/local/app ENV PATH $PATH:/usr/local/app
VOLUME:
格式:VOLUME ["/data"]
运行容器时可以从本地主机或其他容器挂载数据卷,一般用来存放数据库和需要保持的数据
WORKDIR:
格式:WORKDIR /path/to/workdir
WORKDIR /data
RUN:
格式:RUN
多条命令可以用&&连接
RUN yum -y install httpd
CMD:
格式:CMD [“executable”,“paraml”]
CMD ["/usr/sbin/sshd","-D"] CMD ["/bin/bash","/init.sh"]
ADD:
格式:ADD
将的内容复制到目录下
ADD *.c /code ADD *.tar.gz /usr/local
COPY:
格式:COPY
功能与ADD类似,当时用本地目录为源目录时,推荐使用COPY。
创建镜像:
格式:docker build [OPTIONS] PATH | URL | -
docker build -t centos_ssh:v1
其他命令选项不在这里说明。
Dockerfile实战:sshd
创建一个存放dockerfile的目录:养成良好习惯
mkdir -p /opt/dockerfile
创建容器目录,进入目录编写dockerfile
cd /opt/dockerfile/ mkdir centos6_sshd cd centos6_sshd/ vim dockerfile
FROM centos:6.8 LABEL auther="123@qq.com" RUN yum -y install openssh-server \ && /etc/init.d/sshd start \ && echo 123123|passwd --stdin root EXPOSE 22 CMD ["/usr/sbin/sshd","-D"]
构建容器镜像:
docker build -t centos6_sshd:1.0 /opt/dockerfile/centos6_sshd/
测试:
docker run -d -p 1022:22 centos6_sshd:1.0 ssh root@192.168.1.3 -p1022
The authenticity of host '[192.168.1.3]:1022 ([192.168.1.3]:1022)' can't be established. RSA key fingerprint is SHA256:MTOumMXrLhBAH1Q5SvHIdT0mceK+GJuP/mRGWY33/uM. RSA key fingerprint is MD5:5c:17:62:3f:00:8b:da:93:2c:f9:e3:b7:27:a8:a9:5b. Are you sure you want to continue connecting (yes/no)? yes Warning: Permanently added '[192.168.1.3]:1022' (RSA) to the list of known hosts. root@192.168.1.3's password: [root@4c2fd8c13791 ~]#
测试ssh连接正常。