使用公共仓库得到的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