docker写一个Dockerfile文件的实现

 更新时间:2024年01月26日 08:26:01   作者:xupengboo  
Dockerfile 是一个用来构建镜像的文本文件,文本内容包含了一条条构建镜像所需的指令和说明,本文主要介绍了docker写一个Dockerfile文件的实现

现在的项目肯定都离不开docker,只要是流水线部署就会涉及Dockerfile文件,那么如何写一个正确的编写一个Dockerfile文件呢?

建议先熟悉一下Dockerfile的一些语法。

之后就是看案例:

前端项目(Nginx) DockerFile文件

  • Vue项目,涉及node安装依赖、build打包等操作。
# 使用 Node.js 镜像 , as build 别名构建阶段
FROM node:14 AS build
# 指定构建目录
WORKDIR /holmes-center-front
# 复制 package.json 和 package-lock.json
COPY package*.json ./
# 安装项目依赖
RUN npm install
# 将宿主机的所有文件,放到指定的WORKDIR工作目录里面来
COPY . .
# 执行 npm run build:prod 命令
RUN npm run build:prod

# 使用官方的 Nginx 镜像
FROM nginx:latest
# 将宿主机的 nginx.conf 文件复制到容器中的 /etc/nginx/ 目录
COPY docker/nginx/nginx.conf /etc/nginx/nginx.conf
# 从第一build阶段获取dist下的文件移动到容器中的 /usr/share/nginx/html/ 目录
COPY --from=build /holmes-center-front/dist /usr/share/nginx/html/
# 暴露 Nginx 监听的端口,一般为 80,但这里因为是https协议所以要暴露443端口!
EXPOSE 443
# 启动 Nginx 服务
CMD ["nginx", "-g", "daemon off;"]

后端项目 DockerFile文件

  • SpringBoot项目,涉及mvn命令执行,启动jar包等。
# 选择构建用基础镜像。如需更换,请到[dockerhub官方仓库](https://hub.docker.com/_/java?tab=tags)自行选择后替换。
FROM maven:3.6.0-jdk-8-slim AS build
# 指定构建过程中的工作目录
WORKDIR /holmes-center-server
# 将src目录下所有文件,拷贝到工作目录中src目录下(.gitignore/.dockerignore中文件除外)
COPY holmes-admin /holmes-center-server/holmes-admin
COPY holmes-common /holmes-center-server/holmes-common
COPY holmes-framework /holmes-center-server/holmes-framework
COPY holmes-generator /holmes-center-server/holmes-generator
COPY holmes-quartz /holmes-center-server/holmes-quartz
COPY holmes-system /holmes-center-server/holmes-system
# 将pom.xml文件和settings.xml文件,拷贝到工作目录下
COPY settings.xml pom.xml /holmes-center-server/
# 自定义settings.xml, 选用国内镜像源以提高下载速度
RUN mvn -s /holmes-center-server/settings.xml -f /holmes-center-server/pom.xml clean package

