随着Docker管理的任务增多,我们需要用Dockerfile进行docker容器管理,这样可以减轻人工的操作,让docker管理更加的方便,快捷:

Dockerfile是一个镜像的完整描述,可以通过Dockerfile来描述构建镜像的步骤,并自动构建一个容器。

所有的 Dockerfile 命令格式都是:

INSTRUCTION arguments

虽然指令忽略大小写,但是建议使用大写。

FROM 命令

FROM <image>

FROM <image>:<tag>

这个设置基本的镜像,为后续的命令使用,所以应该作为Dockerfile的第一条指令。

比如:

FROM centos:v1

如果没有指定 tag ,则默认tag是latest,如果都没有则会报错。

RUN 命令

RUN命令会在上面FROM指定的镜像里执行任何命令,然后提交(commit)结果,提交的镜像会在后面继续用到。

两种格式:

RUN <command> (the command is run in ashell - `/bin/sh -c`)

或:

RUN ["executable","param1", "param2" ... ] (exec form)

RUN命令等价于:

docker run image command

docker commit container_id

编写Dockerfile实战

根据上面的操作步骤,在docker服务器端创建Dockerfile文件,内容如下:

设置基本的镜像,后续命令都以这个镜像为基础
FROM centos:v1
# 作者信息
MAINTAINER JFEDU.NET
# RUN命令会在上面指定的镜像里执行任何命令
RUN yum install passwd openssl openssh-server-y
RUN echo '123456' | passwd --stdin root
RUN ssh-keygen -q -t rsa -b 2048 -f/etc/ssh/ssh_host_rsa_key -N ''
RUN ssh-keygen -q -t ecdsa -f/etc/ssh/ssh_host_ecdsa_key -N ''
RUN sed -i '/^session\s\+required\s\+pam_loginuid.so/s/^/#/'/etc/pam.d/sshd
RUN mkdir -p /root/.ssh && chownroot.root /root && chmod 700 /root/.ssh
#对外暴露SSH 22端口
EXPOSE 22
# 设定运行镜像时的默认命令:输出ip,并以daemon方式启动sshd
CMD ip addr ls eth0 | awk '{print $2}' | egrep-o '([0-9]+\.){3}[0-9]+';/usr/sbin/sshd -D