欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

docker 使用Dockerfile生成镜像文件

程序员文章站 2024-01-26 12:35:52
...

使用 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

 

构造镜像并创建容器

    docker 使用Dockerfile生成镜像文件