网站首页 > 基础教程 正文
最近写了一个博客的后端项目,本来是用docker compose部署的,只需要两行命令就可以部署
docker compose builddocker compose up -d
Dockerfile:
FROM golang:1.23-alpine AS builderWORKDIR /appCOPY . .RUN go mod tidyRUN CGO_ENABLED=0 GOOS=linux go build -o main .# 运行阶段FROM alpine:latestWORKDIR /appCOPY --from=builder /app/main .COPY --from=builder /app/config.yaml .# 安装等待依赖服务的工具RUN apk add --no-cache bashCOPY wait-for.sh /app/wait-for.shRUN chmod +x /app/wait-for.sh# 初始化脚本COPY entrypoint.sh /app/entrypoint.shRUN chmod +x /app/entrypoint.shEXPOSE 8080CMD ["/app/entrypoint.sh"]
docker-compose.yml:
version: '3.8'services: mysql: image: mysql:8.0 container_name: blog-mysql environment: MYSQL_ROOT_PASSWORD: root MYSQL_DATABASE: blog_db ports: - "3307:3306" volumes: - mysql_data:/var/lib/mysql networks: - blog-network healthcheck: test: ["CMD", "mysqladmin", "ping", "-h", "localhost"] interval: 5s timeout: 10s retries: 10 redis: image: redis:7.4-alpine container_name: blog-redis volumes: - redis_data:/data networks: - blog-network healthcheck: test: ["CMD", "redis-cli", "ping"] interval: 5s timeout: 10s retries: 10 elasticsearch: image: elasticsearch:8.17.0 container_name: blog-es environment: - discovery.type=single-node - xpack.security.enabled=false - ES_JAVA_OPTS=-Xms512m -Xmx512m volumes: - es_data:/usr/share/elasticsearch/data networks: - blog-network healthcheck: test: ["CMD", "curl", "-f", "http://localhost:9200/_cat/health"] interval: 10s timeout: 10s retries: 10 rabbitmq: image: rabbitmq:4.1.0-alpine # 官方4.x没有alpine版本,推荐使用3.11.x container_name: blog-rabbitmq environment: - RABBITMQ_DEFAULT_USER=guest - RABBITMQ_DEFAULT_PASS=guest ports: - "5672:5672" # AMQP协议端口 - "15672:15672" # 管理界面端口 volumes: - rabbitmq_data:/var/lib/rabbitmq networks: - blog-network healthcheck: test: ["CMD", "rabbitmq-diagnostics", "check_port_connectivity"] interval: 10s timeout: 10s retries: 10 backend: build: . container_name: blog-backend ports: - "8080:8080" environment: - ENV=production depends_on: mysql: condition: service_healthy redis: condition: service_healthy elasticsearch: condition: service_healthy rabbitmq: condition: service_healthy networks: - blog-networkvolumes: mysql_data: redis_data: es_data: rabbitmq_data:networks: blog-network: driver: bridge name: blog-network
在本地部署成功了,但是由于我的云服务器只有2核2G内存,在build的时候服务器CPU和内存利用率会飙到90%+,尝试了很久后还是不行,于是决定在本地构建镜像,然后上传到Docker Hub仓库,在云服务器上直接拉取镜像
1首先要在Docker Hub上创建仓库
注册一个docker账户,然后点击右侧按钮创建一个仓库
2 本地构建镜像
首先登录一下,使用docker login -u userName
然后在项目目录构建镜像,-t
指定镜像名称
docker build -t blog-backend .
给镜像打上tag,格式为 docker tag 镜像名 用户名/仓库名:tag标签
,仓库名是刚才创建的,tag标签不打默认为latest
docker tag blog-backend yudeng2004/blog-backend:1.0
上传至远程仓库,格式为 docker push 用户名/仓库名:tag标签
docker push yudeng2004/blog-backend:1.0
上传成功后,在docker hub上可以看到对应的镜像和标签
3. 远程部署镜像
同样在远程服务器上登录docker账户(需要用到魔法),然后拉取镜像,格式为 docker pull 用户名/仓库名:tag标签
docker pull yudeng2004/blog-backend:1.0
查看一下是否拉取成功
这里的镜像是拉取到的,不用再构建,所有需要修改一下docker-compose.yml
,删除build相关的部分,指定镜像名字
# 其他保持不变 backend: image: yudeng2004/blog-backend:1.0 # build: .
这样就能运行了
docker compose up -d
- 上一篇: Docker工具的使用方法进阶-关于镜像
- 下一篇: 【Docker 新手入门指南】第九章:仓库管理
猜你喜欢
- 2025-06-24 Docker容器基于国产平台T3的入门部署方法说明——(3)构建镜像
- 2025-06-24 Kubernetes 控制器开发、镜像构建及部署实践
- 2025-06-24 使用docker 和marathon 构建一个带分析的web应用
- 2025-06-24 技术分享 | 详解在docker中更新镜像——基于Prometheus
- 2025-06-24 Spring Boot与Docker结合部署的最佳实践
- 2025-06-24 【Docker 新手入门指南】第九章:仓库管理
- 2025-06-24 Docker入门实战(二)——Docker镜像操作
- 2025-06-24 Docker工具的使用方法进阶-关于镜像
- 2025-06-24 5分钟自建一个轻量级Docker镜像仓库,带可视化管理,真香
- 2025-06-24 Docker+Jenkins:为Java项目插上自动化翅膀
- 最近发表
- 标签列表
-
- jsp (69)
- gitpush (78)
- gitreset (66)
- python字典 (67)
- dockercp (63)
- gitclone命令 (63)
- dockersave (62)
- linux命令大全 (65)
- pythonif (86)
- location.href (69)
- dockerexec (65)
- tail-f (79)
- queryselectorall (63)
- location.search (79)
- bootstrap教程 (74)
- 单例 (62)
- linuxgzip (68)
- 字符串连接 (73)
- html标签 (69)
- c++初始化列表 (64)
- mysqlinnodbmyisam区别 (63)
- arraylistadd (66)
- mysqldatesub函数 (63)
- window10java环境变量设置 (66)
- c++虚函数和纯虚函数的区别 (66)