ADD
基于URL路径,把你指定的文件下载到本地,并打包进镜像中
下面继续编写dockerfile,添加ADD指令,下载nginx
打包
运行容器,发现并没有对下载的tar包解压
刚刚我们发现从远程获取的tar包,在放入容器中时,并不自动在容器中进行解压,接下来我们尝试从本地上传的tar包能否解压,首先下载tar到宿主机中
编写dockerfile文件
构造镜像
通过运行容器,可以发现tar包已经被解压
WORKDIR
用于为Dockerfile中所有的RUN、CMD、ENTRYPOINT、COPY、ADD指定设定工作目录
比如, “ ./ ”表示“ /usr/local/src ”
WORKDIR /usr/local/src
ADD nginx-1.19.2.tar.gz ./
构建镜像
VOLUME
Volume仅支持,指定容器的挂载点目录,不支持宿主机的挂载点目录
如果挂载点目录路径下之前后文件存在,docker run命令会在卷挂在完成之后将所有文件实现复制共享
编写dockerfile指定容器的挂载点“ /data/mysql ”
构造镜像
运行容器,使其60秒之后关闭
查看t1容器的容器挂载点和宿主机挂载点,source为宿主机的挂载点,destination为容器的挂载点
EXPOSE
因为我们不能确定镜像启动的容器运行在哪个宿主机,因此无法指定绑定地址,并且宿主机的空闲端口也是不确定,我们只能指定镜像暴露的端口,在启动后去动态绑定至宿主机的随机端口和所有地址。
也就是说我们写在dockerfile文件的暴露端口并不能直接暴露,只能说是可以暴露,在“ docker run -P ”的时候才会去暴露所有的端口。
编写dockerfile,去指定对外暴露的端口为80
构造镜像
运行容器并启动服务
另一个窗口进入t1容器,可以看到容器内部已经监控80端口了
查看容器t1的ip
宿主机可以连接t1的ip
那么宿主机是否对容器做ip映射去进行外部网路通信了呢?通过查看t1,发现并没有暴露端口,那么如何去暴露端口呢?
关闭容器t1,接下来我们将使用“ -P ”来去暴露端口,启动容器
此时查看t1容器可以发现,端口已经暴露
通过外部浏览器也可以访问
Docker镜像篇(2) - 玩转Dockerfile指令 - FRM、MAINTAINER、LABEL、COPY
Docker镜像篇(4) - 玩转Dockerfile指令 - ENV、RUN、CMD、ENTRYPOINT