使用docker compose一键部署多个服务

本文涉及的产品
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 Redis 版,社区版 2GB
推荐场景:
搭建游戏排行榜
RDS MySQL Serverless 高可用系列,价值2615元额度,1个月
简介: docker compose 是 docker 官方的开源项目,用来实现对 docker 容器集群的快速编排

docker compose 是 docker 官方的开源项目,用来实现对 docker 容器集群的快速编排


下载安装

官网下载地址:点这里


我用的是云服务器,所以就直接用yum安装了,直接执行这两条命令,等安装结束后查看版本,看到版本号表示安装成功





下面还有一种手动安装的方式,因为是访问的github,我的服务器一直访问失败,就只能用上面那种方式了



不使用 compose 部署项目

我这里用一个springboot项目来测试,只写了一个接口,访问redis和mysql


编写dockerfile来构建镜像


FROM java:8
MAINTAINER vhukze
# 指定临时文件夹为/tmp
VOLUME /tmp
# 将jar包添加到容器中重命名为my-docker.jar
ADD docker-test.jar my-docker.jar
# 运行jar包
RUN bash -c 'touch /my-docker.jar'
ENTRYPOINT ["java","-jar","/my-docker.jar"]
# 暴露8888端口
EXPOSE 8888
把项目的jar包和Dockerfile文件上传到服务器,我这里放到了/mydocker路径下



使用命令构建镜像(注意最后的点,表示Dockerfile文件在当前目录下)


docker build -t my-docker:1.0 .

稍等一会儿之后,构建成功,查看镜像



这里代码访问的redis和mysql同样是docker中启动的



使用my-docker镜像启动一个容器


docker run -d -p 8888:8888 my-docker:1.0

不使用compose,需要单独启动三个容器,执行三遍docker run


使用 compose 部署项目

编写docker-compose.yml文件,并上传到服务器的/mydocker 路径下


version: "3"
# 多个服务
services:
  # my-docker服务
  myDockerService:
    # 镜像名称和版本
    image: my-docker:1.0
    # 启动的容器名称
    container_name: my-docker
    # 端口
    ports:
      - 8888:8888
    # 容器数据卷
    volumes:
      - /app/myDocker:/data
    # 网络模式 (最下方自定义的一个网络模式)
    networks:
      - my_net
    # 依赖的服务(表示需要依赖的服务先启动)
    depends_on:
      - redis
      - mysql
  # redis 服务
  redis:
    image: redis
    ports:
      - 6666:6379
    volumes:
      - /app/redis/redis.conf:/etc/redis/redis.conf
      - /app/redis/data:/data
    networks:
      - my_net
    # 启动命令
    command: redis-server /etc/redis/redis.conf
  # mysql服务
  mysql:
    image: mysql:5.7
    # mysql 相关配置
    environment:
      MYSQL_ROOT_PASSWORD: '123456'
      MYSQL_ALLOW_EMPTY_PASSWORD: 'no'
      MYSQL_DATABASE: 'testdb'
      MYSQL_USER: 'vhukze'
      MYSQL_PASSWORD: 'vhukze'
    ports:
      - 3306:3306
    volumes:
      - /app/mysql/db:/var/lib/mysql
      - /app/mysql/conf/my.cnf:/etc/my.cnf
      - /app/mysql/init:/docker-entrypoint-initdb.d
    networks:
      - my_net
    # 解决外部无法访问问题
    command: --default-authentication-plugin=mysql_native_password
# 创建自定义网络模式
networks:
  my_net:

使用同一个自定义网络模式,互相之间可以通过服务名称访问,修改项目配置文件,把redis和mysql的ip改为服务名称(注意这里redis的端口要改成容器内使用的端口,因为是容器之间互相访问,不会走宿主机的端口)



再次打包项目上传到服务器,使用Dockerfile构建镜像


在docker-compose.yml所在目录执行下面命令,检查语法是否有误


执行之后没有任何输出,表示语法没有问题


docker compose config -q

使用docker-compose启动三个容器


在docker-compose.yml所在目录执行下面命令


