创建镜像
docker commit +镜像(name) + 即将生成的镜像(name)
docker build -t 即将生成的镜像(name) + Dockerfile(地址)
FROM scratch #制作base image (依赖为空)
FROM ubuntu:18.04 # 使用 base image (依赖其他镜像)
MAINTAINER 作者
RUN 每一层RUN即是一层images(最少原则)
WORKDIR /root 工作目录(绝对目录)
ADD and COPY
ADD #添加目录并解压缩
添加远程文件 curl 或 wget
ENV AAA 我是一个乘车 # 设置常量
VOLUME and EXPOSE (存储和网络)
CMD and ENTRYPOINT
ENTRYPOINT
让容器以应用程序或者服务的形式运行
不会被忽略,一定会执行
最佳实践: 写一个shell脚本作为entrypoint(将外部shell脚本引入执行) 例: ENTRYPOINT ["***.sh"]
FROM ubuntu:16.04
ENV name World
ENTRYPOINT echo "hello $name" # 等同于用shell 执行echo "hello $name"
结果 hello World
FROM ubuntu:16.04
ENV name World
ENTRYPOINT ["/bin/echo"," hello $name"] # 等同于 echo hello $name
结果 hello $name
FROM ubuntu:16.04
ENV name World
ENTRYPOINT ["/bin/bash","-c","echo hello $name"] # 等同于用shell 执行echo "hello $name"
结果 hello World
CMD
容器启动时默认执行命令
如果 docker run 指定了其他命令, CMD命令被忽略
如果定义了多个CMD,只有最后一个会执行
FROM ubuntu:16.04
ENV name World
CMD echo "hello $name"
docker dun [image] 输出?
Docker run -it [image] /bin/bash 输出