docker-compose单机容器编排的神器

docker-compose和docker兼容表

在这里插入图片描述

简介

docker所制作的容器多半需要大量的依赖,有些可能依赖于其他容器的启动,比方说一个springboot的项目,它需要rabbitMQ和esearch什么的,有些没装数据库的机器需要mysql等等,当我们使用命令行一个个启动这些容器,并且手动指定它们的网络设置等会显得很不方便,一个可以根据配置文件自动化这些配置过程的工具便显得极为重要,在单机上首推docker-compose,一个python所写的容器编排管理工具,在docker-hub中,我们也可以看到多个container有关于自己的docker-compose.yml文件的示例

docker-compose的巨大潜力被docker官方所看重,于是docker-compose便被收归国有,变成docker官方的一个仓库了

 安装

linux中采用yum或者apt安装,或者使用pip安装docker-compose,当然,如果上述两种方式都不成功,请看我同专栏中的文章,内有从github二进制安装docker-compose的文章

为Linux安装软件包时后面标注的arm,aarch到底是什么玩意儿以二进制安装docker-compose为例_生生世世是所说的的博客-CSDN博客

 以wordpress为例入门

version: '3.1' #这是docker-compose的语法版本,最新的通通填3.x或者3就好

services: # 定义服务对象,这里启动的就是各个容器及其对应的配置了

  wordpress: # 启动container名为wordpress
    image: wordpress # 使用名为wordpress的容器
    restart: always # 在退出后docker会重启它
    ports: # 对应端口映射
      - 8080:80 # 将容器内部80端口的服务映射至主机8080端口
    environment: #容器的环境变量,不适用指定-e时,会使用这个配置
      WORDPRESS_DB_HOST: db
      WORDPRESS_DB_USER: exampleuser
      WORDPRESS_DB_PASSWORD: examplepass
      WORDPRESS_DB_NAME: exampledb
    volumes: #在容器内访问/var/www/html目录时,实际上访问的是主机上的wordpress目录
      - wordpress:/var/www/html
  
  db: # 同上
    image: mysql:5.7
    restart: always
    environment:
      MYSQL_DATABASE: exampledb
      MYSQL_USER: exampleuser
      MYSQL_PASSWORD: examplepass
      MYSQL_RANDOM_ROOT_PASSWORD: '1'
    volumes:
      - db:/var/lib/mysql

volumes: # 也就是在这里配置wordpress目录和db目录的所在位置
  wordpress:
  db:

关于容器端口互通的问题与解决方案

简单打个比方,比方说你需要后端的容器和数据库容器同时部署到一台服务器上,当然了,后端的服务需要数据库,于是你简单的开了个映射3306端口的容器,后端的服务则简单的映射8080:80端口,然而此时问题出现了,后端的容器的网络在默认情况下与主机的网络是隔离的,它并不能在自己的容器3306端口中找到相对应的数据库服务,让我们用docker-compose来解决这种尴尬的问题

举例:

让我们用gorm写一个极其简单的数据库连接后端,它的作用只有连接到数据库并把连接是否成功输出到同目录的issuccess.txt文件中,以下仅给出数据库连接类,省略main类

让我们更改这个连接地址为db服务名(我们将会之后在docker-compose.yml中定义它,它会在不指定网络的情况下,让容器通过服务名互通)

 编译后制作镜像

 

解决方案一:expose选项

expose 字段是用于在 Docker 容器内部暴露端口的选项,可以让其他容器连接到这些端口,但不会将它们映射到 Docker 主机上。

在 docker-compose.yml 文件中使用 expose 选项来指定容器内部需要暴露的端口。例如,以下示例定义了一个 web 服务,它暴露了 8000 和 8080 端口:

version: '3'
services:
  web:
    image: myapp:latest
    expose:
      - "8000"
      - "8080"

当您使用 expose 选项时,其他容器可以使用 Docker 的内部网络进行连接。例如,如果您有另一个服务 worker,它需要连接到 web 服务的 8000 端口,则可以在 worker 服务的 docker-compose.yml 文件中使用 links 选项:

version: '3'
services:
  worker:
    image: myworker:latest
    links:
      - web

depends_on

depends_on 字段指定了服务之间的依赖关系。例如,如果 web 服务依赖于 db 服务,则可以使用以下示例:

depends_on:
  - db

解决方案二(推荐):指定容器服务和网络

我们在上文中指定了127.0.0.1:3306为db(docker-compose中指定的容器名,它会自动创建dns解析ip) :3306

可以看到两个容器成功的进行了连通 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值