docker 使用Dockerfile生成镜像文件
使用 Dockerfile 生成镜像文件
**************************************************
常用文件指令(不区分大小写):
from:基础镜像,首行必须为该指令,可设置多个
maintainer:作者信息,如邮箱地址:maintainer aaa@qq.com
********************************************
run 指令:构建镜像时运行
指令格式共有两种:
run command:该命令默认在bin/sh -c 终端执行,执行命令的格式为 bin/sh -c command;指定其他终端可以用第二种方式
run ["executable","param1","param2"]:执行格式 executable param1 param2
示例
run echo "hello world":执行格式 bin/sh -c "echo hello world"
run ["bin/bash", "-c", "echo 'hello world' "]:执行格式 bin/bash -c "echo 'hello world'"
run ["echo","hello world"]:执行格式 echo hello world
********************************************
cmd 指令:容器运行时执行的命令
命令格式:
cmd command:命令执行格式 bin/sh -c command
cmd ["executable", "param1", "param2"]:命令执行格式 executable param1 param2
cmd ["param", "param2"]:将参数传给entrypoint,entyrpoint需为entyrpoint ["executable", "param1", "param2"]格式
********************************************
entrypoint 指令:容器运行时执行的命令,优先级较cmd高
命令格式:
entrypoint command:命令执行格式 bin/sh -c command
cmd ["executable", "param1", "param2"]:命令执行格式 executable param1 param2
文件中同时使用cmd 和 entrypoint 输出示例
************************************
cmd echo "hello world"
entrypoint echo "hello world 2"
运行容器时输出: hello world 2
************************************
cmd echo "hello world"
entrypoint ["echo","hello world 2"]
运行容器时输出:hello world 2 /bin/sh -c echo "hello world"
************************************
cmd ["echo","hello world"]
entrypoint echo "hello world 2"
运行时容器输出:hello world 2
************************************
cmd ["echo","hello world"]
entrypoint ["echo","hello world 2"]
运行容器时输出:hello world 2 hello world 2 echo hello world
********************************************
其他指令
label 指令:声明镜像的元数据信息,格式为:label key=value,如label version="1.0"
arg 指令:指定镜像内使用的参数,格式为:arg name=default_value,运行时docker run --build-arg name=value传入参数
expose 指令:声明镜像内服务监听的端口
env 指令:声明环境变量,格式为
env key value
env key=value
add 指令:复制主机目录内容到容器相应目录,如果是tar文件,会自动解压到对应目录,格式为: add src dest
copy 指令:复制主机目录内容到对应目录,格式为:copy src dest
volume 指令:创建数据卷挂载点,格式为:volume ["/data"]
user 指令:指定容器运行时的用户名,格式为:user user_name
workdir 指令:容器初始工作目录,格式为:workdir path
onbuild 指令:创建的镜像为其他镜像的基础镜像时,执行的命令,格式为 :onbuild command
如:onbuild echo "hello world"
stopsignal 指令:指定镜像创建的容器接收的退出信号
shell 指令:指定shell的默认类型,默认为:["bin/sh", "-c"]
healthcheck 指令:容器健康监测,命令格式:
healthcheck [options] cmd command:根据执行的命令返回只是否为0判断
healthcheck none:没有健康检查
options选项:
--interval=30s(默认为30s):间隔多久检查一次
--timeout=30s(默认为30s):检查等待的超市时间
--retries=3:检查失败时的重试次数
**************************************************
使用示例
以 alpine 为基础镜像,安装jdk
Dockerfile 文件
from centos
add java /usr/java
env JAVA_HOME=/usr/java
env PATH /usr/java/bin:$PATH
构造镜像并创建容器