学习资料:
- 【狂神说Java】Docker最新超详细版教程通俗易懂
- DataWhale Docker开源教程
文章目录- 10.Docker Compose
- 查看服务状态
- 停止或删除服务
- 查看服务输出日志
用户通过一个单独的 docker-compose.yml模板文件(YAML 格式)来定义一组相关联的应用容器为一个项目(project)。
安装docker compose:
# 使用镜像加速下载
$sudo curl -L "https://get.daocloud.io/docker/compose/releases/download/1.25.1/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
$cd /usr/local/bin/
$l
total 17M
drwxr-xr-x 2 root root 4.0K Apr 20 20:40 .
drwxr-xr-x 10 root root 4.0K Feb 20 07:48 ..
-rw-r--r-- 1 root root 17M Apr 20 20:40 docker-compose
$sudo chmod +x docker-compose
$docker-compose version
docker-compose version 1.25.1, build a82fef07
docker-py version: 4.1.0
CPython version: 3.7.4
OpenSSL version: OpenSSL 1.1.0l 10 Sep 2019
#getting start
# 配置依赖
$cd /home/hongsen/data
$mkdir composetest
$cd composetest
# 通过Python来写一个能够记录页面访问次数的 web 网站
$vi 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)
$vi requirements.txt
flask
redis
# Dockerfile将应用打包为镜像
$vi Dockerfile
FROM python:3.6-alpine
ADD . /code
WORKDIR /code
RUN pip install flask redis
CMD ["python", "app.py"]
# 定义services需要的环境(web、redis)
$vi docker-compose.yml
version: "3.5"
services:
web:
build: .
ports:
- "5000:5000"
volumes:
- .:/code
redis:
image: "redis:apline"
$l
total 24K
drwxrwxr-x 2 hongsen hongsen 4.0K Apr 20 20:55 .
drwxrwxr-x 8 hongsen hongsen 4.0K Apr 20 20:46 ..
-rw-rw-r-- 1 hongsen hongsen 251 Apr 20 20:52 Dockerfile
-rw-rw-r-- 1 hongsen hongsen 513 Apr 20 20:48 app.py
-rw-rw-r-- 1 hongsen hongsen 110 Apr 20 20:55 docker-compose.yml
-rw-rw-r-- 1 hongsen hongsen 11 Apr 20 20:50 requirements.txt
# 启动 compose项目
# 报错,网络原因?即便配置了pip镜像,仍然有安装问题?
$docker-compose up
Building web
Step 1/5 : FROM python:3.6-alpine
---> 68fbe3f5d554
Step 2/5 : ADD . /code
---> eb01cd62f9e3
Step 3/5 : WORKDIR /code
---> Running in a27b7183c44f
Removing intermediate container a27b7183c44f
---> 7f7417680e21
Step 4/5 : RUN pip install flask redis -i http://pypi.douban.com/simple --trusted-host pypi.douban.com
---> Running in c2ce895de207
Looking in indexes: http://pypi.douban.com/simple
WARNING: Retrying (Retry(total=4, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError(': Failed to establish a new connection: [Errno -3] Try again',)': /simple/flask/
WARNING: Retrying (Retry(total=3, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError(': Failed to establish a new connection: [Errno -3] Try again',)': /simple/flask/
^CGracefully stopping... (press Ctrl+C again to force)
# 解决方法:
www.freesion.com/article/3390655079/
配置DNS
$docker-compose build redis uses an image, skipping Building web Step 1/5 : FROM python:3.6 ---> 9f98e1be91a4 Step 2/5 : ADD . /code ---> Using cache ---> 90dd1a18eb07 Step 3/5 : WORKDIR /code ---> Using cache ---> 2a681fd67249 Step 4/5 : RUN pip install flask redis ---> Using cache ---> ed12532f81d4 Step 5/5 : CMD ["python", "app.py"] ---> Using cache ---> bdba81fef8fc Successfully built bdba81fef8fc Successfully tagged composetest_web:latest # 还是挂了? $docker-compose up # 只开启了一个composetest_redis_1项目?缺少一个 composetest_web_1项目 $docker ps ConTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES cc784469864c redis "docker-entrypoint.s…" about a minute ago Up 24 seconds 6379/tcp composetest_redis_1
在创建好docker-compose.yml文件后,可以通过docker-compose up这个命令将文件中定义的容器都启动起来,在docker compose中我们更习惯于将每一个容器叫做service。
命令后会自动接一个默认值-f docker-compose.yml,也就是默认是使用docker-compose.yml文件的。我们也可以给文件起名为docke-test.yml,这样在使用时指定文件名,但是为了符合规范,还是统一为docker-compose.yml。
接下来可以查看一下我们创建的service状态
$docker-compose ps
要是想要查看所有service的状态可以使用-a参数:
$docker-compose ps -a停止或删除服务
如何停止已经运行的services呢,可以使用以下两个命令
docker-compose stop docker-compose down
其中stop是直接停止services,而down则会停止并删除创建的service,volume和network。
查看服务输出日志有些情况下一些服务可能无法正常启动,这时可以使用命令查看日志并定位发生错误的原因
docker-compose logs



