初识Dockerfile
Dockerfile就是用来构建docker镜像的,就是一个docker脚本
通过脚本可以生成一个镜像
先新建一个dockerfile01.yaml
FROM ubuntu
VOLUME ["volume01", "volume02"]
CMD echo "----end----"
我们使用`docker build -f dockerfile1.yml -t my/ubuntu:1.0 .去构建一个镜像
进入我们生成的镜像可以看到volume01和volume02,是我们挂载的卷
总结:dockerfile构建步骤
- 编写一个
dockerfile文件 docker build构建为一个镜像docker run镜像docker push发布镜像
两个docker容器进行卷的挂载
# 首先根据我们的镜像创建第一个容器docker1
$ docker run -it --name docker1 my/ubuntu:2.0
$ docker run -it --name docker2 --volumes-from docker1 my/ubuntu:2.0 /bin/bash
然后我们在docker1的volume01中创建一个111.test,在docker2的volume01中也可以看到111.test
Dockerfile构建过程
- 每一个保留关键字(指令)都必须是大写字母
- 指令从上到小顺序执行
- #表示注释
- 每一个指令都会创建提交一个新的镜像层,并提交
dockerfile是面向开发的,我们要发布镜像,就需要编写一个dockerfile文件
Docker镜像逐渐成为企业交付的标准,必须掌握
DockerFile:构建文件,定义了一切的步骤,源代码Docker image:通过DockerFile构建生成的镜像,最终发布和运行的产品!Docker容器: 容器就是镜像运行起来提供服务
DockerFile 指令
FROM # 基础镜像,一切从这里开始
# MAINTAINER # 作者信息 (官方弃用)
LABEL # 作者信息
RUN # 镜像构建的时候需要运行的命令
ADD # 我们自己添加东西
WOEKDIR # 镜像的工作目录
VOLUME # 挂载的目录
EXPORT # 暴露的端口
CMD # 指定这个容器启动的时候运行的命令
ENTRYPOINT # 指定这个容器启动的时候运行的命令,可以追加命令
ONBUILD # 当构建一个被继承 DockerFile 这个时候就运行这个命令,触发指令
COPY # 类似ADD,将我们的文件拷贝到镜像中
ENV # 构建的时候设置环境变量
实战:构建自己的docker image
FROM ubuntu:20.04
LABEL "lz"="lz18738377974@163.com"
LABEL version="0.1"
RUN apt-get update
RUN apt-get install -y vim
RUN apt-get install -y net-tools
ENV MYPATH /usr/local
WORKDIR $MYPATH
EXPOSE 80
CMD echo $MYPATH
CMD echo "----end----"
CMD /bin/bash
# 然后我们使用去构建一个docker image
docker build -f ubuntuDF.yml -t testubuntu:01 .
# 列出我们的构建过程
docker history testubuntu:01
IMAGE CREATED CREATED BY SIZE COMMENT
16d09e4d5910 7 minutes ago CMD ["/bin/sh" "-c" "/bin/bash"] 0B buildkit.dockerfile.v0
<missing> 7 minutes ago CMD ["/bin/sh" "-c" "echo "----end----""] 0B buildkit.dockerfile.v0
<missing> 7 minutes ago CMD ["/bin/sh" "-c" "echo $MYPATH"] 0B buildkit.dockerfile.v0
<missing> 7 minutes ago EXPOSE map[80/tcp:{}] 0B buildkit.dockerfile.v0
<missing> 7 minutes ago WORKDIR /usr/local 0B buildkit.dockerfile.v0
<missing> 7 minutes ago ENV MYPATH=/usr/local 0B buildkit.dockerfile.v0
<missing> 7 minutes ago RUN /bin/sh -c apt-get install -y vim # buil… 68.2MB buildkit.dockerfile.v0
<missing> 7 minutes ago RUN /bin/sh -c apt-get install -y tmux # bui… 1.96MB buildkit.dockerfile.v0
<missing> 8 minutes ago RUN /bin/sh -c apt-get update # buildkit 43MB buildkit.dockerfile.v0
<missing> 8 minutes ago LABEL version=0.1 0B buildkit.dockerfile.v0
<missing> 8 minutes ago LABEL lz=lz18738377974@163.com 0B buildkit.dockerfile.v0
<missing> 19 months ago /bin/sh -c #(nop) CMD ["bash"] 0B
<missing> 19 months ago /bin/sh -c #(nop) ADD file:5d68d27cc15a80653… 72.8MB
cmd和entrypoint的区别
cmd:再使用命令会覆盖之前的命令
entrypoint:再使用命令不会覆盖之前的,只会在其基础上追加