Docker|Docker【6】| 让Docker炫起来

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


文章目录

  • 一、 初始docker-compose
  • 二、 安装docker-compose
    • 2.1、在线安装docker-compose
    • 2.2、离线安装docker-compose
  • 三、 体验docker-compose
    • 3.1、Docker Compose 部署 Tomcat
    • 3.2、Docker Compose 部署 mysql
  • 四、 docker-compose编排

一、 初始docker-compose 也许你在使用docker run 命令的时候,由起初的懵懂与紧张,到之后的老司机run得飞起!经历了多次容器的出生于死亡,就会去思考一个问题。我们每次run去新启动一个容器时候,一旦需要去修改容器的某个配置,总是很麻烦,可能你会想到,官方提供的Docker update命令,然而官网提供的是有限个参数的修改,深入到细节总是短小而不精悍。因此我们要想实现docker容器的快速自定义(个人定制),那么docker-compose的重要性不言而喻。
【Docker|Docker【6】| 让Docker炫起来】docker-compose是用于定义和运行多个容器Docker应用程序的工具。通过docker-compose,我们可以使用它来配置docker应用程序的服务。之后,使用一个命令,就可以从配置中创建并启动所有服务。 换言之,用一个为yml格式的文件,去管理你需要的容器。更重要的是有了 docker-compose ,你就可以把所有繁复的 docker 操作全都一条命令,自动化的完成。
Docker|Docker【6】| 让Docker炫起来
文章图片

一条命令,自动化完成docker的操作,够吊够炫酷。docker-compose,解放双手,值得拥有!!!
二、 安装docker-compose 2.1、在线安装docker-compose 使用docker-compose这个容器编排工具,必须下载docker-compose这个命令,那么我们可以去github官方网站搜索“docker/compose”,如下:
Docker|Docker【6】| 让Docker炫起来
文章图片

接着点击tags
Docker|Docker【6】| 让Docker炫起来
文章图片

选择自己需要的版本
Docker|Docker【6】| 让Docker炫起来
文章图片

[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|Docker【6】| 让Docker炫起来
文章图片

当我们把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

进行浏览器访问:
Docker|Docker【6】| 让Docker炫起来
文章图片

3)停止容器
就在这里进行彻底解放双手,当我们需要去修改容器某个配置,只需要去执行以下命令去停止移除容器:
[root@spark1 tomcat]# docker-compose down

当容器移除完毕之后!!!
Docker|Docker【6】| 让Docker炫起来
文章图片

我们就可以对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|Docker【6】| 让Docker炫起来
文章图片

四、 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/mysqlredis: 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|Docker【6】| 让Docker炫起来
文章图片

我相信,大家在学习docker-compose进行编排多个容器的时候,会遇到先后顺序问题。也许你可能认为官方给的depends_on能解决,但是其实并不是完全的解决该问题,因为depends_on只能保证依赖的容器进入了running状态,而不是ready状态。
我们之后的文章继续分享…
Docker|Docker【6】| 让Docker炫起来
文章图片

博客主页:https://blog.csdn.net/shujuelin
欢迎点赞 收藏 ?留言 如有错误敬请指正

    推荐阅读