Work

container-database-frontend-backend

Docker Network
Azure SQL Edge
Spring Boot
Vue
Container
Image 7

網路部分(共同)

docker network create discord_network

SQL 部分

先備份舊容器數據複製至本機

先啟動 SQL Server 容器後執行以下:

docker cp sql_volume:/var/opt/mssql /Users/vinskao/volume/temp

從本機複製到新容器

docker cp /Users/vinskao/volume/temp sql_edge:/var/opt/mssql

創建新 volume

docker volume create discord_db_data

開啟本機資料夾修改權限

sudo chmod -R 777 /Users/vinskao/volume/temp

將本機資料放入 discord_db_data

docker run --rm -v discord_db_data:/var/opt/mssql -v /Users/vinskao/volume/temp:/backup alpine cp -a /backup/. /var/opt/mssql

執行 SQL 鏡像

docker run -e "ACCEPT_EULA=Y" \
   -e "MSSQL_SA_PASSWORD=xxx" \
   -e "MSSQL_COLLATION=Chinese_Taiwan_Stroke_CI_AI" \
   -e "TZ=Asia/Taipei" \
   -p 1433:1433 \
   --name sql_edge \
   --network discord_network \
   --hostname sql_edge \
   -v discord_db_data:/var/opt/mssql \
   -d \
   mcr.microsoft.com/azure-sql-edge

Spring Boot 部分

Dockerfile 撰寫

# 使用 Maven 和 OpenJDK 11 的官方基礎映像來構建專案
FROM maven:3.8.4-openjdk-11-slim as build

# 複製專案文件到容器內的/app目錄
COPY . /app

# 設定工作目錄為/app
WORKDIR /app

# 使用 Maven 命令來構建專案
RUN mvn clean package -DskipTests

# 使用 OpenJDK 11 的輕量級基礎映像來運行構建好的應用
FROM openjdk:11-jre-slim

# 從構建階段複製構建好的應用到運行階段的容器內
COPY --from=build /app/target/discord-0.0.1-SNAPSHOT.war /discord.war

# 指定運行應用的命令
ENTRYPOINT ["java", "-jar", "/discord.war"]

# 定義容器內應用將會使用的端口
EXPOSE 8088

將 java properties 改成資料庫容器連接點

url: jdbc:sqlserver://sql_edge:1433;databaseName=discord;trustServerCertificate=true

創造 Image

在 Spring Boot 根目錄執行以下:

docker build -t discord-backend .

創建新 volume

docker volume create java_logs

執行 Image

如果 application.yml 沒有設定 datasource

docker run -d -p 8088:8088 --name discord-backend \
  -v java_logs:/var/opt/logs/discord \
  --network discord_network \
  --hostname discord-backend-host \
  discord-backend

如果 application.yml 有設定 datasource

docker run -d -p 8088:8088 --name discord-backend \
  -v java_logs:/var/opt/logs/discord \
  -e "DATASOURCE_URL=jdbc:sqlserver://sql_edge:1433;databaseName=discord;trustServerCertificate=true" \
  -e DATASOURCE_USERNAME=SA \
  -e DATASOURCE_PASSWORD=xxx \
  --network discord_network \
  discord-backend

Vue 部分

Dockerfile 撰寫

# 使用 Node.js 官方镜像作为构建环境
FROM node:lts AS build

# 设置工作目录
WORKDIR /app

# 复制 package.json 和 package-lock.json(如果可用)
COPY package*.json ./

# 安装项目依赖
RUN npm install

# 复制项目文件和文件夹到工作目录
COPY . .

# 暴露端口 8090
EXPOSE 8090

# 启动开发服务器,直接使用 Vite 提供的命令行选项来禁用自动打开浏览器的功能。
CMD ["npx", "vite", "--host", "--port", "8090", "--no-open"]

創建新 volume

docker volume create vue_storage

創造 Image

在 Vue 根目錄執行以下:

docker build -t discord-frontend .

執行 Image

在容器內的/app 目錄會掛載到主機上的 vue_storage 目錄。

docker run -d -p 8090:8090 --name discord-frontend --hostname discord-frontend-host --network discord_network -v vue_storage:/app discord-frontend

TY的智慧庫

你有事?
問前想清楚,機會不是誰都有。

💡 建議主題:

放大圖片