使用公共仓库得到的buxybox为镜像编写dockerfile文件
- shell格式编写Dockerfile
[root@server1 docker]# vi Dockerfile
[root@server1 docker]# cat Dockerfile
FROM busybox
ENV name world
ENTRYPOINT echo “hello,$name”
[root@server1 docker]# docker run --rm busybox:v1##–rm表示运行后删除,往往用于运行一次性脚本

- 以exec格式编写Dockerfile,执行命令后查看结果
[root@server1 docker]# vi Dockerfile
[root@server1 docker]# cat Dockerfile
FROM busybox
ENV name world
ENTRYPOINT echo ["/bin/echo",“hello,$name”]
[root@server1 docker]# docker run --rm busybox:v2##–rm表示运行后删除,往往用于运行一次性脚本
[/bin/echo,hello,world]

shell格式底层会掉用/bin/sh -c来执行命令,可以解析变量,而exec格式不会这么做。我门需要手动指定它的shell环境。
- exec的正确执行方式
[root@server1 docker]# vi Dockerfile
[root@server1 docker]# cat Dockerfile
FROM busybox
ENV name world
ENTRYPOINT ["/bin/sh","-c",“echo hello,$name”]

- Exec格式下,ENTRYPOINT可以通过CMD替换某个参数,CMD的额外参数可以在容器启动时进行替换。shell格式时ENTRYPOINT会忽略任何CMD或docker run提供的参数。
[root@server1 docker]# vi Dockerfile
[root@server1 docker]# cat Dockerfile
FROM busybox
ENV name world
ENTRYPOINT ["/bin/echo",“hello”]
CMD [“world”]

[root@server1 docker]# docker run --rm busybox:v6##未替换前
hello world
[root@server1 docker]# docker run --rm busybox:v6 westos##替换后
hello westos
本文详细介绍了如何使用shell格式和exec格式编写Dockerfile,包括使用BusyBox作为基础镜像,设置环境变量,以及ENTRYPOINT和CMD指令的使用。通过实例展示了不同格式下命令执行的区别,以及如何正确地在exec格式中指定shell环境。
4万+

被折叠的 条评论
为什么被折叠?



