容器高效管理工具Docker Compose。想不想试试一条命令启动N个容器?

1. Docker Compose介绍

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

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

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

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
    
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

warybee

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值