Docker【6】| 让Docker炫起来

本文涉及的产品
云数据库 Tair(兼容Redis),内存型 2GB
Redis 开源版,标准版 2GB
推荐场景:
搭建游戏排行榜
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
简介: Docker最炫名族风。

大家好,我是脚丫先生 (o^^o)

在前面的章节中,我们学习到了Docker的基本知识,同时也Docker run了,算是彻底的体验了一把Docker的牛逼克拉斯。掌握了这些内容,对于Docker容器这个知识点,你已经可以到及格线了。但是,我想你肯定不会满足于此,不满足就跟着脚丫往下学呗,docker-compose的初识、相知、一条龙服务尽在下文。day day up !!!

请添加图片描述

一、 初始docker-compose

也许你在使用docker run 命令的时候,由起初的懵懂与紧张,到之后的老司机run得飞起!经历了多次容器的出生于死亡,就会去思考一个问题。我们每次run去新启动一个容器时候,一旦需要去修改容器的某个配置,总是很麻烦,可能你会想到,官方提供的Docker update命令,然而官网提供的是有限个参数的修改,深入到细节总是短小而不精悍。因此我们要想实现docker容器的快速自定义(个人定制),那么docker-compose的重要性不言而喻。

docker-compose是用于定义和运行多个容器Docker应用程序的工具。通过docker-compose,我们可以使用它来配置docker应用程序的服务。之后,使用一个命令,就可以从配置中创建并启动所有服务 换言之,用一个为yml格式的文件,去管理你需要的容器。更重要的是有了 docker-compose ,你就可以把所有繁复的 docker 操作全都一条命令,自动化的完成。
在这里插入图片描述
一条命令,自动化完成docker的操作,够吊够炫酷。docker-compose,解放双手,值得拥有!!!

二、 安装docker-compose

2.1、在线安装docker-compose

使用docker-compose这个容器编排工具,必须下载docker-compose这个命令,那么我们可以去github官方网站搜索“docker/compose”,如下:
在这里插入图片描述
接着点击tags
在这里插入图片描述
选择自己需要的版本
在这里插入图片描述

[root@docker ~]# curl -L https://github.com/docker/compose/releases/download/1.25.0/docker-compose-`uname -s`-`uname -m` -o /usr/local/bin/docker-compose
[root@docker ~]# chmod +x /usr/local/bin/docker-compose 

* 如果网速不佳可以使用以下命令:
[root@docker ~]# curl -L https://get.daocloud.io/docker/compose/releases/download/1.25.0/docker-compose-`uname -s`-`uname -m` > /usr/local/bin/docker-compose
[root@docker ~]# chmod +x /usr/local/bin/docker-compose
//验证
[root@docker ~]# docker-compose -v       //查看工具的版本信息
docker-compose version 1.25.0, build 0a186604

2.2、离线安装docker-compose

由于在很多情况下需要安装docker-compose的虚拟机或服务器无法访问互联网,因此需要离线安装。
1)、下载docker-compose-Linux-x86_64离线包(可以找一个有网的环境下载)

https://github.com/docker/compose/releases
https://github.com/docker/compose/releases/download/1.25.0/docker-compose-Linux-x86_64

2)、将下载下来的“docker-compose-Linux-x86_64”文件上传到服务器上,然后执行如下命令将其移动到 /usr/local/bin,并改名为“docker-compose”

[root@docker ~]# mv docker-compose-Linux-x86_64 /usr/local/bin/docker-compose

3)、接着执行如下命令添加可执行权限:

[root@docker ~]# chmod +x /usr/local/bin/docker-compose

4)、最后使用 docker-compose version 命令测试是否安装成功

[root@docker ~]# docker-compose -v       //查看工具的版本信息
docker-compose version 1.25.0, build 0a186604

三、 体验docker-compose

docker run命令新启动了一个服务容器之后,对该容器的各种配置修改,都需要去删除该容器,然后修改我们的docker run命令,最后重新启动。每一次的修改,都需要去重复该过程,执行一串非常长而又难以记忆的docker run命令。真的糟糕透了...
在这里插入图片描述
当我们把docker-cmpose工具安装之后,一切就变得那么So easy。

