docker-compose快速入门及实战

本文涉及的产品
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
RDS MySQL Serverless 高可用系列,价值2615元额度,1个月
简介: docker-compose快速入门及实战

一、认识Docker-Compose


官网—Use Docker Compose


Get started with Docker Compose


简介:docker-compose是基于docker的编排工具,使容器的操作能够批量的,可视的执行,是一个管理多个容器的工具。


docker-compose是基于docker的开源项目,托管于github上,由python实现,调用 docker服务的API负责实现对docker容器集群的快速编排,即通过一个单独的yaml文件,来定义一组相关的容器来为一个项目服务。 所以,docker-compose默认的管理对象是项目,通过子命令的方式对项目中的一组容器进行生命周期的管理。

最重要的两个概念


服务 (service):一个应用的容器,实际上可以包括若干运行相同镜像的容器实例。

项目 (project):由一组关联的应用容器组成的一个完整业务单元,在 docker-compose.yml 文件中定义。Compose 的默认管理对象是项目,通过子命令对项目中的一组容器进行便捷地生命周期管理。


二、快速安装Docker-Compose


# 国内镜像下载
sudo curl -L "https://get.daocloud.io/docker/compose/releases/download/1.29.2/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
# 为docker-compose设置权限
sudo chmod +x /usr/local/bin/docker-compose
# 查看docker-compose版本
docker-compose --version



三、Docker Compose文件语法详解以及运行命令


Docker运行命令详解


# 直接运行该目录下所有compose文件:
docker-compose up
# 后台运行: 
docker-compose up -d
# 指定文件名运行:
docker-compose -f xxx-compose.yml up -d


docker-compose文件语法详解


参考:docker-compose语法详解


实战案例:SpringBoot(53) 整合canal实现数据同步,可去根据实战案例中的compose来自己对照下面配置内容来编写出来


version: "3"  # 指定docker-compose语法版本
services:    # 从以下定义服务配置列表
  server_name:   # 可将server_name替换为自定义的名字,如mysql/php都可以
    container_name: container_name  # 指定实例化后的容器名,可将container_name替换为自定义名
    image: xxx:latest # 指定使用的镜像名及标签
    build:  # 如果没有现成的镜像,需要自己构建使用这个选项
      context: /xxx/xxx/Dockerfile  # 指定构建镜像文件的路径
      dockerfile: ....     # 指定Dockerfile文件名,上一条指定,这一条就不要了
    ports:
      - "00:00"  # 容器内的映射端口,本地端口:容器内端口
      - "00:00"  # 可指定多个
    volumes:
      - "test1:/xx/xx"  # 这里使用managed volume的方法,将容器内的目录映射到物理机,方便管理
      - "test2:/xx/xx"  # 前者是volumes目录下的名字,后者是容器内目录
      - "test3:/xx/xx"  # 在文件的最后还要使用volumes指定这几个tests
    volumes_from:  # 指定卷容器
       - volume_container_name  # 卷容器名
    restarts: always  # 设置无论遇到什么错,重启容器,其他:unless-stopped(指定容器退出后的重启策略为始终重启,但是不考虑在Docker守护进程启动时就已经停止了的容器)
    depends_on:       # 用来解决依赖关系,如这个服务的启动,必须在哪个服务启动之后
      - server_name   # 这个是名字其他服务在这个文件中的server_name
      - server_name1  # 按照先后顺序启动
    links:  # 与depend_on相对应,上面控制容器启动,这个控制容器连接
      - mysql  # 值可以是- 服务名,比较复杂,可以在该服务中使用links中mysql代替这个mysql的ip
    networks: # 加入指定的网络,与之前的添加网卡名类似
      - my_net  # bridge类型的网卡名
      - myapp_net # 如果没有网卡会被创建,建议使用时先创建号,在指定
    environment: # 定义变量,类似dockerfile中的ENV
      - TZ=Asia/Shanghai  # 这里设置容器的时区为亚洲上海,也就解决了容器通过compose编排启动的 时区问题!!!!解决了容器的时区问题!!!
      变量值: 变量名   # 这些变量将会被直接写到镜像中的/etc/profile
    command: [                        #使用 command 可以覆盖容器启动后默认执行的命令
            '--character-set-server=utf8mb4',            #设置数据库表的数据集
            '--collation-server=utf8mb4_unicode_ci',    #设置数据库表的数据集
            '--default-time-zone=+8:00'                    #设置mysql数据库的 时区问题!!!! 而不是设置容器的时区问题!!!!
    ]
  server_name2:  # 开始第二个容器
    server_name:
      stdin_open: true # 类似于docker run -d
      tty: true  # 类似于docker run -t
volumes:   # 以上每个服务中挂载映射的目录都在这里写入一次,也叫作声明volume
  test1:
  test2:
  test3:
networks:  # 如果要指定ip网段,还是创建好在使用即可,声明networks
  my_net:
    driver: bridge  # 指定网卡类型
  myapp_net:
    driver: bridge


四、实战手动编写一个Docker Compose


该案例是从原始的docker命令演变为使用docker compose,我自己也是如此来进行过渡进而学习docker compose的使用方法的。


案例使用MySQL 5.7.36镜像


首先我们拉取一个mysql5.7.36镜像:


docker pull mysql:5.7.36


原先我们的启动MySQL的Docker命令如下:


在命令中我们挂载了对应的mysql配置文件。


docker run --name mysql5736 \
-p 3306:3306 \
-v /mydata/mysql/conf:/etc/mysql/mysql.conf.d \
-e MYSQL_ROOT_PASSWORD=root \
-d mysql:5.7.36


