跳至主要內容

Docker编排利器DockerCompose

IT王小二约 992 字...

Docker编排利器DockerCompose

作者:IT王小二

博客:https://itwxe.comopen in new window

Docker 编排利器 DockerCompose,编排之后可以一次性通过一条命令启动一组服务。

例如一条命令启动 SpringBoot 项目,同时启动 SpringBoot 项目依赖的其他中间件(MySQL、Redis等)。

一、安装DockerCompose

1、下载 Docker Compose 。

curl -L https://get.daocloud.io/docker/compose/releases/download/1.24.0/docker-compose-`uname -s`-`uname -m` > /usr/local/bin/docker-compose

2、授予 docker-compose 文件可执行权限。

chmod +x /usr/local/bin/docker-compose

3、查看会否安装成功。

docker-compose --version

docker-compose-version

二、DockerCompose详解

1. 使用DockerCompose步骤

  • 使用 Dockerfile 构建自定义镜像上传服务器,一般需要修改初始镜像行为时才需要使用。
  • 使用 docker-compose.yml 文件定义需要部署的应用程序服务,这样它们可以在隔离环境中一起运行,以便执行脚本一次性部署。
  • 最后执行 docker-compose up 命令来创建并启动所有服务。

2. docker-compose.yml常用命令

version

描述 Compose 文件的版本信息,各版本详细信息可以参考 官方文档open in new window

# 指定 3 版本语法
version: '3'

services

services 节点下面的即是定义的各种服务,服务之下为容器,容器与容器直之间可以以服务名称为域名进行访问。

image

指定运行的镜像名称。

# 指定镜像为 mysql5.7
image: mysql:5.7

container_name

指定容器名称。

# 容器名称
container_name: admin_mysql

ports

指定宿主机和容器的端口映射。

# 映射 mysql端口
ports:
  - 3306:3306

volumes

将宿主机的文件或目录挂载到容器中。

# 挂载 mysql 目录到容器
volumes:
  - /itwxe/dockerData/mysql/data:/var/lib/mysql
  - /itwxe/dockerData/mysql/conf:/etc/mysql
  - /itwxe/dockerData/mysql/log:/var/log/mysql

environment

配置环境变量。

# 设置 mysql 密码
environment:
  - MYSQL_ROOT_PASSWORD=root

links

连接其他容器的服务。

# 可以 admin_mysql 为域名访问服务名称为 db 的容器
links:
  - db:admin_mysql

3. Docker Compose常用命令

启动所有相关容器

docker-compose up -d

指定文件启动

docker-compose -f docker-compose.yml up -d

停止所有相关容器

docker-compose stop

列出所有容器信息

docker-compose ps

停止并删除所有容器(注意数据挂载)

docker-compose down

三、SpringBoot示例

此处还是以自己写的项目为示例,我的项目依赖 MySQL、Redis、minio(非必要)。

1、打包 SpringBoot 项目镜像,打包可以参考 → Docker使用maven插件打包SpringBoot项目

2、我的项目启动依赖 MySQL 中的 sunny 库,首先得创建容器,挂载宿主机目录,可以参考 → Docker搭建MySQL并挂载数据

3、项目依赖 Redis 镜像自定义配置启动,可以参考 → Docker搭建Redis5.0并挂载数据

4、修改项目 MySQL 和 Redis 使用别名访问,以 MySQL 为例。

# 修改前
jdbc:mysql://192.168.5.33:3306/sunny?useUnicode=true&characterEncoding=utf8mb4&serverTimezone=GMT%2B8

# 修改后
jdbc:mysql://admin_mysql:3306/sunny?useUnicode=true&characterEncoding=utf8mb4&serverTimezone=GMT%2B8

5、编辑 docker-compose.yml 文件。

version: '3'
services:
  # 指定MySQL服务名称
  mysql:
    # 指定服务使用的镜像
    image: mysql:5.7
    # 指定容器名称
    container_name: admin_mysql
    # 指定服务运行的端口
    ports:
      - 3306:3306
    # 指定容器中需要挂载的文件
    volumes:
      - /itwxe/dockerData/mysql/data:/var/lib/mysql
      - /itwxe/dockerData/mysql/conf:/etc/mysql
      - /itwxe/dockerData/mysql/log:/var/log/mysql
    # 指定容器的环境变量
    environment:
      - MYSQL_ROOT_PASSWORD=123456
  # 指定Redis服务名称
  redis:
    # 使用自定义镜像(指定配置文件)
    image: itwxe/redis:5.0.8
    container_name: admin_redis
    ports:
      - 6379:6379
    volumes:
      - /itwxe/dockerData/redis/data:/data
  # 指定项目服务名称
  sunny-admin:
    # 指定服务使用的镜像
    image: itwxe/sunny-admin:0.0.1
    # 指定容器名称
    container_name: sunny-admin
    # 指定服务运行的端口
    ports:
      - 9002:9002
    # 指定容器中需要挂载的文件
    volumes:
      - /itwxe/dockerData/sunny-admin/logs:/var/logs
    # 指定别名,项目yml中可以通过别名访问,例如:
    links:
      - mysql:admin_mysql
      - redis:admin_redis

6、进入 docker-compose.yml 文件目录,启动服务。

docker-compose up -d

docker-compose启动服务

可以看到服务都正常启动了,此时可以访问下项目,项目正常访问。

docker-compose启动一组服务