Docker实战系列【Dockerfile】

举报
子都爱学习 发表于 2021/12/23 23:18:44 2021/12/23
【摘要】 Dockerfile 是一个用来自动化构建镜像的文本文件容器的本质 docker镜像运行出来的容器,本身就是宿主机上的一个子进程 所以我们在 镜像构建的时候,是无法直接用多个命令进程进行操作的,只能通过脚本的方式 来实现多条命令的执行效果Dockerfile 由一行行命令语句组成,并支持以 # 开头的注释行。例如:# Test web-app to use with Pluralsight ...

Dockerfile 是一个用来自动化构建镜像的文本文件

容器的本质
docker镜像运行出来的容器,本身就是宿主机上的一个子进程
所以我们在 镜像构建的时候,是无法直接用多个命令进程进行操作的,只能通过脚本的方式
来实现多条命令的执行效果

Dockerfile 由一行行命令语句组成,并支持以 # 开头的注释行。例如:

# Test web-app to use with Pluralsight courses and Docker Deep Dive book
FROM alpine
LABEL maintainer="boboroch@163.com"
# Install Node and NPM
RUN apk add --update nodejs nodejs-npm
# Copy app to /src
COPY . /src
WORKDIR /src
# Install dependencies
RUN  npm install
EXPOSE 8080
ENTRYPOINT ["node", "./app.js"]

命令介绍:
 FROM 指令
用于指定要构建的镜像的基础镜像。它通常是 Dockerfile 中的第一条指令。

RUN 指令
用于在镜像中执行命令,这会创建新的镜像层。每个 RUN 指令创建一个新的镜像层。
shell模式 RUN echo nihao
exec模式 RUN ["echo", "nihao"]
注意:
对于exec模式来说,不要用单引号,因为有特殊含义,我们用双引号

COPY 指令
用于将文件作为一个新的层添加到镜像中。通常使用 COPY 指令将应用代码赋值到镜像中。

 EXPOSE 指令
用于记录应用所使用的网络端口。

ENTRYPOINT 指令
该命令不会被覆盖,如果运行容器的时候,添加了命令,
则作为参数交给 ENTRYPOINT 指定的命令
如果该参数不被 ENTRYPOINT 指定的命令承认,则发生报错

CMD
该命令会被 运行容器的时候添加的命令 覆盖
Dockerfile里面可以存在多个CMD但是只有最后一个生效
注意:
ENTRYPOINT CMD 原则上,只能执行一条运行命令,如果我们
docker镜像包含了多个服务,启动的时候,必须多条命令,只能通过 脚本的方式来执
行,否则失败

使用 Docker 中的docker image build命令会读取 Dockerfile,并将应用程序容器化。

构建解析
基本流程
基础镜像 - 新容器 - Dockerfile指令 - 删除容器 - 提交镜像
... 循环直到Dockerfile指令完结
特性
分层 + 缓存
工作最佳实践
1 命令越少越好
2 镜像分层定制基础镜像
3 docker镜像功能越单一越好
-- Dockerfile文件所在目录,不要有无关的内容
Dockerfile实践
haproxy 反向代理两个 tomcat
基本分析
haproxy 基于编译方式实现
haproxy镜像 - 基础编译镜像 - 基础镜像
tomcat 基于二进制方式实现、
tomcatapp镜像 - tomcat镜像 - java镜像 - ssh镜像 - 基础镜像
Dockerfile的目录结构
/docker/images/base/{base,ssh,java,make}
/docker/images/web/{tomcat,haproxy}
/docker/images/pro/{tomcat-app1,xxx}



【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。