OddFar's Notes OddFar's Notes
首页
  • Java-Se

    • Java基础
    • Java面向对象
    • Java常用类
    • Java集合框架
  • Java-Se进阶

    • JUC多线程
  • Java-ee

    • JavaWeb
  • SQL 数据库

    • MySQL
  • NoSQL 数据库

    • Redis
    • ElasticSearch
    • MongoDB
  • 数据库

    • MyBatis
    • MyBatis-Plus
  • Spring

    • Spring
  • 中间件

    • RabbitMQ
  • Git
  • Docker
  • Jenkins
爬虫
  • Campus (opens new window)
  • 校园信息墙 (opens new window)
关于
归档
GitHub (opens new window)
首页
  • Java-Se

    • Java基础
    • Java面向对象
    • Java常用类
    • Java集合框架
  • Java-Se进阶

    • JUC多线程
  • Java-ee

    • JavaWeb
  • SQL 数据库

    • MySQL
  • NoSQL 数据库

    • Redis
    • ElasticSearch
    • MongoDB
  • 数据库

    • MyBatis
    • MyBatis-Plus
  • Spring

    • Spring
  • 中间件

    • RabbitMQ
  • Git
  • Docker
  • Jenkins
爬虫
  • Campus (opens new window)
  • 校园信息墙 (opens new window)
关于
归档
GitHub (opens new window)
  • Git

  • Docker

    • Docker - 知识体系
    • Docker - 概述
    • Docker - 安装
    • Docker - 常用命令
    • Docker - 可视化
    • Docker - 镜像和仓库
    • Docker - 数据卷
    • Docker - DockerFile
    • Docker - 网络
    • Docker - Compose
      • 简介
      • 安装
      • 简单上手
      • yaml 规则
      • java测试发布
  • Jenkins

  • 工具部署
  • Docker
zhiyuan
2021-06-17
目录

Docker - Compose

  • 简介
  • 安装
  • 简单上手
  • yaml 规则
  • java测试发布

# 简介

官方介绍

https://docs.docker.com/compose/ (opens new window)

Compose 是一个用于定义和运行多容器 Docker 应用程序的工具。借助 Compose,您可以使用 YAML 文件来配置应用程序的服务。然后,使用单个命令,从配置中创建并启动所有服务。要了解有关 Compose 的所有功能的更多信息,请参阅功能列表 (opens new window)。

Compose 适用于所有环境:生产、登台、开发、测试以及 CI 工作流。您可以在Common Use Cases 中 (opens new window)了解有关每个案例的更多信息。

使用 Compose 基本上是一个三步过程:

  1. 使用 定义您的应用程序的环境,Dockerfile以便它可以在任何地方复制。
  2. 定义组成您的应用程序的服务,docker-compose.yml 以便它们可以在隔离的环境中一起运行。
  3. 运行 docker compose up 和 Docker compose command (opens new window) 启动并运行你的整个应用程序。您也可以docker-compose up使用 docker-compose 二进制文件运行。

可以用 Docker Compose 来轻松高效的管理容器。定义运行多个容器。

一个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: {}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15

# 安装

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
1

加速下载:https://gitmirror.com/ (opens new window)

sudo curl -L "https://hub.gitmirror.com/https://github.com/docker/compose/releases/download/1.29.2/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
1

2、授权

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

# 简单上手

官方文档

https://docs.docker.com/compose/gettingstarted/ (opens new window)

构建一个在 Docker Compose 上运行的简单 Python Web 应用程序。该应用程序使用 Flask 框架并在 Redis 中维护一个命中计数器。

第1 步:设置

  1. 为项目创建一个目录:

    mkdir composetest
    cd composetest
    
    1
    2
  2. 创建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)
    
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
  3. 在项目目录中创建 requirements.txt

flask
redis
1
2

第 2 步:创建 Dockerfile

项目目录中,创建 Dockerfile

# 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"]
1
2
3
4
5
6
7
8
9
10
11

第 3 步:在 Compose 文件中定义服务

项目目录中创建 docker-compose.yml

version: "3.9"
services:
  web:
    build: .
    ports:
      - "5000:5000"
  redis:
    image: "redis:alpine"