docker compose up -d

可以看到网络模式和三个容器都创建完成了



使用浏览器访问my-docker项目的接口,访问成功



一键停止并删除


docker compose down

一键停止


docker compose stop

一键启动


docker compose start

一键重启


docker compose restart

结论是 通过docker-compose可以一键创建和删除多个容器  


相关实践学习
基于Redis实现在线游戏积分排行榜
本场景将介绍如何基于Redis数据库实现在线游戏中的游戏玩家积分排行榜功能。
云数据库 Redis 版使用教程
云数据库Redis版是兼容Redis协议标准的、提供持久化的内存数据库服务,基于高可靠双机热备架构及可无缝扩展的集群架构,满足高读写性能场景及容量需弹性变配的业务需求。 产品详情:https://www.aliyun.com/product/kvstore     ------------------------------------------------------------------------- 阿里云数据库体验:数据库上云实战 开发者云会免费提供一台带自建MySQL的源数据库 ECS 实例和一台目标数据库 RDS实例。跟着指引,您可以一步步实现将ECS自建数据库迁移到目标数据库RDS。 点击下方链接,领取免费ECS&RDS资源,30分钟完成数据库上云实战!https://developer.aliyun.com/adc/scenario/51eefbd1894e42f6bb9acacadd3f9121?spm=a2c6h.13788135.J_3257954370.9.4ba85f24utseFl
相关文章
|
6天前
|
Cloud Native 测试技术 数据安全/隐私保护
云原生之使用Docker部署Teedy轻量级文档管理系统
【5月更文挑战第8天】云原生之使用Docker部署Teedy轻量级文档管理系统
35 1
|
4天前
|
Docker 容器
paddleocr 在docker环境下部署_docker部署paddleocr,90%的人看完都说好
paddleocr 在docker环境下部署_docker部署paddleocr,90%的人看完都说好
|
4天前
|
应用服务中间件 nginx Docker
Docker部署Nginx以及挂载数据卷(代码详细展示)_nginx 挂载大文件卷(1)
Docker部署Nginx以及挂载数据卷(代码详细展示)_nginx 挂载大文件卷(1)
|
4天前
|
关系型数据库 MySQL 网络安全
Docker部署MySQL,2024网络安全通用流行框架大全
Docker部署MySQL,2024网络安全通用流行框架大全
|
4天前
|
Docker 容器
Docker部署minio-arm64版本,阿里官方推荐
Docker部署minio-arm64版本,阿里官方推荐
|
2天前
|
JSON 测试技术 定位技术
【好用的个人工具】在Docker环境下部署Simple mind map思维导图工具
【5月更文挑战第16天】在Docker环境下部署Simple mind map思维导图工具
19 1
【好用的个人工具】在Docker环境下部署Simple mind map思维导图工具
|
3天前
|
监控 物联网 测试技术
【好用的个人工具】使用Docker部署Dashdot服务器仪表盘
【5月更文挑战第15天】使用Docker部署Dashdot服务器仪表盘
34 12
|
3天前
|
运维 监控 Docker
使用Docker进行微服务架构的部署
【5月更文挑战第18天】本文探讨了如何使用Docker进行微服务架构部署,介绍了Docker的基本概念,如容器化平台和核心组件,以及它与微服务的关系。通过Docker,每个微服务可独立运行在容器中,便于构建、测试和部署。文章详细阐述了使用Docker部署微服务的步骤,包括定义服务、编写Dockerfile、构建镜像、运行容器、配置服务通信、监控和日志管理以及扩展和更新。Docker为微服务提供了可移植、可扩展的解决方案,是现代微服务架构的理想选择。
|
4天前
|
敏捷开发 数据可视化 测试技术
【Docker项目实战】使用Docker部署nullboard任务管理工具
【5月更文挑战第14天】使用Docker部署nullboard任务管理工具
18 2
|
4天前
|
运维 Linux Docker
ChatGLM3在Docker环境部署,Linux运维免打包多渠道统计如何实现
ChatGLM3在Docker环境部署,Linux运维免打包多渠道统计如何实现