# 基础镜像
FROM  openjdk:8-jre
# author
MAINTAINER holmes
# 指定路径
WORKDIR /holmes-center-server
# 复制jar文件到路径
COPY --from=build /holmes-center-server/holmes-admin/target/*.jar .
# 启动认证服务
ENTRYPOINT ["java","-jar","-Dspring.profiles.active=prod","holmes-admin.jar"]

Redis DockerFile文件

# 基础镜像
FROM redis:5.0.10
MAINTAINER holmes

# 挂载目录
VOLUME /home/holmes/redis
# 创建目录
RUN mkdir -p /home/holmes/redis
# 指定路径
WORKDIR /home/holmes/redis
# 复制conf文件到路径
COPY /docker/redis/redis.conf /home/holmes/redis/redis.conf
# 启动redis服务
ENTRYPOINT ["redis-server","/home/holmes/redis/redis.conf"]

下面就是说几个碰到的棘手的命令

COPY 指令 作用:很简单就是复制宿主机的文件到容器中

  • 如果添加了–from=xxx,那就不一样了,例如:
# 这个指的是复制宿主机中的/holmes/dist到/usr/share/nginx/html/中。
COPY /holmes/dist /usr/share/nginx/html/

# 加上了--from=build,就是复制来自build阶段的/holmes-center-front/dist内容到/usr/share/nginx/html/下面,就不是宿主机了。
# 一般常用于多个阶段镜像构建当中,就和上面案例一样
COPY --from=build /holmes-center-front/dist /usr/share/nginx/html/
  • 如果没添加–from=xxx,第一个参数就是指定宿主机相关文件,第二个参数是指定容器相关文件的,不要混淆。为什么强调这个事情,因为,每次写dockerfile文件时,写着写着就混淆了,举个例子:
...
# 复制 package.json 和 package-lock.json
COPY package*.json ./
# 安装项目依赖
RUN npm install
# 将宿主机的所有文件,放到指定的WORKDIR工作目录里面来
COPY . .
# 执行 npm run build:prod 命令,这样容器中就有了dist压缩目录
RUN npm run build:prod

# 前面我将dist包build出来了,但是第一印象却是用COPY来操作的,这就不对了。。。
# 错误案例:COPY dist /usr/share/nginx/html/ 这样他就去宿主机找dist文件,一般不会存在!

# 正确应该是下面的执行mv,是容器内部执行命令才对。
RUN mv dist/* /usr/share/nginx/html/
# 如果涉及多个镜像阶段,那就通过--from=xxx来操作了。
  • " . " 代表当前目录下所有文件,例如:
# 指定构建目录
WORKDIR /holmes
# 将当前目录下所有文件,转移holmes目录
COPY . /holmes

RUN 指令:就是执行命令。灵活运用即可,有时候也可以执行 ls、pwd命令,排除一些错误等等。

到此这篇关于docker写一个Dockerfile文件的实现的文章就介绍到这了,更多相关docker写Dockerfile内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • docker从Path值看容器启动命令方式

    docker从Path值看容器启动命令方式

    Docker容器的config.v2.json文件中的Path字段指定了容器启动时要执行的主程序(可执行文件)的路径,决定了容器运行时的入口点,它通常是容器文件系统中某个可执行文件的绝对路径
    2026-02-02
  • docker生命周期管理和镜像管理命令详解

    docker生命周期管理和镜像管理命令详解

    Docker通过容器技术提供了一种轻量级、快速部署和可移植的应用程序运行环境,极大地简化了应用程序的部署和管理过程,提高了开发和运维的效率,这篇文章主要介绍了docker生命周期管理和镜像管理命令,需要的朋友可以参考下
    2023-08-08
  • Docker调度器Kubernetes使用过程

    Docker调度器Kubernetes使用过程

    Docker和Kubernetes在使用方式上有相似性,初次接触这两个技术的同学常常会搞混,但实际上它们并不是解决同一个问题的技术,也没有办法用其中一个替代另一个。通俗一点来说,Docker解决的是容器技术直接相关的问题,而Kubernetes更多地关注在集群上调度和部署容器应用
    2022-12-12
  • 详解给Ocelot做一个Docker镜像

    详解给Ocelot做一个Docker镜像

    这篇文章主要介绍了详解给Ocelot做一个Docker镜像,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2018-04-04
  • Docker部署Node.js的实现示例

    Docker部署Node.js的实现示例

    本文介绍了在服务器上使用Docker部署Node.js项目,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2024-12-12
  • Docker从零构建php-nginx-alpine镜像的方法

    Docker从零构建php-nginx-alpine镜像的方法

    这篇文章主要介绍了Docker从零构建php-nginx-alpine镜像的方法,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2018-11-11
  • Docker部署青龙面板的实现步骤

    Docker部署青龙面板的实现步骤

    青龙面本是一个定时脚本平台,通过它我们可以在设备上使用各种脚本跑定时任务达到解放双手的目的,下面就来详细的介绍 一下,感兴趣的可以了解下
    2026-06-06
  • Docker Desktop磁盘镜像位置用途超详细解析

    Docker Desktop磁盘镜像位置用途超详细解析

    这篇文章主要介绍了Docker Desktop磁盘镜像位置用途的相关资料,Docker Desktop中docker_data.vhdx虚拟磁盘的作用,用于存储容器、镜像、卷等数据,文中介绍的非常详细,需要的朋友可以参考下
    2025-06-06
  • Docker 存储管理的三种方式之卷、绑定挂载、临时存储

    Docker 存储管理的三种方式之卷、绑定挂载、临时存储

    本文介绍了Docker的三种存储方式:卷(Volumes)、绑定挂载(BindMounts)和临时存储(Tmpfs),并详细讲解了每种方式的特点、使用方法和适用场景,感兴趣的朋友一起看看吧
    2025-02-02
  • docker部署gitlab以及修改初始密码方式

    docker部署gitlab以及修改初始密码方式

    这篇文章主要介绍了docker部署gitlab以及修改初始密码方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2024-05-05

最新评论