docker部署go、web、mysql服务
docker 2026-04-13 15:14:10

目标:

1、只启用项目 A(go-a + web-a)

2、项目 B 先注释

3、Go 数据库连接信息写在项目配置文件里,不写在 compose environment

4、本机是 M 芯片,镜像统一导出为 NAS 用的 nasx86-*

5、不用 SSH,走 NAS 手动导入

 

1)本机目录准备

C/C++ Code复制内容到剪贴板
  1. cd /Users/yoyo/Downloads/临时文件/docker-x86  
  2. mkdir -p go-a web-a go-b web-b  

 

2) go-a 用“已编译二进制”方式(不走源码编译)

确保 go-a 目录至少有这些运行文件:

main(必须是 x86_64 可执行文件)

config.ini

以及运行需要的 resources/static/templates/main.go...(按你的项目实际)

写 go-a/Dockerfile:

C/C++ Code复制内容到剪贴板
  1. cat > go-a/Dockerfile <<'EOF'  
  2. FROM --platform=linux/amd64 alpine:3.20  
  3.   
  4. WORKDIR /app  
  5. RUN apk add --no-cache ca-certificates tzdata && addgroup -S app && adduser -S app -G app  
  6.   
  7. COPY . /app/  
  8. RUN chmod +x /app/main && chown -R app:app /app  
  9.   
  10. USER app  
  11. EXPOSE 8081  
  12. ENTRYPOINT ["/app/main"]  
  13. EOF  

 

校验二进制架构(必须含 x86-64):

C/C++ Code复制内容到剪贴板
  1. file go-a/main  

 

3) web-a(静态站点)Dockerfile

C/C++ Code复制内容到剪贴板
  1. cat > web-a/Dockerfile <<'EOF'  
  2. FROM nginx:1.27-alpine  
  3. COPY . /usr/share/nginx/html  
  4. EXPOSE 80  
  5. EOF  

 

4) 写 docker-compose.yml(只启用 A,B 注释)

C/C++ Code复制内容到剪贴板
  1. cat > docker-compose.yml <<'YAML'  
  2. name: nasx86-stack  
  3.   
  4. services:  
  5.   mysql-main:  
  6.     image: nasx86-mysql:8.0  
  7.     container_name: mysql-main  
  8.     restart: always  
  9.     command: --default-authentication-plugin=mysql_native_password  
  10.     environment:  
  11.       MYSQL_ROOT_PASSWORD: root123456  
  12.       TZ: Asia/Shanghai  
  13.     ports:  
  14.       - "3306:3306"  
  15.     volumes:  
  16.       - mysql_data:/var/lib/mysql  
  17.     healthcheck:  
  18.       test: ["CMD""mysqladmin""ping""-h""localhost""-proot123456"]  
  19.       interval: 10s  
  20.       timeout: 5s  
  21.       retries: 15  
  22.     networks: [app_net]  
  23.   
  24.   phpmyadmin:  
  25.     image: nasx86-phpmyadmin:5.2-apache  
  26.     container_name: mysql-phpmyadmin  
  27.     restart: always  
  28.     depends_on:  
  29.       mysql-main:  
  30.         condition: service_healthy  
  31.     environment:  
  32.       PMA_HOST: mysql-main  
  33.       PMA_PORT: 3306  
  34.       TZ: Asia/Shanghai  
  35.     ports:  
  36.       - "18088:80"  
  37.     networks: [app_net]  
  38.   
  39.   project-a-go:  
  40.     image: nasx86-go-a:1.0  
  41.     container_name: project-a-go  
  42.     restart: always  
  43.     depends_on:  
  44.       mysql-main:  
  45.         condition: service_healthy  
  46.     ports:  
  47.       - "8081:8081"  
  48.     networks: [app_net]  
  49.   
  50.   project-a-web:  
  51.     image: nasx86-web-a:1.0  
  52.     container_name: project-a-web  
  53.     restart: always  
  54.     depends_on: [project-a-go]  
  55.     ports:  
  56.       - "5180:80"  
  57.     networks: [app_net]  
  58.   
  59.   # project-b-go:  
  60.   #   image: nasx86-go-b:1.0  
  61.   #   container_name: project-b-go  
  62.   #   restart: always  
  63.   #   depends_on:  
  64.   #     mysql-main:  
  65.   #       condition: service_healthy  
  66.   #   ports:  
  67.   #     - "28081:8080"  
  68.   #   networks: [app_net]  
  69.   
  70.   # project-b-web:  
  71.   #   image: nasx86-web-b:1.0  
  72.   #   container_name: project-b-web  
  73.   #   restart: always  
  74.   #   depends_on: [project-b-go]  
  75.   #   ports:  
  76.   #     - "28080:80"  
  77.   #   networks: [app_net]  
  78.   
  79. volumes:  
  80.   mysql_data:  
  81.   
  82. networks:  
  83.   app_net:  
  84.     driver: bridge  
  85. YAML  

 

5) 在本机构建 NAS 用 amd64 镜像(统一 nasx86- 前缀)

为避免“污染”默认标签,官方镜像用 buildx 包装法:

C/C++ Code复制内容到剪贴板
  1. docker buildx build --platform linux/amd64 -t nasx86-mysql:8.0 --load - <<'EOF'  
  2. FROM --platform=linux/amd64 mysql:8.0  
  3. EOF  
  4.   
  5. docker buildx build --platform linux/amd64 -t nasx86-phpmyadmin:5.2-apache --load - <<'EOF'  
  6. FROM --platform=linux/amd64 phpmyadmin:5.2-apache  
  7. EOF  

 

构建项目 A:

C/C++ Code复制内容到剪贴板
  1. docker buildx build --platform linux/amd64 -t nasx86-go-a:1.0 --load ./go-a  
  2. docker buildx build --platform linux/amd64 -t nasx86-web-a:1.0 --load ./web-a  

 

6) 架构校验
 

C/C++ Code复制内容到剪贴板
  1. for i in nasx86-mysql:8.0 nasx86-phpmyadmin:5.2-apache nasx86-go-a:1.0 nasx86-web-a:1.0; do  
  2.   echo -n "$i -> "  
  3.   docker image inspect "$i" --format '{{.Os}}/{{.Architecture}}'  
  4. done  

都应是 linux/amd64。

 

7) 导出 tar(给 NAS 手动导入)

C/C++ Code复制内容到剪贴板
  1. docker save -o nasx86-project-a-amd64.tar \  
  2.   nasx86-mysql:8.0 \  
  3.   nasx86-phpmyadmin:5.2-apache \  
  4.   nasx86-go-a:1.0 \  
  5.   nasx86-web-a:1.0  

 

8) NAS 手动操作

把 nasx86-project-a-amd64.tar 和 docker-compose.yml 拷到 NAS。

在极空间 Docker 手动“导入镜像”(tar)。

在极空间 Compose 导入并启动 docker-compose.yml。

打开 http://NAS_IP:18088,用 phpMyAdmin 手动建库/建用户。

访问端口:

项目A后端:http://NAS_IP:8081

项目A前端:http://NAS_IP:5180

phpMyAdmin:http://NAS_IP:18088

 

本文来自于:http://www.yoyo88.cn/study/docker/719.html

下一篇 返回列表
Powered by yoyo苏ICP备15045725号