1
2
3
4
5
6
7
8

第 4 步:使用 Compose 构建并运行您的应用程序

在项目目录中运行 docker-compose up

[root@VM-0-6-centos composetest]# docker-compose up
1

如果要后台运行

 docker-compose up -d
1

测试:

[root@VM-0-6-centos ~]# curl localhost:5000
Hello World! I have been seen 1 times.
[root@VM-0-6-centos ~]# curl localhost:5000
Hello World! I have been seen 2 times.
[root@VM-0-6-centos ~]# curl localhost:5000
Hello World! I have been seen 3 times.
1
2
3
4
5
6
  • 名字规则

image-20210617192246516

默认的服务名:文件名_服务名 _ num

  • 可以看见多了个网络
[root@VM-0-6-centos ~]# docker network ls
NETWORK ID     NAME                  DRIVER    SCOPE
4b873066daf7   bridge                bridge    local
d87efab51b47   composetest_default   bridge    local
86da632adad6   elastic               bridge    local
64b606f257e7   host                  host      local
34ab4fdb73c0   none                  null      local
1
2
3
4
5
6
7

项目中的内容都在同个网络下。

其他为演示 Compose 量身定制的示例

这些示例专门针对 Docker Compose:

  • 快速入门:Compose 和 Django (opens new window) - 展示了如何使用 Docker Compose 来设置和运行一个简单的 Django/PostgreSQL 应用程序。
  • 快速入门:Compose 和 Rails (opens new window) - 展示了如何使用 Docker Compose 来设置和运行 Rails/PostgreSQL 应用程序。
  • 快速入门:Compose 和 WordPress (opens new window) - 展示了如何使用 Docker Compose 在具有 Docker 容器的隔离环境中设置和运行 WordPress。

# yaml 规则

官方文档

https://docs.docker.com/compose/compose-file/ (opens new window)

# 3层!
version: '' # 版本
services: # 服务
    服务1: web
    # 服务配置
    images
    build
    network
    
    服务2: redis
    ....
    服务3: redis
    ....

# 其他配置 网络/卷、全局规则
volumes:
networks:
configs:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18

# java测试发布

以上实例是用 python 写的,我们写一个 java 版本的测试下

image-20210617234848816

1、编写java代码

创建一个 springboot demo

@RestController
public class HelloController {

    @Autowired
    StringRedisTemplate redisTemplate;

    @GetMapping("/hello")
    public String hello(){
        Long views = redisTemplate.opsForValue().increment("views");
        return "hello world! views:"+ views;
    }

}
1
2
3
4
5
6
7
8
9
10
11
12
13

2、添加配置

  • 编写 application.properties 文件
server.port=8080
spring.redis.host=redis
1
2
  • 编写 Docker 文件
FROM java:8

COPY *.jar /app.jar

CMD ["--server.port=8080"]

EXPOSE 8080

ENTRYPOINT ["java","-jar","/app.jar"]
1
2
3
4
5
6
7
8
9
  • 编写 docker-compose.yml 文件
version: "3.9"
services:
  zhiyuanapp:
    build: .
    image: zhiyuanapp
    depends_on:
      - redis
    ports:
      - "8080:8080"

  redis:
    image: "library/redis:alpine"
1
2
3
4
5
6
7
8
9
10
11
12

3、上传并构建

把 jar包 、Docker、docker-compose 三个文件上传到一个目录下

并在此目录下构建:

[root@VM-0-6-centos zhiyuanapp]# docker-compose up
1

4、测试:

[root@VM-0-6-centos ~]# curl localhost:8080/hello
hello world! views:1
[root@VM-0-6-centos ~]# curl localhost:8080/hello
hello world! views:2
[root@VM-0-6-centos ~]# curl localhost:8080/hello
hello world! views:3
1
2
3
4
5
6
在 GitHub 上编辑此页 (opens new window)
最后更新: 2023/12/24, 7:12:00
Docker - 网络
Jenkins - 知识体系

← Docker - 网络 Jenkins - 知识体系→

Theme by Vdoing | Copyright © 2021-2025 oddfar | 冀ICP备20001094号
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式