Docker 实用学习笔记(进阶篇)

2021-12-08 21:09:53 浏览数 (1)

Docker 进阶

  • 一、Docker Compose - 1.1 简介 - 1.2 Docker Compose 官方介绍 - 1.3 Docker-Compose 示例: - 1.4 安装 Docker Compose - 1.5 开始体验 - 1.6 yaml 规则 - 1.7 docker-compose 搭建开源博客 - 1.8 微服务实战 - 1.9 总结
  • 二、Docker Swarm - 2.1 初始化 swarm - 2.2 Raft 协议 - 2.3 体会 - 2.4 概念总结 - 2.5 扩展命令
  • 三、Docker Stack
  • 四、Docker Secret
  • 五、Docker Config
  • 六、扩展到 K8S - 云原生

Author:Gorit

Refer:B站狂神说

2021年发表博文: 3/50

一、Docker Compose

没有学过 Dokcer 的同学,可以先看这篇 Docker 基础

1.1 简介

传统方式打包项目:

  1. Docker
  2. DockerFile build run 手动操作,单个容器
  3. 微服务,100个微服务,依赖关系

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

1.2 Docker 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.

  • 使用 YAML 文件 来配置你的 app 服务
  • 使用一个 single command

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.
    1. 创建 DockerFile 可以使你的 app 在任何地方运行
  2. Define the services that make up your app in docker-compose.yml so they can be run together in an isolated environment.
    1. 定义一个 docker-compose.yml 文件
  3. Run docker-compose up and Compose starts and runs your entire app.
    1. 运行 docker-compose 命令
    2. 启动项目

作用:项目编排

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

1.3 Docker-Compose 示例:

代码语言:javascript复制
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: {}

Compose: 重要概念

  • 服务 service,容器,应用。(web,redis,mysql…)
  • 项目 project,一组关联的容器,博客,web,mysql

1.4 安装 Docker Compose

  1. Linux 下载
代码语言:javascript复制
# 下载
sudo curl -L "https://github.com/docker/compose/releases/download/1.27.4/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose

# 设置权限
sudo chmod  x /usr/local/bin/docker-compose
  1. windows 下载, 下载 Docker Desktop 貌似就能自带了

官方安装步骤

安装好之后,在shell 窗口输入

docker-compose --version,可以看到安装信息就可以了

1.5 开始体验

官网做了一个统计页面访问次数的 python 应用,用到了

  • python
  • redis
  • 启动 app.py
  • Dockerfile 应用打包为镜像
  • Docker-compose yaml 文件(定义整个服务,需要的环境 redis,web 等等)
  • 启动 docker-compose up
代码语言:javascript复制
docker-compose up # 启动

docker-compose down # 停止

docker-compose stop # 暴力停止

流程:

  1. 创建网络
  2. 执行 Docker-compose.yml
  3. 启动服务
  4. composetest_web_1 is up-to-date composetest_redis_1 is up-to-date

、docker images

代码语言:javascript复制
REPOSITORY                                         TAG                 IMAGE ID            CREATED             SIZE
composetest_web                                    latest              e7de448646d1        17 minutes ago      196MB
python                                             3.7-alpine          72e4ef8abf8e        29 hours ago        41.1MB
redis                                              alpine              c678242f9116        46 hours ago        31.6MB

docker-compose

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

docker-compose,通过 docker-compose 编写 YAML 配置文件,可以通过 compose 一键启动所有服务,停止

Docker 小结

  1. Docker 镜像,run => 容器
  2. DockerFile 构建镜像(服务打包)
  3. docker-compose、 启动项目(编排,多个微服务环境)
  4. Docker 网络

1.6 yaml 规则

docker-compose

代码语言:javascript复制
# 3 层

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

# 从下网上才为顺序
version: "3.9"
services:
  web:
    build: .
    ports:
      - "5000:5000"
    volumes:
      - .:/code
    environment:
      FLASK_ENV: development
  redis:
    image: "redis:alpine"

1.7 docker-compose 搭建开源博客

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

博客

  1. 下载程序,安装数据库,配置…
  2. compose 应用,=> 一键启动
  3. 下载项目(docker-compose.yaml)
  4. 如果需要文件, Dockerfile
  5. 文件准备齐全(直接一键启动)

前台启动

docker -d

docker-compose -d

一切都很简单

1.8 微服务实战

  1. 编写自己的微服务
  2. dockerfile 构建镜像
  3. docker-compose.yml 编排项目
  4. 丢到服务器
  5. 启动

小结:

未来项目中只要有 docker-compose 文件,按照这个规则,启动编排容器

公司:docker-compose 直接启动

网上开源项目:docker-compose

假如项目要重新部署打包: docker-compose up --build # 重新构建

1.9 总结

工具、服务、容器

项目 compose:三层

  • 工程:project
  • 服务 服务
  • 容器 运行实例! docker k8s, 容器

二、Docker Swarm

2.1 初始化 swarm

搭建集群服务 (k8s)

购买服务器 4台服务器

安装 Docker

xshell 同步操作

  1. docker swarm init (生成节点)
  2. 假如 (管理者,worker)

目标,双主,双重

2.2 Raft 协议

双主双从:假设一个节点挂了!其他节点是否可以用!

Raft协议:保证大多数存活才可以用,只要 > 1,集群至少大于 3 台。

Raft协议保证大多数节点都可用,高可用

2.3 体会

弹性,扩缩容,集群

以后告别了 docker run

docker-compose up! 启动一个项目,单机!

集群:swarm:docker service

容器 => 服务

redis! = 3 份,容器!

集群:高可用,web -> redis (3台,在不同机器)

服务:集群中任意节点都可以访问,服务可以有多个副本动态扩缩容实现高可用

弹性:扩缩容

10台!10000台! 卖给别人! 虚拟化

服务的高可用,任何企业,云计算

docker swarm 其实不难

会搭建集群,会启动服务,动态管理容器就可以了

2.4 概念总结

swarm

集群的管理和编号,docker 可以初始化一个 swarm集群,其他节点可以假如(管理,工作者)

Node

就是一个 docker 节点,多个节点就组成了一个 网络集群(管理,工作者)

Service

任务,可以在管理节点或者工作节点进行,核心:用户访问

Task

容器内的命令,细节任务!

2.5 扩展命令

docker network ls

三、Docker Stack

docker-compose 单机部署项目

docker stack 部署,集群部署

代码语言:javascript复制
# 单机
docker-compose up -d wordpress.yaml

# 集群
docker stack deploy wordpress.yaml

# docker-cmopose

四、Docker Secret

安全!配置密码,证书!

  • create
  • inspect
  • ls
  • rm

五、Docker Config

六、扩展到 K8S

云原生

Go 语言

Docker 是 Go 开发的

并发语言

go 语言学习!!!

云应用

k8s!

0 人点赞