首页 > 其他分享 >狂神说学习笔记:Docker进阶-Docker Compose

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

时间:2022-10-27 12:24:08浏览次数:113  
标签:compose 进阶 app redis Compose Docker docker

Docker Compose

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

简介

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、下载

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

体验

地址: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 网络!

compose配置编写规则

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

使用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、创建一个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
  • 服务 服务
  • 容器 运行实例!

标签:compose,进阶,app,redis,Compose,Docker,docker
From: https://www.cnblogs.com/dt746294093/p/16831787.html

相关文章

  • docker安装nginx配置
    编译安装nginx的配置文件的路径在哪这个版本不同,位置还是不同的。我的是nginx-1.9.9版本源码安装,配置文件在conf这个目录里面:/usr/local/nginx/conf/nginx.conf如果你找不见......
  • Docker install on Debian 10
    DockerInstallation#Debian10(Buster)#https://docs.docker.com/engine/install/debian/sudoapt-getremovedocker\docker-engine\docker.io\......
  • TypeScript 复习与进阶三部曲 (2) – 把 TypeScript 当编程语言使用
    前言上一篇,我们提到,TypeScript进阶有3个阶段. 第一阶段是"把TypeScript当强类型语言使用",我们已经介绍完了. 第二阶段是"把TypeScript当编程语言使用"......
  • DRF进阶
    目录DRF框架请求与响应DRF之Requestrequest常用方法配置请求数据格式配置处理顺序局部配置全局配置DRf之ResponseReponse常用参数局部配置全局配置DRF框架请求与响应......
  • Docker配置阿里云镜像加速
    Docker配置阿里云镜像加速登录阿里云:https://cn.aliyun.com控制台--->产品与服务--->容器镜像服务阿里云镜像加速器配置地址:https://kgmux0ys.mirror.ali......
  • Docker 容器间的通信
    前戏容器同学有三种方式:IPDockerDNSServerjoined IP通信两个容器需要互通,必须要有同意网络的网卡,满足条件后容器就可以互相通信了。DockerDNSServer通过IP访问容器虽......
  • Dockerfile指令说明
    Dockerfile1、FROM基础镜像,当前镜像是基于那个镜像的,指定一个已经存在的镜像作为模板2、MAINTAINER镜像维护者的姓名和邮箱地址3、RUN容器构建的时候需要运行的命......
  • Docker实战:Docker安装WordPress,快速搭建自己的博客
    1、WordPress介绍官网:​​WordPress.com:快速、安全的受管WordPress托管服务​​WordPress是一种基于php编程语言开发的CMS管理系统,WordPress有丰富的插件和模板,用户可以快......
  • docker容器化业务
    1、环境准备:设备IP地址作用系统版本mysql-master192.168.100.213Nginx-Web服务器Ubuntu2004mysql-slave192.168.100.214Nginx-Web服务器Ubuntu2004harbor1192.168.100.215反......
  • c语言—字符函数和字符串函数进阶篇—笔记
    这章介绍了一些字符函数,需要记忆和练习,才能掌握。具体函数可以翻阅c语言函数库​​https://zh.cppreference.com/w​​C语言中对字符和字符串的处理很是频繁,但是C语言本身是......