Compose介绍以及如何安装使用

 

 

一,介绍

  • 前面我们使用 Docker 的时候,定义 Dockerfile 文件,然后使用 docker build、docker run 等命令操作容器。然而微服务架构的应用系统一般包含若干个微服务,每个微服务一般都会部署多个实例,如果每个微服务都要手动启停,那么效率之低,维护量之大可想而知
  • 使用 Docker Compose 可以轻松、高效的管理容器,它是一个用于定义和运行多容器 Docker 的应用程序工具


 

 

 

 
理解:
Compose是Docker官方的开源项目,需要安装!
通过Dockerfile让程序运行在任何地方
 
 

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重要概念:
 
 (1)服务services,就是容器,应用 (web、redis 、mysql……)
 (2)项目project,就是一组关联的容器,如博客,有web和mysql
 
 
 
 
 
 
二,安装
 
1、下载
 

官方文档(这个有点慢)
sudo curl -L "https://github.com/docker/compose/releases/download/1.29.2/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose


推荐使用这个:
curl -L https://get.daocloud.io/docker/compose/releases/download/1.26.2/docker-compose-`uname -s`-`uname -m` > /usr/local/bin/docker-compose

 

 

 

 
2、授权
 
 sudo chmod +x /usr/local/bin/docker-compose
 
可以看到版本就说明安装成功!

 

 

 

 
 
三,体验
 
1、Get started
 
官网地址:https://docs.docker.com/compose/gettingstarted/
 

Step 1: Setup

(1)Create a directory for the project:

 
 mkdir composetest
 cd composetest
 
(2)Create a file called app.py in your project directory and paste this in:
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)Create another file called requirements.txt in your project directory and paste this in:
 
flask
redis
 
 

Step 2: Create a Dockerfile🔗

In your project directory, create a file named Dockerfile and paste the following:

# syntax=docker/dockerfile:1
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"]
 

Step 3: Define services in a Compose file

Create a file called docker-compose.yml in your project directory and paste the following:

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

This Compose file defines two services: web and redis.

 
 

Step 4: Build and run your app with Compose

(1)From your project directory, start up your application by running docker-compose up.

 
 
 
(1)写了一个应用 app.py
(2)写了一个Dockerfile,将应用打包为镜像
(3)写了一个Docker-Compose yaml文件(定义整个服务需要的环境,如web redis)
(4)启动compose项目(使用docker-compose up),完整的上线服务
 
 
流程:
(1)创建 网络
(2)执行Docker-compose yaml
(3)启动服务
 
 
 

 

 

 

出现以上页面说明启动成功!!!

 
 
我们可以看下镜像,发现该有的就有!
 

 

 


 

 

 

 

 

这个是默认的服务名 文件名_服务名_num

当我们有多个服务器时,搞集群,就需要num来区分。

如一个redis服务,可能有多个副本

一个集群,不可能有多个运行示例,弹性要强!

 

 
 
2、网络规则
 

 

 

假如有10个服务,都在一个项目中,项目中的内容都在同一个网络下,通过域名访问!

 

我们查看一个这个网络,发现web和redis都在里面了!

docker network inspect composetest_default

 

 

 

 

3、停止

 

docker-compose down(在yaml文件下停止) 或者Ctrl+C

 

 

 

 

 

4、小结

 

我们以前都是通过docker run 单个启动容器,现在通过docker-compose编写yaml文件,通过compose一键启动或者停止所有服务!

 

posted @   屯子里唯一的架构师  阅读(648)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· C#/.NET/.NET Core优秀项目和框架2025年2月简报
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 【杭电多校比赛记录】2025“钉耙编程”中国大学生算法设计春季联赛(1)
点击右上角即可分享
微信分享提示