• 首页 首页 icon
  • 工具库 工具库 icon
    • IP查询 IP查询 icon
  • 内容库 内容库 icon
    • 快讯库 快讯库 icon
    • 精品库 精品库 icon
    • 问答库 问答库 icon
  • 更多 更多 icon
    • 服务条款 服务条款 icon

DockerDockerFile

武飞扬头像
帮助1

DockerFile解析

DockerFile是用来构建Docker镜像的文本文件,是由一条条构建镜像所需的指令和参数构成的脚本。

构建三步骤:
1、DockerFile 编写(药方)
2、docker build 构建镜像(抓药)
3、docker run 以镜像运行容器实例(熬药)

1、基础知识

  1. 每条保留字指令都必须为大写字母,且后面要跟随至少一个参数

  2. 指令从上到下,顺序执行

  3. 表示注释

  4. 每条指令都会创建一个新的镜像层并对镜像进行提交

2、Docker执行DockerFile的大致流程

  1. docker从基础镜像运行一个容器

  2. 执行一条指令并对容器做出修改

  3. 执行类的 docker commit 的操作提交一个新的镜像层

  4. docker再基于刚才提交的镜像运行一个新容器

  5. 执行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
系列文章
更多 icon
同类精品
更多 icon
继续加载