目标:
1、只启用项目 A(go-a + web-a)
2、项目 B 先注释
3、Go 数据库连接信息写在项目配置文件里,不写在 compose environment
4、本机是 M 芯片,镜像统一导出为 NAS 用的 nasx86-*
5、不用 SSH,走 NAS 手动导入
1)本机目录准备
- cd /Users/yoyo/Downloads/临时文件/docker-x86
- 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:
- cat > go-a/Dockerfile <<'EOF'
- FROM --platform=linux/amd64 alpine:3.20
- WORKDIR /app
- RUN apk add --no-cache ca-certificates tzdata && addgroup -S app && adduser -S app -G app
- COPY . /app/
- RUN chmod +x /app/main && chown -R app:app /app
- USER app
- EXPOSE 8081
- ENTRYPOINT ["/app/main"]
- EOF
校验二进制架构(必须含 x86-64):
- file go-a/main
3) web-a(静态站点)Dockerfile
- cat > web-a/Dockerfile <<'EOF'
- FROM nginx:1.27-alpine
- COPY . /usr/share/nginx/html
- EXPOSE 80
- EOF
4) 写 docker-compose.yml(只启用 A,B 注释)
- cat > docker-compose.yml <<'YAML'
- name: nasx86-stack
- services:
- mysql-main:
- image: nasx86-mysql:8.0
- container_name: mysql-main
- restart: always
- command: --default-authentication-plugin=mysql_native_password
- environment:
- MYSQL_ROOT_PASSWORD: root123456
- TZ: Asia/Shanghai
- ports:
- - "3306:3306"
- volumes:
- - mysql_data:/var/lib/mysql
- healthcheck:
- test: ["CMD", "mysqladmin", "ping", "-h", "localhost", "-proot123456"]
- interval: 10s
- timeout: 5s
- retries: 15
- networks: [app_net]
- phpmyadmin:
- image: nasx86-phpmyadmin:5.2-apache
- container_name: mysql-phpmyadmin
- restart: always
- depends_on:
- mysql-main:
- condition: service_healthy
- environment:
- PMA_HOST: mysql-main
- PMA_PORT: 3306
- TZ: Asia/Shanghai
- ports:
- - "18088:80"
- networks: [app_net]
- project-a-go:
- image: nasx86-go-a:1.0
- container_name: project-a-go
- restart: always
- depends_on:
- mysql-main:
- condition: service_healthy
- ports:
- - "8081:8081"
- networks: [app_net]
- project-a-web:
- image: nasx86-web-a:1.0
- container_name: project-a-web
- restart: always
- depends_on: [project-a-go]
- ports:
- - "5180:80"
- networks: [app_net]
- # project-b-go:
- # image: nasx86-go-b:1.0
- # container_name: project-b-go
- # restart: always
- # depends_on:
- # mysql-main:
- # condition: service_healthy
- # ports:
- # - "28081:8080"
- # networks: [app_net]
- # project-b-web:
- # image: nasx86-web-b:1.0
- # container_name: project-b-web
- # restart: always
- # depends_on: [project-b-go]
- # ports:
- # - "28080:80"
- # networks: [app_net]
- volumes:
- mysql_data:
- networks:
- app_net:
- driver: bridge
- YAML
5) 在本机构建 NAS 用 amd64 镜像(统一 nasx86- 前缀)
为避免“污染”默认标签,官方镜像用 buildx 包装法:
- docker buildx build --platform linux/amd64 -t nasx86-mysql:8.0 --load - <<'EOF'
- FROM --platform=linux/amd64 mysql:8.0
- EOF
- docker buildx build --platform linux/amd64 -t nasx86-phpmyadmin:5.2-apache --load - <<'EOF'
- FROM --platform=linux/amd64 phpmyadmin:5.2-apache
- EOF
构建项目 A:
- docker buildx build --platform linux/amd64 -t nasx86-go-a:1.0 --load ./go-a
- docker buildx build --platform linux/amd64 -t nasx86-web-a:1.0 --load ./web-a
6) 架构校验
- for i in nasx86-mysql:8.0 nasx86-phpmyadmin:5.2-apache nasx86-go-a:1.0 nasx86-web-a:1.0; do
- echo -n "$i -> "
- docker image inspect "$i" --format '{{.Os}}/{{.Architecture}}'
- done
都应是 linux/amd64。
7) 导出 tar(给 NAS 手动导入)
- docker save -o nasx86-project-a-amd64.tar \
- nasx86-mysql:8.0 \
- nasx86-phpmyadmin:5.2-apache \
- nasx86-go-a:1.0 \
- 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
