走进docker-compose
什么是Docker-Compose?
Docker-Compose 是用于定义和运行多容器 Docker 应用程序的工具。通过 Compose,您可以使用 YML 文件来配置应用程序需要的所有服务。然后,使用一个命令,就可以从 YML 文件配置中创建并启动所有服务。比如我们发布一个系统可能包含多个服务,服务与服务之间网络需要互通,那此时我们需要一个容器一个容器去启动,如果使用Docker-Compose即可定义一个描述文件docker-compose.yaml完成所有服务的发布, 并且实现容器间互通(单台物理机)。
Docker-Compose安装
-
参考上篇文章安装Docker环境 -
安装Docker-Compose #下载二进制
sudo curl -L https://github.com/docker/compose/releases/download/1.21.2/docker-compose-$(uname -s)-$(uname -m) -o /usr/local/bin/docker-compose
#修改执行权限
sudo chmod +x /usr/local/bin/docker-compose -
命令安装
-
下载可执行文件安装
新建目录Compose可执行二进制文件下载
#下载二进制
mv docker-compose /usr/local/bin/docker-compose
#修改执行权限
sudo chmod +x /usr/local/bin/docker-compose
Docker-Compose命令
官网demo:
version: '3'
services:
back:
image: backService:1.0
container_name: back
environment:
- name=tom
- DB_PATH=jdbc:sqlite:/data/ns.db
restart: always
privileged: true
ports:
- "9000:9000"
networks:
- "net"
volumes:
- "/root/k3s.kube.config:/k3s.kube.config"
- "/root/data:/data"
- "/etc/network/interfaces:/etc/network/interfaces"
front:
image: front:1.0
container_name: front
restart: always
ports:
- "10087:80"
networks:
- "net"
volumes:
- "/root/nginx.conf:/etc/nginx/nginx.conf"
networks:
net:
-
version -
v3 版本不支持 volume_from 和 extends 属性 -
cpu 和 内存属性的设置移到了 deploy 中 -
v3 版本直接支持 docker swarm,而 v2 版本不支持,这也是最主要的区别 如果是初学者,建议直接使用 v3。 -
services多个服务 -
driver 配置驱动 -
options 可选配置 -
image 镜像名称 -
build 不使用镜像时候采用主动build镜像 -
environment 环境变量 -
expose 标示端口号 -
ports 映射端口号到宿主机 -
volumes 挂在目录到宿主机 -
depend_on 规定service加载顺序,例如数据库服务需要在后台服务前运行 -
container_name 容器名称 -
networks 网络(自定义网络名称) -
restart always每次docker启动时候重启 -
links 连接目标容器(services下配置的名称) -
privileged: true:容器可获得root权限 -
logging 日志选项 -
networks配置自定义网络
Docker-Compose实战
-
为项目创建目录:
mkdir composetest
cd composetest
-
app.py在项目目录中创建一个名为的文件,并将其粘贴到:
import time
import redis
from flask import Flask
app = Flask(__name__)
cache = redis.Redis(host='redis', port=6379)
def get_hit_count():
retries = 5
while True:
try:
return cache.incr('hits')
except redis.exceptions.ConnectionError as exc:
if retries == 0:
raise exc
retries -= 1
time.sleep(0.5)
@app.route('/')
def hello():
count = get_hit_count()
return 'Hello World! I have been seen {} times.n'.format(count)
在此示例中,redis是应用程序网络上的redis容器的主机名。我们为Redis使用默认端口6379。3. requirements.txt在项目目录中创建另一个名为的文件,并将其粘贴到:
flask
redis
-
编写Dockerfile
FROM python:3.7-alpine
WORKDIR /code
ENV FLASK_APP=app.py
ENV FLASK_RUN_HOST=0.0.0.0
RUN apk add --no-cache gcc musl-dev linux-headers
COPY requirements.txt requirements.txt
RUN pip install -r requirements.txt
EXPOSE 5000
COPY . .
CMD ["flask", "run"]
有关如何编写Dockerfile的更多信息,请查看上篇文章
-
编写docker-compose.yml文件
version: "3"
services:
web:
build: .
ports:
- "5000:5000"
redis:
image: "redis:alpine"
该Compose文件定义了两个服务:web和redis。
-
运行服务
docker-compose up
在浏览器中输入http://localhost:5000/以查看该应用程序正在运行。
下篇带大家详细介绍Docker-Machine,敬请期待!
欢迎关注公众号!
公众号回复:
入群
,扫码加入我们交流群!
原文始发于微信公众号(coding途中):走进docker-compose