Docker学习笔记——Docker Compose

概述

Docker Compose可以轻松高效地定义、运行、管理多个容器。Compose通过yaml文件来配置应用程序服务。然后使用一些命令来启动Compose。

使用Compose有三个步骤

  • 使用Dockfile来定义应用的运行环境
  • 使用docker-compose.yml 定义组成应用的各服务
  • docker-compose up 启动整个应用

Compose是Docker官方的开源项目,需要安装。Dockerfile让容器在任何地方运行,但如果要运行多个容器就十分麻烦,这就需要使用docker-compose.yml文件。一个 docker-compose.yml 类似下面所示

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

两个概念

  • services(服务):容器、应用(mysql、nginx…)
  • project(项目):一组关联的容器

安装Compose

下载Compose

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

授权

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

Compose的使用

部署Python+Redis

创建project文件夹

mkdir compose-test
cd compose-test/

创建PythonWeb应用文件

#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)

创建依赖清单

#requirements.txt
flask
redis

编写Dockerfile

FROM python:3.7-alpine
RUN echo -e http://mirrors.ustc.edu.cn/alpine/v3.12/main/ > /etc/apk/repositories
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 -i https://pypi.tuna.tsinghua.edu.cn/simple --no-cache-dir -r requirements.txt
EXPOSE 5000
COPY . .
CMD ["flask", "run"]

编写Compose文件

#docker-compose.yml
version: "3"
services:
  web:
    build: .
    ports:
      - "5000:5000"
  redis:
    image: "redis:alpine"

启动Docker-Compose

docker-compose up [-d 后台运行]

#查看正在运行的compose
docker-compose ps

#使用后台模式时停止
docker-compose stop

可以看到程序正常启动

执行流程

  • 创建网络
  • 执行docker-compose.yml
  • 启动服务service(服务名为:文件名_服务名_num)

网络规则

docker network ls

NETWORK ID     NAME                   DRIVER    SCOPE
443a88c2886f   bridge                 bridge    local
34b078d70766   compose-test_default   bridge    local
d7d5810dcb43   host                   host      local
31d5effd27a3   mynet                  bridge    local
53fb3ec12878   none                   null      local

docker network inspect compose-test_default

...
"Containers": {
            "aa956d407d920e6ec0293a5abbceda37bef4934c39f19684bb62558f71672afd": {
                "Name": "compose-test_web_1",
                "EndpointID": "557a95231df9e1b75018491674b3f81ec49501d17a0e748e8c64743c1d72ba70",
                "MacAddress": "02:42:ac:12:00:03",
                "IPv4Address": "172.18.0.3/16",
                "IPv6Address": ""
            },
            "ab784d217fd269d7b3e7c4810bd4d5866a5b9dbd658eb57273434c23a33993ea": {
                "Name": "compose-test_redis_1",
                "EndpointID": "067c633c2d6190477ee611ce518c1d47f9fbbf4b4aa4bd0b046fec61457dfe6a",
                "MacAddress": "02:42:ac:12:00:02",
                "IPv4Address": "172.18.0.2/16",
                "IPv6Address": ""
            }
        }
...

可以看到项目的内容都在同一个网络compose-test_default

停止Compose

docker-compose down 或者 Ctrl+C

Docker compose常用命令

up	         启动容器,终端运行
images	     列出镜像
down	     停止和删除容器、网络、卷、镜像
start	     启动项目中容器,后台运行
logs	     查看项目中容器日志
stop	     停止项目中容器
restart	     重启项目中容器
ps           查看启动的容器

#选项如下
-f file      指定Compose模板文件,默认为docker-compose.yml,可以多次指定
-p project   指定项目名称,默认将使用所在目录名称作为项目名
-d	         后台运行容器

YAML规则

docker-compose.yml可以分为三层

#三层

version:'' #版本

services: #服务
    服务1:
       #服务配置

    服务2:

    服务3:

#其他配置 网络、卷、全局规则

具体配置可以参考 Compose file version 3 reference

依赖

services字段使用depends_on字段来定义依赖。容器之间如果有相互依赖关系,定义了依赖之后,docker就会先启动依赖。

使用Compose搭建Wordpress

创建Project

#创建Project文件夹
root@ubuntu:~# mkdir my_wordpress
root@ubuntu:~# cd my_wordpress/

#编写docker-compose.yml
version: "3.8" #版本
    
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: {}

启动Compose

docker-compose up

启动成功

小结

利用Docker-Compose可以一键部署多个容器,并且只需要一个编写完善的yaml文件。如果在本地没有所需服务的镜像,会自动从远程下载所需镜像,此后部署服务速度会更快。

暂无评论

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇
下一篇