3.1、Docker Compose 部署 Tomcat

1) 创建一个名为 docker-compose.yml 的配置文件,配置内容如下

version: '3.1'
services:
  tomcat:
    restart: always
    image: tomcat
    container_name: tomcat
    ports:
      - 8080:8080
    volumes:
      - ./webapps:/usr/local/tomcat/webapps.dist
    environment:
      TZ: Asia/Shanghai
  • version:指定 docker-compose.yml 文件的写法格式。(Compose 文件格式有3个版本,分别为1, 2.x 和 3.x。 目前主流的为 3.x 其支持 docker 1.13.0 及其以上的版本)。
  • services:多个容器集合。
  • tomcat:该容器的服务名,我这里为tomcat的服务,可以自己定义。(可以理解:services 下面的第一级别的 key 既是一个 service 的名称,和其他容器做区分)。
  • restart: 开机启动,失败也会一直重启。
  • image: 指定服务所使用的镜像。
  • container_name:容器名称。
  • ports:宿主机端口:容器端口(宿主机和容器端口的映射)。
  • volumes:数据卷(宿主机和容器目录或者文件映射)。
  • environment:环境变量配置。

2)启动容器
当我们把docker-compose.yml文件编写完毕之后,只需要执行以下命令就能快速启动该服务容器:

[root@spark1 tomcat]# docker-compose up -d

进行浏览器访问:
在这里插入图片描述
3)停止容器
就在这里进行彻底解放双手,当我们需要去修改容器某个配置,只需要去执行以下命令去停止移除容器:

[root@spark1 tomcat]# docker-compose down

当容器移除完毕之后!!!
在这里插入图片描述
我们就可以对tomcat的docker-compose.yml进行修改,修改成自己想要的配置之后,然后执行docker-compose up -d命令去重新启动容器即可。

3.2、Docker Compose 部署 mysql

1)创建一个名为 docker-compose.yml 的配置文件,配置内容如下:

version: '3.1'
services:
  db:
    # 目前 latest 版本为 MySQL8.x
    image: mysql
    restart: always
    environment:
      MYSQL_ROOT_PASSWORD: 123456
    command:
      --default-authentication-plugin=mysql_native_password
      --character-set-server=utf8mb4
      --collation-server=utf8mb4_general_ci
      --explicit_defaults_for_timestamp=true
      --lower_case_table_names=1
    ports:
      - 3306:3306
    volumes:
      - ./data:/var/lib/mysql

2)启动容器

[root@spark1 tomcat]# docker-compose up -d

3)停止容器

[root@spark1 tomcat]# docker-compose down

docker-compose的体验就如此的美好,我们只需要编写好docker-compose.yml文件,就可以非常清楚的管理好自己的容器。
在这里插入图片描述

四、 docker-compose编排

有小伙伴,就在问,docker-compose既然是文件编写的,那么可不可以把多个容器,全部写入docker-compose.yml文件里,就不需要针对每个容器,都去编写对应容器文件的繁琐步骤。哈哈哈...问得好,官方已经把这个问题考虑进去了,这也就是docker-compose的精髓所在。

重新对docker-compose进行定义:

Docker Compose是一个编排多容器分布式部署的工具,提供命令集管理容器化应用的完整开发周期,包括服务构建,启动和停止。由以下两方面组成:

1)project:它主要管理一个项目(project),这个项目是由一组关联的应用容器组成的一个完整业务单元。
2)service:每个应用容器则对应一个服务(service),当然服务可能只包含一个容器(container)实例,也可能包括若干运行相同镜像的容器(container)实例。

核心:就在于“一个文件”和“一条命令”。所谓“一个文件”,是指docker-compose.yml,在这个文件中我们可以进行项目的配置,包括服务的定义。而“一条命令”则指,我们只需要类似docker-compose up这样简单的命令即可管理项目。

极速体验

我们需要两个容器,一个mysql容器,一个redis容器。mysql容器是依赖于redis容器。(就好比,redis先启动完毕之后,也就是redis容器进入了running状态,mysql才能启动,有先后顺序)

