狂神说学习笔记:Docker进阶-Docker Compose

1|0Docker Compose

https://docs.docker.com/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:

  1. Define your app’s environment with a Dockerfile so it can be reproduced anywhere.
  2. Define the services that make up your app in docker-compose.yml so they can be run together in an isolated environment.
  3. 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,您可以使用 YAML 文件来配置应用程序的服务。然后,使用单个命令,从配置中创建并启动所有服务。

Compose 适用于所有环境:生产、登台、开发、测试以及 CI 工作流。

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

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

作用:批量容器编排

Compose 是Docker官方的开源项目。需要安装!

Dockerfile 让程序在任何地方运行。

一个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安装

1、下载

sudo curl -SL https://github.com/docker/compose/releases/download/v2.12.2/docker-compose-linux-x86_64 -o /usr/local/bin/docker-compose # 这个可能快点 sudo curl -L https://get.daocloud.io/docker/compose/releases/download/2.12.2/docker-compose-`uname -s`-`uname -m` > /usr/local/bin/docker-compose

image-20221027091215098

2、授权

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

image-20221027102606860

1|3体验

地址:https://docs.docker.com/compose/gettingstarted/

1、应用 app.py

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

    $ mkdir composetest && cd composetest
  2. 创建一个 app.py 文件 并写入:

    vim 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. 创建 requirements.txt 文件并写入

    flask redis

2、Dockerfile 应用打包为镜像

  1. 创建 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"]

这告诉 Docker:

  • 从 Python 3.7 映像开始构建映像。
  • 将工作目录设置为/code.
  • 设置flask命令使用的环境变量。
  • 安装 gcc 和其他依赖项
  • 复制requirements.txt并安装 Python 依赖项。
  • 将元数据添加到图像以描述容器正在侦听端口 5000
  • .项目中的当前目录复制到.镜像中的workdir 。
  • 将容器的默认命令设置为flask run.

3、创建 docker-compose.yml 文件 (定义整个服务,需要的环境。web、redis)

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

这个 Compose 文件定义了两个服务:webredis.

4、启动compose 项目(docker-compose up)

$ docker-compose up

image-20221027103041427

自动默认规则

image-20221027103428827

docker images

image-20221027103644624

image-20221027103721290

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

多个服务器。集群。

redis服务=>4个副本

集群状态。服务都不可能只有一个运行实例。弹性。

网络规则

image-20221027103927301

10个服务 => 项目( 项目中的内容都在通过网络下。域名访问)

image-20221027104349181

如果在同一个网络下,我们可以直接通过域名访问。

停止 Ctrl + C

需要在项目目录下输入这个命令

image-20221027104610013

docker-compose

以前都是单个docker run启动容器

现在通过docker-compose 编写yaml配置文件、可以通过compose一键启动所有服务、!

小结:

1、Docker镜像。 run => 容器

2、DockerFile 构建镜像(服务打包)

3、docker-compose 启动项目(编排、多个微服务/环境)

4、Docker 网络!

1|0compose配置编写规则

docker-compose.yaml 核心!

https://docs.docker.com/compose/compose-file/

# 3层! version: '' # 版本 services: # 服务 服务1: web # 配置 images build network ...... 服务2: redis ...... 服务3: mysql ...... # 其他配置 网络/卷/全局规则 volumes: networkds: configs:

image-20221027105633052

1|4使用compose 一键部署 WP 博客

https://docs.docker.com/samples/wordpress/

1、创建一个空的项目目录。

$ mkdir my_wordpress && cd my_wordpress

2、创建一个docker-compose.yml文件来启动您的 WordPress博客和一个单独的MySQL实例,该实例具有用于数据持久性的卷挂载:

services: db: image: mysql:5.7 command: '--default-authentication-plugin=mysql_native_password' volumes: - db_data:/var/lib/mysql restart: always environment: - MYSQL_ROOT_PASSWORD=somewordpress - MYSQL_DATABASE=wordpress - MYSQL_USER=wordpress - MYSQL_PASSWORD=wordpress expose: - 3306 - 33060 wordpress: image: wordpress:latest volumes: - wp_data:/var/www/html ports: - 80:80 restart: always environment: - WORDPRESS_DB_HOST=db - WORDPRESS_DB_USER=wordpress - WORDPRESS_DB_PASSWORD=wordpress - WORDPRESS_DB_NAME=wordpress volumes: db_data: wp_data:

3、docker-compose up -d 启动项目

访问, https://yourIp:80/

image-20221027113506925

然后一步步进行就OK了!

非常简单!

1|5实战

1、创建一个springboot新项目

导入依赖

<dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-redis</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-test</artifactId> <scope>test</scope> </dependency> </dependencies>

写一个计数器

@RestController public class HelloController { @Autowired RedisTemplate redisTemplate; @GetMapping("/hello") public String hello() { Long views = redisTemplate.opsForValue().increment("views"); return "hello, docker-compose,views" + views; } }

编写application.yml

server: port: 8080 spring: redis: host: redis

2、dockerfile构建镜像

FROM java:8 COPY *.jar /app.jar CMD ["--server.prot=8080"] EXPOSE 8080 ENTRYPOINT ["java", "-jar", "/app.jar"]

3、docker-compose.yaml 编排项目

version: '3.8' services: kuangapp: build: . image: kuangapp depends_on: - redis ports: - "8080:8080" redis: image: "library/redis:alpine"

4、丢到服务器 docker-compose up

测试

image-20221027115613946

假设项目要重新部署打包

docker-compose up --build # 重新构建

总结:

工程、服务、容器

项目compose:三层

  • 工程 Project
  • 服务 服务
  • 容器 运行实例!

__EOF__

本文作者userName
本文链接https://www.cnblogs.com/dt746294093/p/16831787.html
关于博主:评论和私信会在第一时间回复。或者直接私信我。
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!
声援博主:如果您觉得文章对您有帮助,可以点击文章右下角推荐一下。您的鼓励是博主的最大动力!
posted @   D..T  阅读(140)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 分享4款.NET开源、免费、实用的商城系统
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
· 上周热点回顾(2.24-3.2)
点击右上角即可分享
微信分享提示