docker-compose详解
docker-compose基础知识
compose是什么
Docker Compose是 docker 提供的一个命令行工具,Docker-compose是docker的服务编排工具,主要是用来构建多个服务,一般是构建构建多个有关联的服务。使用compose,可以使用yaml文件配置应用程序的服务。然后,通过一个命令可以从配置中创建和启动所有服务
compose使用步骤
使用compose基本上是一个三步过程:
-
创建dockerfile,或者镜像定义应用程序的环境,以便在任何地方复制。
-
在docker-compose.yml中定义组成应用程序的服务,以便它们可以在单独的环境中一起运行。
-
运行docker compose up启动并运行整个应用程序。
安装compose
#下载compose的源代码
curl -L "https://github.com/docker/compose/releases/download/1.25.0/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
#赋予可执行权限
chmod +x /usr/local/bin/docker-compose
使用如下命令检查docker-compose是否成功安装:
docker-compose --version
如下图即安装成功
docker-compose常用命令
1.以守护方式运行
[root@docker-learning-centos7 composeapp]# docker-compose up -d
2.查看服务的运行状态
[root@docker-learning-centos7 composeapp]# docker-compose ps
3.查看服务的日志事件:
[root@docker-learning-centos7 composeapp]# docker-compose logs
4.停止正在运行的服务
[root@docker-learning-centos7 composeapp]# docker-compose stop
5.删除docker-compose服务
[root@docker-learning-centos7 composeapp]# docker-compose rm
docker-compose使用实例
这里使用一个python-flask应用为例子,该例子中使用了两个容器,一个是redis,一个是flask
1、创建composeapp的目录
mkdir compose
cd compose
touch Dockerfile
2、编写app.py文件
文件内容如下:
from flask import Flask
from redis import Redis
import os
app=Flask(__name__)
redis=Redis(host="redis_1",port=6379)
@app.route('/')
def hello():
redis.incr('hits')
return 'Hello world! I have been seen {0} times'.format(redis.get('hits'))
if __name=="__main__":
app.run(host="0.0.0.0",debug=True)
3、编写requirement.txt文件
requirement.txt文件是用来解决应用程序所依赖的包的,即解决依赖关系的文件,注意文件名不要修改
vim requirement.txt
文件内容如下:
flask
redis
4、制作包含多个服务的应用程序镜像
docker build -t "hxyapp" .
出现如下图情况证明镜像已经制作成功
5、编写compose.yml文件
compose.yml文件里面定义了一组要启动的服务,以docker容器的形式表现,还定义了这些服务启动的属性等,通过将所有与服务有关的属性写在yml文件里,之后再执行docker-compose up命令,则可以达到同时部署多个容器的目的
文件内容如下:
web:
image: hxyapp
command:python app.py
ports:
- "5000:5000"
volumes:
- .:/composeapp
links:
- redis
redis:
image: redis
1.文件中指定了要启动的服务,有web和redis两个服务,每个要启动的服务都使用一个YAML的散列键定义:web和redis
2.对于web服务,指定了运行时的参数,首先,使用image指定要使用的镜像,使用command指定服务启动时执行的命令,使用port指定端口映射,使用volume指定卷映射,最后使用link指定了要连接到服务的其他服务,将redis服务连接到了web服务。
该yml文件等同于如下命令:
[root@docker-learning-centos7 composeapp]# docker run -d --name "redis" redis
[root@docker-learning-centos7 composeapp]# docker run -d -p 5000:5000 -v /root/composeapp:/composeapp --link redis:redis --name "hxytest" hxyapp python app.py
6、验证
启动服务:
[root@docker-learning-centos7 composeapp]# docker-compose up
看到如下界面则证明已经成功:
访问网址:
这里是7次,是因为我多刷新了几次,验证了redis服务
7、注意
要在docker-compose.yml文件的目录下去执行compose命令。