bijw@yiqisoft.cn 发布的文章

目录

前言

Docker不仅能够简化应用的打包、分发和部署流程,还能确保软件在不同环境中的一致性。在这篇博客中,我将详细讲解如何使用Dockerfile来进行软件的打包和部署。

什么是Dockerfile?

Dockerfile是一个文本文件,其中包含了一系列命令和指令,用于自动化构建Docker镜像。通过简单的配置,我们可以定义应用运行所需的环境,以及如何配置这个环境。

创建Dockerfile

创建一个名为Dockerfile的文件(注意没有文件扩展名):

打开这个文件并开始编写。

Dockerfile的基本语法

Dockerfile主要由一系列命令和参数构成。下面是一些基础的命令:

  • FROM:指定基础镜像
  • RUN:执行命令
  • COPY:复制文件/目录
  • EXPOSE:开放端口
  • CMD:容器启动命令

示例:

FROM node:20.5.0 AS frontend-build

# 设置工作目录
WORKDIR /app

COPY YiDCT_demo/package*.json ./

# 安装依赖
RUN npm install

# 拷贝当前目录下的所有文件到工作目录
COPY YiDCT_demo/ .

RUN npm run build

FROM maven:3.8.6-jdk-11 AS backend-build

COPY YiDCT/pom.xml .
COPY YiDCT/src ./src/

COPY --from=frontend-build /app/dist/out/ /src/main/resources/static/

# 执行编译打包
RUN mvn -f pom.xml clean package

FROM openjdk:11
RUN mkdir -p /opt/app
COPY --from=backend-build ./target/yidct.jar /opt/app/
CMD ["java", "-jar", "/opt/app/yidct.jar"]
EXPOSE 8080

使用Dockerfile构建镜像

保存你的Dockerfile之后,运行以下命令来构建镜像:

#version默认为latest
docker build . -t your-image-tag:version

如果要构建多平台版本,可以通过使用buildx工具,由于docker平台并不支持存储多环境镜像,所以在命令中可以添加--push命令直接推送到hub管理。

docker buildx build --platform linux/amd64,linux/arm64 -t your-image-name . --push 

这会自动执行Dockerfile中定义的所有步骤。

清理缓存

docker buildx prune -a -f && docker builder prune -a -f

部署Docker镜像

构建成功后,使用以下命令来运行你的镜像:

docker run -p 8080:8080 your-image-name

或者通过docker-compose up -d命令来运行

  • 编写docker-compose.yml示例
version: '3.3'

volumes:
  pgdb-data:
  logs:

services: 
  pgdb:
    restart: always
    image: "postgres:12"
    ports:
      - "5432:5432"
    environment:
      POSTGRES_DB: yidct
      POSTGRES_PASSWORD: admin
    volumes:
      - pgdb-data:/var/lib/postgresql/data
  yidct:
    image: "hub.yiqisoft.cn/yiqisoft/yidct-arm"
    container_name: yidct 
    ports: 
      - "8080:8080"
    volumes: 
      - logs:/opt/logs
    restart: always 
    environment:
      TZ: Asia/Shanghai   
    depends_on:
      - pgdb

现在,你的应用应该在http://localhost:8080上运行。

其他docker相关命令

  • 查看docker中安装镜像
docker images

REPOSITORY       TAG            IMAGE ID       CREATED          SIZE
your-image-name  latest         abb947f784dc   54 minutes ago   693MB
  • 查看当前运行的容器
docker ps

CONTAINER ID   IMAGE      COMMAND     CREATED     STATUS    PORTS    NAMES

总结

Dockerfile为我们提供了一种简单的方式,来定义和分享应用的运行环境,这对于应用的打包和部署至关重要。希望这篇博客能够帮助你更有效地使用Dockerfile。