Docker基本知识笔记(五)--DockerCompose

目录

一、简介

二、安装

三、简答例子

四、YAML文件简单规则


一、简介

运行容器 docker run -d 镜像

基于docerfile文件云心 docker build -f dockerfile文件路径 -t 容器名字 .

若需要运行多个容器,一个一个启动,操作麻烦。因此引入DockerCompose,进行管理多个容器启动。通过 docker-compose 编写 yaml配置文件、可以通过 compose 一键启动所有服 务,停止。!

操作Docker Compose三步骤

1.使用 dockerfile 定义应用程序的所需内容。

2.使用 docker-compose.yml 定义构成应用程序的服务,保证可以在隔离环境中一起运行。

3.使用 docker-compose up 命令,启动并运行整个应用程序。

二、安装

# 下载
➜  ~ sudo curl -L https://get.daocloud.io/docker/compose/releases/download/1.25.5/dockercompose-`uname -s`-`uname -m` > /usr/local/bin/docker-compose

# 添加运行权限
➜  ~ sudo chmod +x /usr/local/bin/docker-compose

三、简答例子

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)

2.dockerfile文件

FROM python:3.6-alpine
ADD . /code
WORKDIR /code
RUN pip install -r requirements.txt
CMD ["flask", "run"]

3.requirements.txt文件

flask
redis

4.docker-compose.yaml文件

version: '3.3'
services:
  web:
    build: .
    ports:
      - "5000:5000"
    volumes:
      - .:/code
  redis:
    image: "redis:alpine"

5.docker-compose up 启动 

 其中启动服务的命名规则----》文件夹_服务名_num(启动服务的个数)

6.查看一下是否有配置network

# 查看运行
➜  ~ docker ps
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS                    NAMES
5f23dbb8dfc5        composetest_web     "flask run"              23 seconds ago      Up 22 seconds       0.0.0.0:5000->5000/tcp   composetest_web_1
a432fab80dc3        redis:alpine        "docker-entrypoint.s…"   10 minutes ago      Up 22 seconds       6379/tcp                 composetest_redis_1

#查看网络
➜  ~ docker network ls
NETWORK ID          NAME                                 DRIVER              SCOPE
b2de486c0a96        bridge                               bridge              local
5a511e60b5ac        composetest_default                  bridge              local
4b6ca6c1af1f        docker_standalone-fate-130_default   bridge              local
75c6b565c73c        host                                 host                local
9329391ab863        mynet                                bridge              local
0196d25ee724        none                                 null                local

# 内部查看详细
➜  ~ docker network inspect 5a511e60b5ac
[
    {
        "Name": "composetest_default",
        "Id": "5a511e60b5ace3984851007d73b04b2c6be795aea5df74cb09c518f93fe5e557",
        "Created": "2022-04-14T13:36:51.985458301+08:00",
        "Scope": "local",
        "Driver": "bridge",
        "EnableIPv6": false,
        "IPAM": {
            "Driver": "default",
            "Options": null,
            "Config": [
                {
                    "Subnet": "172.19.0.0/16",
                    "Gateway": "172.19.0.1"
                }
            ]
        },
        "Internal": false,
        "Attachable": true,
        "Ingress": false,
        "ConfigFrom": {
            "Network": ""
        },
        "ConfigOnly": false,
        "Containers": {
            "5f23dbb8dfc5ab38883621811b595f2963b35f454f5ba16b442fcd5d94c0e9fc": {
                "Name": "composetest_web_1",
                "EndpointID": "d21e5aab735acc27b456fd878659067519f6453db4d8407e4254abd9dcb47f68",
                "MacAddress": "02:42:ac:13:00:03",
                "IPv4Address": "172.19.0.3/16",
                "IPv6Address": ""
            },
            "a432fab80dc36c3606605aa2e8ea1e30262fc04aec709ce348261fe323c9e479": {
                "Name": "composetest_redis_1",
                "EndpointID": "25372bb5d7eb7280a1a8d6aa697390a2f63da2e03df4f39f1f9063df36e448c2",
                "MacAddress": "02:42:ac:13:00:02",
                "IPv4Address": "172.19.0.2/16",
                "IPv6Address": ""
            }
        },
        "Options": {},
        "Labels": {
            "com.docker.compose.network": "default",
            "com.docker.compose.project": "composetest",
            "com.docker.compose.version": "1.25.5"
        }
    }
]

# ping通
➜  ~ docker exec -it composetest_web_1 ping composetest_redis_1                
PING composetest_redis_1 (172.19.0.2): 56 data bytes
64 bytes from 172.19.0.2: seq=0 ttl=64 time=0.110 ms
64 bytes from 172.19.0.2: seq=1 ttl=64 time=0.079 ms
64 bytes from 172.19.0.2: seq=2 ttl=64 time=0.077 ms
64 bytes from 172.19.0.2: seq=3 ttl=64 time=0.082 ms
^Z64 bytes from 172.19.0.2: seq=4 ttl=64 time=0.080 ms
^C
--- composetest_redis_1 ping statistics ---
5 packets transmitted, 5 packets received, 0% packet loss
round-trip min/avg/max = 0.077/0.085/0.110 ms

四、YAML文件简单规则

官网: Compose file version 3 reference | Docker Documentation

主要架构核心是三层

# 版本
version: ''

# 服务
services: 
    服务1: web
    # 服务配置
        images
        build
        network
        depends_on
        deploy
        ......
    服务2: redis


# 其他配置 网络/卷、全局规则
volumes:
networks:
configs:

猜你喜欢

转载自blog.csdn.net/qq_38295645/article/details/124169584