大家好,我是脚丫先生 (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状态。
我们之后的文章继续分享...