挂载的配置文件名为mysqld.cnf,完整的目录为:/home/dockerfiles/mysql/conf/mysqld.cnf:在配置文件中我开启了binlog,之后来进行验证


[mysqld]
pid-file  = /var/run/mysqld/mysqld.pid
socket  = /var/run/mysqld/mysqld.sock
datadir  = /var/lib/mysql
#log-error  = /var/log/mysql/error.log
# By default we only accept connections from localhost
#bind-address = 127.0.0.1
# Disabling symbolic-links is recommended to prevent assorted security risks
symbolic-links=0
log-bin=mysql-bin  # 开启 binlog
binlog-format=ROW  # 选择 ROW 模式
server-id=1 # 配置 MySQL replaction 需要定义,不要和 canal 的 slaveId 重复


替换为Docker Compose文件:



文件路径:


/
└── home
     └── dockerfiles
           └── mysql
                └── conf
                      └── mysqld.cnf
            └──docker-compose-mysql.yml


我们在home目录中创建dockerfiles文件夹,然后在mysql/conf目录下创建对应的mysql配置文件,同上,这个操作我不做演示了。


现在关注点就在这个docker-compose-mysql.yml配置文件上,上面的Docker命令转换如下:


version: "3"
services:
  mysql:  # mysql服务
    image: mysql:5.7.36  # 镜像文件
    container_name: mysql5736test  # 容器名称
    volumes: 
      - "./mysql/conf:/etc/mysql/mysql.conf.d"   # 共享同一个配置文件目录
    environment:                                 # 设置环境变量,相当于docker run命令中的-e
      TZ: Asia/Shanghai
      LANG: en_US.UTF-8
      MYSQL_ROOT_PASSWORD: root                  # 设置初始密码为root 
    ports:
      - "3307:3306"                              # 端口号配置


接着在dockerfiles文件目录下执行启动命令:


# -f表示指定某个配置文件名   -d:表示后台启动
docker-compose -f docker-compose-mysql.yml up -d


若是出现下面的效果,表示已经成功!



我们使用navicat来去连接一些看看:默认的用户名密码是root、root,端口宿主机开放的是3307映射到容器中的3306,连接成功如下:



用docker compose后简直不要太爽了,避免了之前写了一大长串的docker执行命令,很容易出错,而且执行多个容器也不方便,需要一个个进行启动。


相关实践学习
如何在云端创建MySQL数据库
开始实验后,系统会自动创建一台自建MySQL的 源数据库 ECS 实例和一台 目标数据库 RDS。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助     相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
相关文章
|
25天前
|
SQL 关系型数据库 数据库
国产数据实战之docker部署MyWebSQL数据库管理工具
【10月更文挑战第23天】国产数据实战之docker部署MyWebSQL数据库管理工具
84 4
国产数据实战之docker部署MyWebSQL数据库管理工具
|
2天前
|
JavaScript Linux 持续交付
深入探索容器化技术——Docker 的实战应用
深入探索容器化技术——Docker 的实战应用
17 0
|
2月前
|
Docker 容器
Docker自建仓库之Harbor高可用部署实战篇
关于如何部署Harbor高可用性的实战教程,涵盖了从单机部署到镜像仓库同步的详细步骤。
149 15
Docker自建仓库之Harbor高可用部署实战篇
|
2月前
|
算法 Linux 调度
Docker的资源限制实战篇
本文详细介绍了如何利用Docker对容器的资源进行限制,包括内存和CPU的使用。文章首先概述了资源限制的重要性及其在Linux系统中的实现原理,并强调了不当设置可能导致的风险。接着,通过一系列实战案例展示了如何具体设置容器的内存限制,包括硬性限制、动态调整以及软限制等。最后,文章还提供了限制容器CPU访问的具体方法和示例,如指定容器使用的CPU核心数和基于`--cpu-shares`参数对CPU资源进行分配。通过这些实践,读者可以更好地理解和掌握Docker资源管理技巧。
246 14
Docker的资源限制实战篇
|
2月前
|
存储 数据管理 应用服务中间件
Docker的数据管理实战篇
关于Docker数据管理实战的教程,涵盖了Docker数据卷的使用、特点、场景以及数据卷容器的概念和应用。
67 13
Docker的数据管理实战篇
|
2月前
|
运维 Cloud Native Docker
云原生技术入门:Docker容器化实战
【9月更文挑战第20天】本文将引导你走进云原生技术的世界,通过Docker容器化技术的实战演练,深入理解其背后的原理和应用。我们将一起探索如何在云平台上利用Docker简化部署、扩展和管理应用程序的过程,并揭示这一技术如何改变现代软件的开发和运维模式。
|
2月前
|
应用服务中间件 nginx Docker
单机编排工具之docker-compose快速入门使用
这篇文章是关于如何使用docker-compose进行单机编排的快速入门指南,包括了镜像准备、docker-compose安装、使用教程以及验证服务生效的步骤。
58 2
单机编排工具之docker-compose快速入门使用
|
2月前
|
Ubuntu Linux Docker
Ubuntu 18.04 安装Docker实战案例
关于如何在Ubuntu 18.04系统上安装Docker的实战案例,包括安装步骤、配置镜像加速以及下载和运行Docker镜像的过程。
360 3
Ubuntu 18.04 安装Docker实战案例
|
2月前
|
存储 Linux Docker
CentOS 7.6安装Docker实战案例及存储引擎和服务进程简介
关于如何在CentOS 7.6上安装Docker、介绍Docker存储引擎以及服务进程关系的实战案例。
144 3
CentOS 7.6安装Docker实战案例及存储引擎和服务进程简介
|
2月前
|
关系型数据库 Linux 虚拟化
Docker入门基础实战
Docker入门基础实战
下一篇
无影云桌面