1.dockerfile 指令介绍
FROM <image>:<tag>
指定基础image,没有<tag>时,说明为该image的最后修改的版本
MAINTAINER <name>
指定镜像的创建者信息
RUN <command> (the command is run in a shell - ‘/bin/sh -c’)
RUN [“executable”,”param1”, “param2”...] (exec from)
前者将在shell终端中运行命令,即/bin/sh -c;后者则使用exec执行。
指定使用其他终端可以通过第二种方式实现,例如 RUN [“/bin/bash”,”-c”,”echo hello”]
每条RUN指令将在当前镜像基础上执行指定命令,并提交为新的镜像,当命令较长时可以使用 \ 来换行。
CMD [“executable”,”param1”,”param2”...] //使用exec执行
CMD command param1 param2 //在/bin/sh中执行,提供需要交互的应用
CMD [“param1”,”param2”] //提供给ENTRYPOINT的默认参数
注意:
ENTRYPOINT指定的是一个可执行的脚本或者程序的路径,该指定的脚本或者程序将会以param1和param2作为参数执行,所以如果CMD指令使用上面的形式,那么Docker中必须要有配套的ENTRYPOINT 指定启动容器执行的命令,每个dockerfile只能有一条CMD命令,如果指定了多条命令,只有最后一条会被执行。 如果用户启动容器时指定了运行的命令,则会覆盖掉CMD指定的命令。
ENTRYPOINT command param1 param2 (shell中执行)
ENTRYPOINT [“executable”,”param1”,”param2”]
类似与CMD指令,不同之处是不可以被docker run提供的参数覆盖。
USER daemon
设置container容器的用户,默认是root用户
EXPOSE <point> <point> ...
该指令会将容器中的端口映射成宿主机中的某个端口,同时需要运行容器的时候,可以配套的多次使用-p选项。
ENV <key> <value>
用于设置环境变量,指定一个环境变量,会被后续RUN指令使用,并在容器运行时保持。
ADD <src> <dest>
该命令将复制指定的文件到容器中的指定目录中
其中<src>可以是dockerfile所在目录的一个相对路径;也可以是一个URL,还可以是一个tar文件(自动解压为目录)。例:ADD test /test (test存在于dockerfile的文件夹中)
COPY
类似与ADD
VOLUME [“<mountpoint>”]
指定容器存储的挂载点
WORKDIR /p1/p2
切换目录,相当cd
ONBUILD 指令 命令
指定的命令在构建镜像时并不执行,而是在他的子镜像中执行
构建指令:FROMMAINTAINER RUN ENV ADD COPY
设置指令:CMD ENTRYPOINTEXPOSE VLOLUME WORKDIR
2.实例:以centos7.2的基础镜像,创建含有httpd、sshd服务的镜像。
具体步骤:
1)宿主机中以ftp的形式搭建本地YUM源(在没有网络的情况下)
在宿主机中安装vsftpd服务,并启动。
添加防火前例外
将centos7.2的光盘挂载到ftp的默认根目录下
开启路由转发
创建测试容器,查看网络通信状态,并且测试yum安装。
2)开始编写dockerfile文件
创建dockerfile文件的目录
在该目录中新建几个文件,其中,run.sh用来在容器中将要执行的脚本,local.repo是要复制到容器当中作为yum源的配置文件。
run.sh的内容,保证httpd和sshd的进程在前台运行。
在宿主机中生成密钥对,使宿主机能够通过密钥对认证ssh连接容器。
dockerfile的内容如上
使用dockerfile创建镜像
测试镜像:
这里在宿主机中重新更改了网络设置,添加了新的网桥”br0”并桥接到物理网卡上,使用pipework工具给新建的容器分配了局域网地址。
ssh远程登录成功
在局域网中可以访问到容器
|