1)创建一个名为 docker-compose.yml 的配置文件,配置内容如下

version: '3.1'
services:
  mysql:
    image: mysql:5.7
    restart: always
    container_name: mysql
    environment:
      MYSQL_ROOT_PASSWORD: "123456"
    command:
      --default-authentication-plugin=mysql_native_password
      --character-set-server=utf8mb4
      --collation-server=utf8mb4_general_ci
      --explicit_defaults_for_timestamp=true
      --lower_case_table_names=1
      --sql-mode=STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION
    ports:
      - 3306:3306
    depends_on:
      - redis  
    volumes:
      - ./mysqlData:/var/lib/mysql

  redis:
      image: redis:5.0
      container_name: redis
      restart: always
      environment:
        - TZ=Asia/Shanghai
      ports:
        - 6379:6379
      # 映射持久化目录
      volumes:
        - ./redisData:/data
      # requirepass:配置登录密码
      # 开启 appendonly 持久化
      command: "/usr/local/bin/redis-server --requirepass bigdata@2022 --appendonly yes"

2)启动容器

[root@spark1 tomcat]# docker-compose up -d

首先,会先去启动redis容器,当redis容器进入到running之后,才会去启动mysql容器。

在这里插入图片描述

我相信,大家在学习docker-compose进行编排多个容器的时候,会遇到先后顺序问题。也许你可能认为官方给的depends_on能解决,但是其实并不是完全的解决该问题,因为depends_on只能保证依赖的容器进入了running状态,而不是ready状态。

我们之后的文章继续分享...

相关实践学习
基于Redis实现在线游戏积分排行榜
本场景将介绍如何基于Redis数据库实现在线游戏中的游戏玩家积分排行榜功能。
云数据库 Redis 版使用教程
云数据库Redis版是兼容Redis协议标准的、提供持久化的内存数据库服务,基于高可靠双机热备架构及可无缝扩展的集群架构,满足高读写性能场景及容量需弹性变配的业务需求。 产品详情:https://www.aliyun.com/product/kvstore     ------------------------------------------------------------------------- 阿里云数据库体验:数据库上云实战 开发者云会免费提供一台带自建MySQL的源数据库 ECS 实例和一台目标数据库 RDS实例。跟着指引,您可以一步步实现将ECS自建数据库迁移到目标数据库RDS。 点击下方链接,领取免费ECS&RDS资源,30分钟完成数据库上云实战!https://developer.aliyun.com/adc/scenario/51eefbd1894e42f6bb9acacadd3f9121?spm=a2c6h.13788135.J_3257954370.9.4ba85f24utseFl
相关文章
|
11月前
|
Linux 应用服务中间件 nginx
[笔记]docker入门《二》之 docker介绍(一)
[笔记]docker入门《二》之 docker介绍
|
1月前
|
网络协议 Unix Shell
Docker基本教程
这篇文章是关于Docker的入门教程,介绍了Docker的基本命令和操作,包括镜像搜索、拉取、列出、删除,容器的运行、进入、退出、查看状态、停止、重启和删除,以及权限问题的解决方法。
66 2
|
4月前
|
运维 Linux Apache
Docker详解(八)——Docker镜像制作
Docker详解(八)——Docker镜像制作
93 1
|
10月前
|
Linux 测试技术 持续交付
Docker 教程 之 Docker 教程 1
Docker 教程 之 Docker 教程 1
60 1
|
11月前
|
jenkins 应用服务中间件 Linux
[笔记]docker入门《二》之 docker介绍(二)
[笔记]docker入门《二》之 docker介绍(二)
|
缓存 Ubuntu 应用服务中间件
docker小笔记
docker小笔记
|
运维 安全 Ubuntu
Docker 笔记
Docker 笔记
83 0
|
NoSQL 关系型数据库 MySQL
docker教程
docker教程
159 0
|
NoSQL 关系型数据库 MySQL
Docker笔记
Docker笔记
178 0
Docker笔记
|
Shell PHP 开发工具
docker笔记
docker笔记
126 0
docker笔记