Task05:Docker-Compose

学习资料:

  1. 【狂神说Java】Docker最新超详细版教程通俗易懂
  2. 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('<pip._vendor.urllib3.connection.HTTPConnection object at 0x7f8ef5a6ce80>: 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('<pip._vendor.urllib3.connection.HTTPConnection object at 0x7f8ef583d390>: 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
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值