九、compose入门
于2021年10月9日学习
零基础初学一门新技术建议先看视频,了解运作原理之后再看文档,也就是先看老师讲再去看文档,事半功倍,个人建议。
一、简介
- 是Docker 容器集群编排工具
- 是Docker 官方的开源项目
- 是Python编写的,后被GO语言重写
先来个简短的介绍,不了解不要紧,接着往后看
参考资料:docker入门到实践
二、安装
2.1 二进制安装
#从github上下载,速度慢
curl -L https://github.com/docker/compose/releases/download/1.27.4/docker-compose-`uname -s`-`uname -m` > /usr/local/bin/docker-compose
#从国内源下载,速度快
curl -L https://download.fastgit.org/docker/compose/releases/download/1.27.4/docker-compose-`uname -s`-`uname -m` > /usr/local/bin/docker-compose
#添加执行权限
chmod +x /usr/local/bin/docker-compose
#建立软连接,就不用添加到全局变量了
ln -s /usr/local/bin/docker-compose /usr/bin/docker-compose
#测试安装成功
docker-compose --version
也可直接下载上传到服务器,目前最新版本为v2.0.1
2.2 pip安装
这种方式是将 Compose 当作一个 Python 应用来从 pip 源中安装。
pip install -U docker-compose
2.3 使用bash补全命令
curl -L https://raw.githubusercontent.com/docker/compose/1.27.4/contrib/completion/bash/docker-compose > /etc/bash_completion.d/docker-compose
这个脚本需要FQ才能下载,我已经上传到了腾讯云盘。
2.4 卸载
1)二进制安装直接删除文件即可。
rm /usr/local/bin/docker-compose
2)pip安装使用如下命令删除
pip uninstall docker-compose
三、案例
Compose通过案例来讲比较容易理解,下面开始讲个简单的案例。
3.1 术语
service:服务,一个容器叫一个服务,一个项目中通常由多个相关联的服务组成。
project:项目,由多个相关联的容器组成的环境叫项目。
现在不明白没事,先记住这两个概念即可,看后面的案例。
3.2 案例
此案例会用到3个文件,分别是app.py,Dockerfile,docker-compose.yml文件。
我们先新键一个名为web的文件夹,再进入web文件夹分别创建如下三个文件。
1)app.py文件
用python编写的web文件,记录页面被访问次数。
from flask import Flask
from redis import Redis
app = Flask(__name__)
redis = Redis(host='redis', port=6379)
@app.route('/')
def hello():
count = redis.incr('hits')
return 'Hello World! 该页面已被访问 {} 次。\n'.format(count)
if __name__ == "__main__":
app.run(host="0.0.0.0", debug=True)
2)Dockerfile
创建一个python运行容器
FROM python:3.6-alpine
ADD . /code
WORKDIR /code
RUN pip install redis flask
CMD ["python", "app.py"]
3)docker-compose.yml
compose模板文件,跟Dockerfile文件相似,不过Dockerfile用来定制创建一个容器,docker-compose.yml是用来定制创建一组先关联的容器,在这里,容器都叫服务。
version: '3'
services:
web:
build: .
ports:
- "5000:5000"
redis:
image: "redis:alpine"
:'
version:语法版本,目前最高版本为3
services:定义服务,后续的web跟redis都是容器,在项目中叫服务
web:web服务容器
build:使用Dockerfile创建web服务容器
ports:将宿主机的5000端口映射到容器5000端口
image:使用镜像,将使用redis:alpine的镜像创建redis容器
'
4)运行compose项目
docker-compose up
访问本地5000端口,就能访问到该web服务,每次刷新页面,计数就会加1
效果如下
通过这个案例,我们知道docker-compose.yml是compose工具的核心文件,用来创建整个项目,该案例中就创建了一个由web容器跟redis数据库容器环境搭建而成的项目,在该项目中,这两个容器都称之为服务。
四、总结
-
compose是容器编排工具,用于创建和维护一组相关联的容器,不必我们再去使用
docker run
一个一个的去创建跟维护容器。 -
compose核心文件是docker-compose.yml,里面记录了这一组容器是如何被创建,使用的什么镜像,声明什么端口,运行的什么服务跟命令。在这里,里面的每个容器都叫服务,而这一组容器组成的整体叫做项目。