Docker【6】| 让Docker炫起来

本文涉及的产品
Redis 开源版,标准版 2GB
推荐场景:
搭建游戏排行榜
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 RDS PostgreSQL,高可用系列 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状态。

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

相关文章
|
Java 数据库
【数据库】starrocks 安装踩坑
【数据库】starrocks 安装踩坑
1081 0
数据库必知词汇:JIT
在PostgreSQL等数据库中,JIT指的是即时编译(Just-in-time Compilation),即程序在运行过程中即时进行编译,其中可以把编译的中间代码缓存或者优化。相对于静态编译代码,即时编译的代码可以处理延迟绑定并增强安全性。
782 0
Appium设置会话时长,解决调试代码时session失效的问题
Appium设置会话时长,解决调试代码时session失效的问题
389 0
|
测试技术 Linux 网络安全
【好玩的开源项目】使用Docker部署SyncTV视频同步和共享平台
【4月更文挑战第16天】使用Docker部署SyncTV视频同步和共享平台
1119 2
|
传感器
嵌入式系统中的中断屏蔽
嵌入式系统中的中断屏蔽
361 1
|
存储 弹性计算 Linux
“你不干?有的是帕鲁干!”幻兽帕鲁阿里云服务器游戏数据备份
《幻兽帕鲁》无疑是2024年第一款爆火出圈的游戏,阿里云等云厂商也第一时间推出了一键部署多人联机服务器的方案。最近不少用户遇到了游戏坏档的问题,本文介绍如何使用阿里云云备份无门槛、低成本地自动备份幻兽帕鲁服务器,并在需要时一键恢复。
|
存储 监控 持续交付
构建可扩展的阿里云 RPA 架构
随着企业业务的增长和变化,构建一个可扩展的机器人流程自动化(RPA)架构变得至关重要。本文将介绍如何利用阿里云 RPA 构建一个可扩展的架构,以适应不断变化的业务需求。
|
自然语言处理 监控 数据挖掘
信息系统项目管理师重点内容汇总(第十二天)
【1月更文挑战第12天】乘风破浪会有时,直挂云帆济沧海
897 2
阿里十年大数据专家谈“云上数据中台之道”含内部PPT
从大数据的概念被正式提出,到马云老师预言人类正从IT时代走向DT时代,大数据浪潮迭起。大数据同仁共同认知的一点是,大数据会对社会创新、产业变革、业务创新及每个人的角色定位产生近乎决定性的影响。
|
Linux 开发工具 芯片
玩转 PI 系列 - 如何在 Rockchip Arm 开发板上安装 Docker Tailscale K3s Cilium?
玩转 PI 系列 - 如何在 Rockchip Arm 开发板上安装 Docker Tailscale K3s Cilium?