我是目录

  • 1. Docker Compose介绍
  • 2. Compose 安装
  • 3. yaml配置文件
  • 4 常用命令
  • 5 微服务一键部署栗子🌰


1. Docker Compose介绍

Docker Compose官方文档:https://docs.docker.com/compose/

Docker Compose 是一个用于定义和运行多容器 Docker 应用程序的工具。借助 Compose,可以使用 YAML 文件来配置应用程序的服务。然后,使用单个命令,从配置中创建并启动所有服务。

Docker Compose 是用来定义和运行一个或多个容器的工具。使用 compose 可以简 化容器镜像的构建以及容器的运行。比如,我们开发一个微服务项目,十几个项目,如果每个项目都执行docker run,需要执行十几次,是不是很崩溃😫。使用 Compose,用 YAML 文件来配置这十几个项目的容器启动,一条命令搞定,并且你可以把这个YAML文件放到任何有docker环境的机器上执行。

容器里面启动两个进程 如何启动一个容器_mysql

2. Compose 安装

  • 下载
    到github上下载对应版本的Compose,下载地址:https://github.com/docker/compose/releases
  • 授权
    把下载好的 docker-compose-linux-x86_64 上传到服务器
    移动到/usr/local/bin目录,并重命名为docker-compose
mv docker-compose-linux-x86_64 /usr/local/bin/docker-compose

docker-compose添加可执行权限

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

# 或者直接给个最高权限

chmod 777 /usr/local/bin/docker-compose
  • 验证
docker-compose -v 
# 或者
docker-compose version
  • 卸载
    /usr/local/bin/目录直接删除docker-compose文件即可
cd /usr/local/bin

rm -f docker-compose

3. yaml配置文件

Docker Compose 的 YAML 文件包含 4 个一级 Key:versionservicesnetworksvolumes

  • version 是必须指定的,位于文件的第一行。它定义了 Compose 文件格式,Compose 文件格式有多个版本 2、2.x 和 3.x,与各个Docker版本的兼容性可以查看官网的文档:https://docs.docker.com/compose/compose-file/
  • services 用于定义应用服务。
  • networks 用于指引 Docker 创建新的网络。默认情况下,Docker Compose 会创建 bridge 网络。
  • volumes 指定数据卷。

下面的例子,定义了两个服务器mysql-testtomcat-testYAML文件的定义和使用docker run命令指定的参数一样。直接看代码吧,注释写的很清楚😊

version: "3.9"
services:
  mysql-test: # 定义一个Mysql服务
      restart: always # 重启模式
      container_name: mysql5.7 #定义容器名称
      environment: # 指定环境变量,定义mysql root用户密码
        MYSQL_ROOT_PASSWORD: 123456
      privileged: true  # 使用该参数,容器内的root拥有真正的root权限。否则,容器内的root只是外部的一个普通用户权限
      volumes:
      - /usr/data/mysql:/var/lib/mysql  #宿主机数据卷
      image: mysql:5.7.36  #指定启动的镜像
      ports:
      - 3306:3306  # 指定端口映射
  tomcat-test: # 定义一个tomcat服务
      restart: always  # 重启模式
      container_name: tomcat-test #容器名称
      volumes:
        - /usr/data/tomcat1:/usr/local/tomcat/webapps  #宿主机数据卷
      image: tomcat:8.5.45-jdk8-corretto #指定启动的镜像
      ports:
        - 8080:8080  # 指定端口映射
      depends_on:    # 定义容器启动顺序,只有mysql-test服务启动成功后,才启动tomcat
        - mysql-test

YAML配置文件的参数很多,详细的可以查看官网文档,上面使用的到参数,都是比较简单常用的。

4 常用命令

Docker Compose 默认使用的文件名 docker-compose.yml,如果不是这个默认名称,需要使用docker-compose -f参数指定。

命令语法格式为:

docker-compose -f [YAML配置文件名称] [执行参数]

以下命令的演示,默认的YAML配置文件名都是docker-compose.yml

  • 启动服务
    命令格式:
docker-compose -f [YAML文件名称] up [-d]

参数 -d 后台启动

# 前台启动
docker-compose up

# 后台启动
docker-compose up -d

如果默认名称不是docker-compose.yml,则使用-f参数指定

# 如果默认名称不是docker-compose.yml,则使用-f参数指定
docker-compose -f docker-compose-test.yml  up -d
  • 停止服务
docker-compose down

如果默认名称不是docker-compose.yml,则使用-f参数指定

# 如果默认名称不是docker-compose.yml,则使用-f参数指定
docker-compose -f docker-compose-test.yml down
  • 列出所有运行容器
docker-compose ps
# 如果默认名称不是docker-compose.yml,则使用-f参数指定
docker-compose -f docker-compose-test.yml ps
  • 重启
docker-compose restart
  • 停止已运行的服务
docker-compose stop
  • 查看日志
docker-compose logs

docker-compose logs tomcat-test

5 微服务一键部署栗子🌰

结合Dockerfile,使用Compose,一键部署微服务

  • Compose YAML配置文件 docker-compose.yml
version: '3'
services:
  test-mysql:  # mysql容器
    build:
      context: /usr/test/db   # 指定 Mysql Dockerfile 文件所在的路径
    environment:
      MYSQL_ROOT_PASSWORD: root
    restart: always
    container_name: test-mysql
    image: test-mysql
    ports:
      - 3306:3306
  test-redis:  # redis 容器
    image: redis:5.0.14
    ports:
      - 6379:6379
    restart: always
    container_name: redis

  test-register:  # 注册中心
    build:
      context: /usr/test/register   # 指定 注册中心 Dockerfile 文件所在的路径
    restart: always
    ports:
      - 8081:8080
    container_name: test-register
    image: test-register
    
  test-admin: # 后台管理接口
    build:
      context: /usr/test/register   # 指定 后台管理接口 Dockerfile 文件所在的路径
    restart: always
    ports:
      - 8081:8080
    container_name: test-admin
    image: test-admin  
    
    # 有其他服务可以继续添加
  • Mysql Dockerfile
FROM mysql:5.7.36

MAINTAINER warybee  warybee@gmail.com

# 修改mysql时区
ENV TZ=Asia/Shanghai

RUN ln -sf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone

# 自动执行初始化sql脚本。
COPY init.sql /docker-entrypoint-initdb.d
  • 后台管理接口、注册中心 Dockerfile
    使用基于Spring boot开发,把项目打包成jar,定义运行jar包的Dockerfile
# 指定基础镜像
FROM openjdk:8-alpine3.9

# `RUN`  构建镜像时执行的命令,这里创建一个目录
RUN mkdir -p /docker-demo
# WORKDIR 工作目录,类似于cd命令
WORKDIR /docker-demo

#  用于指定传递给构建运行时的变量
ARG JAR_FILE=target/docker-demo.jar

#  把传过来的jar名称,重命名为app.jar
COPY ${JAR_FILE} app.jar

# 向外界暴露8080端口
EXPOSE 8080
# 设置两个环境变量,TZ=Asia/Shangha 修改时区。JAVA_OPTS="..." java运行时JVM参数
ENV TZ=Asia/Shanghai JAVA_OPTS="-Xms128m -Xmx256m -Djava.security.egd=file:/dev/./urandom"

#容器启动命令,在容器启动时才进行调用
CMD java -jar app.jar $JAVA_OPTS
  • 启动服务
    docker-compose.yml上传到服务器,启动服务
docker-compose up -d

查看运行的服务

docker-compose ps