DOCKER04_详解Dockerfile基本指令、FROM、LABEL、RUN、CMD、ENTRYPOINT、ARG、ENV、VOLUME、USER(三)

简介: ③. RUN 构建时期运行的指令④. CMD(运行时期)、ENTRYPOINT 指定启动容器、镜像的默认入口

③. RUN 构建时期运行的指令


  • ①. RUN指令有两种形式,一种是shell,另外一个是exec形式


微信图片_20220107121011.png


②. 在shell形式中,您可以使用(反斜杠)将一条RUN指令继续到下一行


FROM alpine
LABEL maintainer="tangzhi"
ARG prams=helloword
RUN echo $prams &&\
echo tangzhi
RUN echo "123456"
RUN echo 123456789
# 这种方式取不到环境变量
RUN ["echo","$prams"]
# 下面这种写法和RUN echo 123456789等价
RUN ["/bin/sh","-c","echo $prams"]
[root@i-id8g0yu9 ~]# docker build -t mydockerfile4 -f dockerfile57 .
Sending build context to Docker daemon  3.119MB
Step 1/8 : FROM alpine
 ---> 6dbb9cc54074
Step 2/8 : LABEL maintainer="tangzhi"
 ---> Using cache
 ---> 3b6b777a2b23
Step 3/8 : ARG prams=helloword
 ---> Using cache
 ---> 80bcc56f3aee
Step 4/8 : RUN echo $prams &&echo tangzhi
 ---> Running in 9e1c545b68c9
helloword
tangzhi
Removing intermediate container 9e1c545b68c9
 ---> 93f7704f978b
Step 5/8 : RUN echo "123456"
 ---> Running in ae14d2044897
123456
Removing intermediate container ae14d2044897
 ---> 32ed2861f3e5
Step 6/8 : RUN echo 123456789
 ---> Running in 84db90a766c4
123456789
Removing intermediate container 84db90a766c4
 ---> d3fd8aeaec1f
Step 7/8 : RUN ["echo","$prams"]
 ---> Running in 99dddaaba442
$prams
Removing intermediate container 99dddaaba442
 ---> 31ed024c8569
Step 8/8 : RUN ["/bin/sh","-c","echo $prams"]
 ---> Running in 4fdfca35b59f
helloword
Removing intermediate container 4fdfca35b59f
 ---> a7457f8b7933
Successfully built a7457f8b7933
Successfully tagged mydockerfile4:latest
[root@i-id8g0yu9 ~]# 


④. CMD(运行时期)、ENTRYPOINT 指定启动容器、镜像的默认入口


  • ①. ENTRYPOINT或者CMD作为唯一入口,只能写一个,最后一个生效


#最终都是以ping tangzhi.com为准
CMD ping baidu.com 
CMD ping tangzhi.com


②. [“echo”,"${param}"] 不是bash -c的方式,取不出环境变量性[]

echo $param 等价于 ["/bin/sh","-c",“多长的命令都写在这里 echo ${param}”]


# CMD ["ping","baidu.com"]
# CMD ["useradd","-u","1000","-g","2000"]
# CMD ["ping","${url}"]  取不出变量
# CMD ping ${url} 


③. 官方都是建议使用[ ]方式(CMD ["/bin/sh","-c",“ping ${url}”]),变化的写CMD,固定不变的写ENTRYPO INT(未来他是容器启动的唯一入口)


# 一旦传递了cmd1,CMD指定的所有参数都会被覆盖
# 在控制台输入 docker run imageName  6 tangzhi.com 
# ping 5 -c baidu.com
CMD [ "5","baidu.com" ]
ENTRYPOINT [ "ping","-c" ]


④. 我们使用ENTRYPOINT ping baidu.com的形式输出,那么组合CMD怎么写都没用,容器启动都是以ENT RYPOINT的完整命令为准


# 最终都是以ping baidu.com为准
ENTRYPOINT ping baidu.com 
CMD ping tangzhi.com



相关文章
|
14天前
|
存储 关系型数据库 MySQL
|
1月前
|
存储 应用服务中间件 nginx
Docker系列-5种方案超详细讲解docker数据存储持久化(volume,bind mounts,NFS等)
Docker系列-5种方案超详细讲解docker数据存储持久化(volume,bind mounts,NFS等)
|
1月前
|
Shell 应用服务中间件 nginx
docker学习--最详细的docker run 各子命令解释与应用
`docker run` 是 Docker 中用于启动容器的基本命令。常用子命令包括 `-i`(交互模式)、`-t`(分配终端)、`-d`(后台运行)、`-p`(端口映射)、`--name`(指定容器名)。例如,`docker run -it nginx:1.20 /bin/bash` 可以创建并进入交互式容器。使用 `-d` 可在后台运行容器,`-p` 可将容器端口映射到主机端口,`--name` 则用于自定义容器名称以便管理。
|
2月前
|
Docker 容器
docker run
【9月更文挑战第08天】
59 1
|
2月前
|
关系型数据库 MySQL 数据库
docker启动mysql多实例连接报错Can’t connect to local MySQL server through socket ‘/var/run/mysqld/mysqld.sock’
docker启动mysql多实例连接报错Can’t connect to local MySQL server through socket ‘/var/run/mysqld/mysqld.sock’
167 0
|
3月前
|
Docker 容器
在Docker中,Dockerfile有哪些常见指令?
在Docker中,Dockerfile有哪些常见指令?
|
3月前
|
监控 Linux API
在Docker中,docker run指令执行后,生成了哪些进程?
在Docker中,docker run指令执行后,生成了哪些进程?
|
3月前
|
JSON Shell 数据格式
在Docker中,docker run cmd entrypoint 有什么区别?
在Docker中,docker run cmd entrypoint 有什么区别?
|
3月前
|
安全 Ubuntu Linux
在Docker中,镜像内没有curl,kill,ipconfig等指令如何添加?
在Docker中,镜像内没有curl,kill,ipconfig等指令如何添加?
|
3月前
|
存储 Linux Go
Docker Volume - 目录挂载以及文件共享
Docker Volume - 目录挂载以及文件共享
70 0