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

本文涉及的产品
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
Redis 开源版,标准版 2GB
推荐场景:
搭建游戏排行榜
云数据库 Tair(兼容Redis),内存型 2GB
简介: 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
相关文章
|
27天前
|
监控 NoSQL 时序数据库
《docker高级篇(大厂进阶):7.Docker容器监控之CAdvisor+InfluxDB+Granfana》包括:原生命令、是什么、compose容器编排,一套带走
《docker高级篇(大厂进阶):7.Docker容器监控之CAdvisor+InfluxDB+Granfana》包括:原生命令、是什么、compose容器编排,一套带走
190 77
|
7天前
|
Ubuntu Linux 开发工具
docker 是什么?docker初认识之如何部署docker-优雅草后续将会把产品发布部署至docker容器中-因此会出相关系列文章-优雅草央千澈
Docker 是一个开源的容器化平台,允许开发者将应用程序及其依赖项打包成标准化单元(容器),确保在任何支持 Docker 的操作系统上一致运行。容器共享主机内核,提供轻量级、高效的执行环境。本文介绍如何在 Ubuntu 上安装 Docker,并通过简单步骤验证安装成功。后续文章将探讨使用 Docker 部署开源项目。优雅草央千澈 源、安装 Docker 包、验证安装 - 适用场景:开发、测试、生产环境 通过以上步骤,您可以在 Ubuntu 系统上成功安装并运行 Docker,为后续的应用部署打下基础。
docker 是什么?docker初认识之如何部署docker-优雅草后续将会把产品发布部署至docker容器中-因此会出相关系列文章-优雅草央千澈
|
11天前
|
存储 Kubernetes Docker
Kubernetes(k8s)和Docker Compose本质区别
理解它们的区别和各自的优势,有助于选择合适的工具来满足特定的项目需求。
66 19
|
24天前
|
关系型数据库 MySQL Docker
《docker高级篇(大厂进阶):5.Docker-compose容器编排》包括是什么能干嘛去哪下、Compose核心概念、Compose使用三个步骤、Compose常用命令、Compose编排微服务
《docker高级篇(大厂进阶):5.Docker-compose容器编排》包括是什么能干嘛去哪下、Compose核心概念、Compose使用三个步骤、Compose常用命令、Compose编排微服务
87 24
|
2月前
|
人工智能 API 数据安全/隐私保护
使用 Docker 一键免费部署 63.8k 的私人 ChatGPT 网页应用
NextChat 是一个可以在 GitHub 上一键免费部署的私人 ChatGPT 网页应用,支持 GPT3、GPT4 和 Gemini Pro 模型。该项目在 GitHub 上获得了 63.8k 的 star 数。部署简单,只需拉取 Docker 镜像并运行容器,设置 API Key 后即可使用。此外,NextChat 还提供了预设角色的面具功能,方便用户快速创建对话。
226 22
使用 Docker 一键免费部署 63.8k 的私人 ChatGPT 网页应用
|
26天前
|
关系型数据库 MySQL Docker
《docker高级篇(大厂进阶):5.Docker-compose容器编排》包括是什么能干嘛去哪下、Compose核心概念、Compose使用三个步骤、Compose常用命令、Compose编排微服务
《docker高级篇(大厂进阶):5.Docker-compose容器编排》包括是什么能干嘛去哪下、Compose核心概念、Compose使用三个步骤、Compose常用命令、Compose编排微服务
113 6
|
1月前
|
Java 应用服务中间件 Docker
将基于 Spring 的 WAR 应用程序部署到 Docker:详尽指南
将基于 Spring 的 WAR 应用程序部署到 Docker:详尽指南
38 2
|
2月前
|
Java Linux Docker
什么是 Docker?如何将 Spring Boot 应用程序部署到 Docker?
什么是 Docker?如何将 Spring Boot 应用程序部署到 Docker?
53 3
|
2月前
|
机器学习/深度学习 数据采集 Docker
Docker容器化实战:构建并部署一个简单的Web应用
Docker容器化实战:构建并部署一个简单的Web应用
|
2月前
|
运维 开发者 Docker
Docker Compose:简化容器化应用的部署与管理
Docker Compose:简化容器化应用的部署与管理

热门文章

最新文章