DockerDockerFile
DockerFile解析
DockerFile是用来构建Docker镜像的文本文件,是由一条条构建镜像所需的指令和参数构成的脚本。
构建三步骤:
1、DockerFile 编写(药方)
2、docker build 构建镜像(抓药)
3、docker run 以镜像运行容器实例(熬药)
1、基础知识
-
每条保留字指令都必须为大写字母,且后面要跟随至少一个参数
-
指令从上到下,顺序执行
-
表示注释
-
每条指令都会创建一个新的镜像层并对镜像进行提交
2、Docker执行DockerFile的大致流程
-
docker从基础镜像运行一个容器
-
执行一条指令并对容器做出修改
-
执行类的 docker commit 的操作提交一个新的镜像层
-
docker再基于刚才提交的镜像运行一个新容器
-
执行DockerFile中的下一条指令直到所有指令都执行完成
3、指令介绍
3.1、FROM
基础镜像,当前新镜像是基于哪个镜像,指定一个已经存在的镜像作为模板,第一条必须是FROM
3.2、MAINTAINER
镜像维护者的姓名和邮箱
3.3、RUN
容器构建时需要运行的命令,RUN 是在 docker build 时运行
- 有两种格式:shell、exec
3.4、EXPOSE
当前容器对外暴露的端口
3.5、WORKDIR
指定在创建容器后,终端默认登录的工作目录,一个落脚点
3.6、USER
指定该镜像以什么样的用户去执行,如果不指定,默认是 root
3.7、ENV
用来在设置当前镜像的环境变量,可以在后续的任何 RUN 指令中使用
使用案例:
ENV MY_PATH /usr/mytest
WORKDIR $MY_PATH
3.8、ADD
- 作用和 COPY 类似(多了一个解压功能)
将宿主机目录下的文件拷贝进镜像 且会 自动处理 URL 和解压 TAR 压缩包
3.9、COPY
拷贝文件和目录到镜像中
将从构建上下文目录中<源路径>的文件/目录复制到新的一层的镜像内的<目标路径>位置
3.10、VOLUME
容器数据卷,用于数据保存和持久化工作
3.11、CMD
指定容器启动后要干的事情
CMD 指令的格式和 RUN 相似:
-
shell
格式:CMD <命令> -
exec
格式:CMD [“可执行文件”, “参数1”, “参数2”]
CMD ["catalina.sh", "run"]
参数列表
格式:CMD [“参数1”, “参数2”]。在指定了ENTRYPOINT
指令后,用CMD
指定具体的参数
注意:DockerFile中可以有多个 CMD 指令,但只有最后一个生效,CMD 会被 docker run 之后的参数替换。
# 这里就是用`/bin/bash`,替换了`CMD ["catalina.sh", "run"]`命令 # 所以 Tomcat 服务器不会被启动 docker run -it -p 8080:8080 Tomeat /bin/bash
CMD 指令和 RUN 指令的区别:
-
CMD 是在 docker run 时运行
-
RUN 是在 docker build 时运行
3.12、ENTRYPOINT
也是用来指定一个容器启动时要运行的命令。类似与 CMD 指令:
-
但是
ENTRYPOINT
不会被 docker run 后面的命令覆盖 -
而且这些命令行参数会被当做参数传给
ENTRYPOINT
指令指定的程序
# 通过 CMD 命令来给 ENTRYPOINT 传递参数
ENTRYPOINT ["指定程序", "参数1", "参数2"]
案例:
FROM nginx
# 相当于运行 `nginx -c /etc/nginx/nginx.conf` 命令
ENTRYPOINT ["nginx", "-c"] # 定参
CMD ["/etc/nginx/nginx.conf"] # 变参
4、示例(CentOS vim ifconfig Java8)
4.1、Dockerfile编写
# 文件名称:Dockerfile
FROM centos:7
MAINTAINER WeiYi<504690037@qq.com>
ENV MYPATH /usr/local
WORKDIR $MYPATH
# 安装 vim
RUN yum -y install vim
# 安装 ifconfig
RUN yum -y install net-tools
# 安装 Java8 及 lib 库
RUN yum -y install glibc.i686
RUN mkdir $MYPATH/java
# 复制(相对路径)jdk 添加到容器,安装包必须要和 DockerFile文件在同一位置
ADD jdk-8u181-linux-x64.tar.gz $MYPATH/java/
# 配置 Java 环境变量
ENV JAVA_HOME $MYPATH/java/jdk1.8.0_181
ENV JRE_HOME $JAVA_HOME/jre
ENV CLASSPATH $JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar:$JRE_HOME/lib:$CLASSPATH
ENV PATH $JAVA_HOME/bin:$PATH
# 暴露端口(这个镜像可写可不行)
EXPOSE 80
CMD echo $MYPATH
CMD echo "Success ------------- Ok"
CMD /bin/bash
4.2、构建
# docker build -t 新镜像名称:版本号 .
docker build -t centosjava8:1.5 .
4.3、运行实例
docker run -it centosjava8:1.5 /bin/bash
这篇好文章是转载于:学新通技术网
- 版权申明: 本站部分内容来自互联网,仅供学习及演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,请提供相关证据及您的身份证明,我们将在收到邮件后48小时内删除。
- 本站站名: 学新通技术网
- 本文地址: /boutique/detail/tanhfebaeh
-
photoshop保存的图片太大微信发不了怎么办
PHP中文网 06-15 -
《学习通》视频自动暂停处理方法
HelloWorld317 07-05 -
word里面弄一个表格后上面的标题会跑到下面怎么办
PHP中文网 06-20 -
Android 11 保存文件到外部存储,并分享文件
Luke 10-12 -
photoshop扩展功能面板显示灰色怎么办
PHP中文网 06-14 -
微信公众号没有声音提示怎么办
PHP中文网 03-31 -
excel下划线不显示怎么办
PHP中文网 06-23 -
excel打印预览压线压字怎么办
PHP中文网 06-22 -
TikTok加速器哪个好免费的TK加速器推荐
TK小达人 10-01 -
怎样阻止微信小程序自动打开
PHP中文网 06-13