Docker学习笔记6

一、Docker Compose

1.1 概念

Compose is a tool for defining and running multi-container Docker applications. With Compose, you use a YAML file to configure your application’s services. Then, with a single command, you create and start all the services from your configuration. To learn more about all the features of Compose, see the list of features.

Compose works in all environments: production, staging, development, testing, as well as CI workflows. You can learn more about each case in Common Use Cases.

Using Compose is basically a three-step process:

Define your app’s environment with a Dockerfile so it can be reproduced anywhere.

Define the services that make up your app in docker-compose.yml so they can be run together in an isolated environment.

Run docker compose up and the Docker compose command starts and runs your entire app. You can alternatively run docker-compose up using the docker-compose binary.
  • Compose用来定义、运行多个容器。用作批量容器编排。
  • Docker Compose需要安装

A docker-compose.yml looks like this:

version: "3.9"  # optional since v1.27.0
services:
  web:
    build: .
    ports:
      - "8000:5000"
    volumes:
      - .:/code
      - logvolume01:/var/log
    links:
      - redis
  redis:
    image: redis
volumes:
  logvolume01: {}

二、Compose安装

下载

curl -L https://get.daocloud.io/docker/compose/releases/download/v2.5.0/docker-compose-`uname -s`-`uname -m` > /usr/local/bin/docker-compose

授权

chmod +x /usr/local/bin/docker-compose

验证

docker-compose version

三、Compose测试

3.1 制作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)


3.2 制作requirements.txt文件

flask
redis

3.3 制作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"]

3.3 制作docker-compose.yml文件

version: "3.9"
services:
  web:
    build: .
    ports:
      - "8000:5000"
  redis:
    image: "redis:alpine"

3.4 启动

docker-compose up

在这里插入图片描述

docker ps
CONTAINER ID   IMAGE             COMMAND                  CREATED          STATUS          PORTS                                       NAMES
e8d8c166ddfc   composetest_web   "flask run"              16 minutes ago   Up 16 minutes   0.0.0.0:8000->5000/tcp, :::8000->5000/tcp   composetest-web-1
f8b0cbdeaf68   redis:alpine      "docker-entrypoint.s…"   16 minutes ago   Up 16 minutes   6379/tcp                                    composetest-redis-1

访问

[root@zhouhao composetest]# curl localhost:8000
Hello World! I have been seen 1 times.

3.5 检查

查看镜像

docker images
REPOSITORY        TAG          IMAGE ID       CREATED          SIZE
composetest_web   latest       1f6cdfc46825   23 minutes ago   185MB

查看网络

docker network ls
NETWORK ID     NAME                  DRIVER    SCOPE
82beec14f573   bridge                bridge    local
066d5c0385f0   composetest_default   bridge    local

查看容器网络

docker network inspect composetest_default

在这里插入图片描述

3.6 停止容器

docker-compose down

或者ctrl+c

4 Compose配置规则

4.1 docker-compose.yaml

version: "" #版本
services: #服务
	服务1:web
		#服务配置
		images
		build
		network
		...
	服务2:redis
		...
	服务3:redis
#其它配置 网络/卷挂载 全局规则
volumes:
networks:
configs:

4.2 depends_on

在这里插入图片描述

4.3 deploy

在这里插入图片描述

5 Compose部署wordpress

官方网址:https://docs.docker.com/samples/wordpress/

5.1 创建docker-compose.yml文件

version: "3.9"
    
services:
  db:
    image: mysql:5.7
    volumes:
      - db_data:/var/lib/mysql
    restart: always
    environment:
      MYSQL_ROOT_PASSWORD: somewordpress
      MYSQL_DATABASE: wordpress
      MYSQL_USER: wordpress
      MYSQL_PASSWORD: wordpress
    
  wordpress:
    depends_on:
      - db
    image: wordpress:latest
    volumes:
      - wordpress_data:/var/www/html
    ports:
      - "8000:80"
    restart: always
    environment:
      WORDPRESS_DB_HOST: db
      WORDPRESS_DB_USER: wordpress
      WORDPRESS_DB_PASSWORD: wordpress
      WORDPRESS_DB_NAME: wordpress
volumes:
  db_data: {}
  wordpress_data: {}

5.2 启动

docker-compose up

查看启动的容器

 docker ps
CONTAINER ID   IMAGE              COMMAND                  CREATED          STATUS          PORTS                                       NAMES
509cb320cbad   wordpress:latest   "docker-entrypoint.s…"   52 seconds ago   Up 50 seconds   0.0.0.0:8000->80/tcp, :::8000->80/tcp       wordpress-wordpress-1
b4be5fefd510   mysql:5.7          "docker-entrypoint.s…"   53 seconds ago   Up 52 seconds   3306/tcp, 33060/tcp                         wordpress-db-1

访问测试

在这里插入图片描述

5.3 后台启动

docker-compose up -d

停止容器

docker-compose down
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值