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



相关文章
|
6月前
|
缓存 Linux Go
一次性构建出多CPU指令集的 Docker 镜像
本文介绍了使用 Docker Buildx 构建跨平台 Docker 镜像的流程。首先确保系统为 Ubuntu 22.04,安装 Docker 和相关依赖。然后配置 Docker Buildx,编写 Go 程序和 Dockerfile。接着,创建构建脚本 `build.sh` 自动化构建并推送镜像到 Docker Hub。运行此脚本将为不同平台(如 amd64, arm64)构建并推送镜像。最后,在 Docker Hub 可查看构建结果,并可在其他系统上测试镜像。
109 3
|
5月前
|
Ubuntu C++ Docker
Docker的基本指令和HTML/PYTHON/C++的简单创建示例
Docker的基本指令和HTML/PYTHON/C++的简单创建示例
|
1月前
|
存储 应用服务中间件 nginx
Docker系列-5种方案超详细讲解docker数据存储持久化(volume,bind mounts,NFS等)
Docker系列-5种方案超详细讲解docker数据存储持久化(volume,bind mounts,NFS等)
|
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 - 目录挂载以及文件共享
78 0
|
3月前
|
Docker 容器
docker compose logs 常用指令
`docker compose logs`命令用于查看容器的输出日志。该命令提供多种选项,如以纯文本形式输出(`--no-color`)、隐藏日志前缀(`--no-log-prefix`)、显示时间戳(`-t, --timestamps`)等。用户可以指定时间范围(如`--since "2024-08-06T13:11:10"`和`--until "2024-08-06T13:11:15"`)或最近几分钟内的日志(如`--since 5m`)。使用`-f, --follow`可实时跟踪日志输出。注意:参数-h已废弃,应使用--help。
|
5月前
|
Unix Docker 容器
使用docker 启动naocs 报错出现:standard_init_linux.go:241: exec user process caused "exec format error"
```markdown Error in Docker container startup: "standard_init_linux.go:241: exec user process caused \"exec format error\"". Occurred at 2024-06-29 09:26:19.910, followed by a failed hook with a syslog delivery error at 09:27:20.193. Seeking solutions from experts. ```