Dockerfile 如何实现多阶段构建
  EPcyJ5YAnMSB 2023年11月02日 107 0

Dockerfile 如何实现多阶段构建_docker

我们在构建一些自定义镜像的时候,可能会需要引用别的镜像去做一些事情,但是跟最终结果又没太大的关系,这个时候大概率就要使用多阶段构建了!

案例的情况一般不会那样使用,这里只是作为演示!

编写Dockerfile

我们新建一个名叫Dockerfile的文件,在编辑器里对他进行编辑!

常用命令和关键字

FROM

指定基础镜像,用作新镜像的起点。

LABEL

指定镜像的维护者信息。

RUN

在镜像中执行命令,可以用于安装软件包、运行脚本等。

COPY 或 ADD

将文件从主机复制到镜像中。

ADD 可以自动解压文件 如gzip的文件,COPY不可以

都是针对于Dockerfile所在宿主目录的上下文,即不可以COPY 或 ADD宿主其他目录的内容!

WORKDIR

设置工作目录,即后续命令的执行路径。(容器内)

ENV

设置环境变量。(容器内)

EXPOSE

声明容器运行时监听的端口。

VOLUME

指定容器中的挂载点,用于持久化数据。

注意这里的挂载目录是创建在容器内部的,若容器内部没有会自动创建!

要使用docker run -v 进行具体指定宿主的目录,若未指定,则会在宿主数据目录生成唯一的目录绑定,但是每次创建容器会重新生成,无法达到数据持久化的目的!

宿主的数据目录一般是/var/lib/docker,所以会创建在/var/lib/docker/volumes下,但不是每个服务器都在这个目录,可使用以下命令查看:

# 查看Docker数据目录的确切位置
 sudo docker info | grep "Docker Root Dir"
 
 # 输出
 Docker Root Dir: /var/lib/docker

Dockerfile 如何实现多阶段构建_docker_02

示例

CMD

指定容器启动时要执行的命令,只能有一个 CMD 指令。(一般放最后)

编写文件

这里的示例是先使用node把前端项目打包成静态资源,然后使用nginx代理静态资源!

# 第一阶段:构建前端应用
# 使用node打包dist包
FROM node:16.17.0 as node_bulid

WORKDIR /app

COPY package.json package-lock.json ./

RUN npm install

COPY . .

# 打包静态资源 /app/dist
RUN npm run build

# 第二阶段:构建最终镜像 nginx
FROM nginx:latest

# 把第一阶段的 前端应用 合并把当前
COPY --from=node_bulid /app/dist /usr/share/nginx/html

EXPOSE 80

# 为主进程启动Nginx服务器,并保持其在前台运行
# dockerfile 一定要写daemon off 否则,docker run 会起不起来
CMD ["nginx", "-g", "daemon off;"]

打包自定义镜像

# -t为指定构建镜像的名字和版本,格式为'name:tag' 如 nginx:1.1.0
# imageName 是打包完镜像的名字, run 的时候会用到
# . 指当前目录的所有文件
docker build -t imageName .

运行镜像

# -d 后台进程运行
# -p 80:80 宿主端口:容器暴露端口
# --name imageName1 是docker运行之后容器的名称
# 最后的imageName 是所使用的镜像
docker run -p 80:80 --name imageName1  -d  imageName

Dockerfile 如何实现多阶段构建_docker_03

关注公众号了解更多

【版权声明】本文内容来自摩杜云社区用户原创、第三方投稿、转载,内容版权归原作者所有。本网站的目的在于传递更多信息,不拥有版权,亦不承担相应法律责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@moduyun.com

  1. 分享:
最后一次编辑于 2023年11月08日 0

暂无评论

推荐阅读
  wwLZeziuqjLR   2023年12月11日   31   0   0 Dockercentos
  MCWYWqSAMsot   2023年12月11日   33   0   0 Docker
  LE2wsiBPlOhg   2023年12月06日   32   0   0 Dockercentos
  DnoStTHsc0vp   2023年12月11日   25   0   0 Docker
  wwLZeziuqjLR   2023年12月08日   100   0   0 Dockercentosbash
  wwLZeziuqjLR   2023年12月07日   34   0   0 Dockercentos
EPcyJ5YAnMSB