Docker-compose简介
Docker-compose是一个通过YAML文件来定义并运行多个Docker容器的工具。使用Docker-compose,用户可以方便的在多个容器之间定义网路、服务依赖等关系,同时快速方便地构建复杂的应用。
安装Docker-compose
首先,需要安装Docker-compose。Docker-compose可以通过pip工具进行安装,必须先安装Python和pip,在命令行中使用如下命令进行安装:
$ sudo pip install docker-compose
安装完成后,可以在命令行中输入docker-compose
来检查是否安装成功。
Docker-compose常用命令
使用docker-compose时,需要使用一些常用的命令,包括:
docker-compose up
: 启动容器并构建应用docker-compose down
: 停止并删除容器和应用docker-compose ps
: 查看容器状态docker-compose logs
: 查看容器日志输出docker-compose exec
: 进入已启动的容器中执行命令
Docker-compose实战
在实际应用中,Docker-compose可以相当方便的创建和管理多个Docker容器。下面使用两个简单的示例说明docker-compose的使用方法。
示例1:启动Web应用程序
假设有一个Web应用程序,需要启动一个Python服务和一个Nginx服务,并且在服务之间建立连接。
- 创建一个工作目录,并创建
docker-compose.yml
文件。
$ mkdir webapp
$ cd webapp
$ touch docker-compose.yml
- 编辑
docker-compose.yml
文件。
在docker-compose.yml中定义了两个服务:web
和nginx
。web服务使用Python容器运行,nginx服务使用Nginx容器运行。这两个服务都使用同一个网络,默认使用webapp_default
。
version: '3'
services:
web:
build: .
command: python app.py
ports:
- "5000:5000"
nginx:
image: nginx:latest
ports:
- "8080:80"
volumes:
- ./nginx.conf:/etc/nginx/nginx.conf
depends_on:
- web
networks:
default:
name: webapp_default
- 创建一个
app.py
文件
在工作目录中创建一个名为app.py
的文件,内容如下:
from flask import Flask
app = Flask(__name__)
@app.route('/')
def hello():
return "Hello World!"
if __name__ == "__main__":
app.run(host="0.0.0.0")
- 创建一个Nginx配置文件
在工作目录中创建一个名为nginx.conf
的文件,内容如下:
events {
worker_connections 1024;
}
http {
server {
listen 80;
server_name localhost;
location / {
proxy_pass http://web:5000;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
}
}
}
- 启动服务
使用如下命令启动服务:
$ docker-compose up
当服务启动后,可以通过http://localhost:8080访问Web应用。
示例2:使用Docker-compose进行单元测试
假设有一个Python应用程序需要进行单元测试,使用Docker-compose可以方便地搭建测试环境。
- 创建一个工作目录,并创建
docker-compose.yml
文件。
$ mkdir testapp
$ cd testapp
$ touch docker-compose.yml
- 编辑
docker-compose.yml
文件。
在docker-compose.yml文件中定义需要启动的容器,包括应用程序容器和测试容器。容器之间使用同一个网络,测试容器可以访问应用程序容器中的服务。
version: '3'
services:
app:
build: .
command: python app.py
expose:
- 5000
test:
build:
context: .
dockerfile: Dockerfile.test
depends_on:
- app
networks:
default:
name: testapp_default
- 创建一个应用程序文件和测试文件
在工作目录中创建名为app.py
和test_app.py
的文件,内容如下:
# app.py
from flask import Flask
app = Flask(__name__)
@app.route('/')
def hello():
return "Hello World!"
if __name__ == "__main__":
app.run(host="0.0.0.0")
# test_app.py
import unittest
import requests
class TestApp(unittest.TestCase):
url = "http://app:5000"
def test_hello(self):
res = requests.get(self.url + '/')
self.assertEqual(res.status_code, 200)
self.assertEqual(res.text, "Hello World!")
if __name__ == '__main__':
unittest.main()
- 创建一个测试用的Dockerfile
在工作目录中创建一个名为Dockerfile.test
的文件,内容如下:
FROM python:3.7
COPY . /app
WORKDIR /app
RUN pip install -r requirements.txt
RUN python -m unittest test_app.py
- 启动测试
使用如下命令启动测试:
$ docker-compose up --abort-on-container-exit --exit-code-from test
当测试完成后,docker-compose
会自动停止所有容器。如果测试失败,docker-compose
会返回一个非零的退出码。
总结
本文介绍了Docker-compose的一些常用命令,以及使用Docker-compose构建和管理多个Docker容器的两个示例。Docker-compose可以帮助用户方便地构建和管理Docker容器,提高开发和构建效率。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:docker-compose简单使用方法详解 - Python技术站