[TOC]
笔记太分散并不好,还是需要系统总结一下,方便后期查阅。
1 Docker的安装和介绍
1.1 Docker简介
Docker是基于go语言实现的云开源项目。
Docker的主要目标是build,ship and run any app,anywhere
,也就是说通过对应用程序组件的封装,分发,部署,运行等生命周期的管理。使用户的app(可以是一个web应用程序或者数据库应用等)及其运行环境能够做到一次封装,到处运行
。
Linux容器技术的出现解决了这个问题。而Docker就是基于它的基础上发展过来的。将应用运行到docker容器上面,而Docker容器在任何操作系统上都是一致的,这就是实现跨平台跨服务器。只需要一次配置好环境,换到别的机子上就可以一键部署好,大大简化了操作。
Docker官网:https://www.docker.com/
1.2 Linux环境下安装docker
Docker分为社区版CE和企业版EE。CE版完全足够个人使用,选择stable版本即可。
1.Docker 要求 CentOS 系统的内核版本高于 3.10
,查看本页面的前提条件来验证你的CentOS 版本是否支持 Docker 。
通过 uname -r 命令查看你当前的内核版本
1 | # uname -r |
2.使用 root
权限登录 Centos。确保 yum 包更新到最新。
1 | # sudo yum update |
3.卸载旧版本(如果安装过旧版本的话)
1 | # sudo yum remove docker docker-common docker-selinux docker-engine |
4.安装需要的软件包, yum-util 提供yum-config-manager功能,另外两个是devicemapper驱动依赖的
1 | # sudo yum install -y yum-utils device-mapper-persistent-data lvm2 |
5.设置yum源
1 | # sudo yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo |
6.可以查看所有仓库中所有docker版本,并选择特定版本安装
1 | # yum list docker-ce --showduplicates | sort -r |
7.安装docker
1 | # sudo yum install docker-ce #由于repo中默认只开启stable仓库,故这里安装的是最新稳定版 |
8.启动docker
1 | # sudo systemctl start docker |
9.设置开机自启动
1 | # sudo systemctl enable docker |
10.验证安装是否成功(有client和service两部分表示docker安装启动都成功了)
1 | # docker version |
1.3 配置镜像加速
阿里云界面:https://cr.console.aliyun.com/cn-hangzhou/instances/mirrors
Docker客户端版本需要大于 1.10.0
可以通过修改daemon配置文件/etc/docker/daemon.json
来使用加速器
1 | sudo mkdir -p /etc/docker |
1.4 可能遇到的问题
1.因为之前已经安装过旧版本的docker,在安装的时候报错如下:
1 | Transaction check error: |
2.卸载旧版本的包
1 | # sudo yum erase docker-common-2:1.12.6-68.gitec8512b.el7.centos.x86_64 |
3.再次安装docker
1 | # sudo yum install docker-ce |
2.yum安装的时候遇到公钥尚未安装的问题解决
1 | 在 yum install xxxx 命令之后添加 --nogpgcheck 进行跳过公钥检查安装 |
或者
导入密钥重新安装Docker
1 | rpm --import http://mirrors.163.com/centos/RPM-GPG-KEY-CentOS-7 |
2 容器快速上手
Docker上手比较简单,按照命令主要分为
- 帮助命令
- 镜像命令
- 容器命令
2.1 帮助命令
1 | docker version #查看Docker版本 |
2.2 镜像命令
docker images
列出本地主机上的镜像
1 | REPOSITORY:表示镜像的仓库源 |
收起列表
- 视频:2-1 本章介绍 (01:21)
- 视频:2-2 认识一下docker命令行 (07:54)
- 视频:2-3 镜像和容器 (04:26)
- 视频:2-4 创建我们第一个容器 (10:01)
- 视频:2-5 命令行小技巧之批量操作 (04:30)
- 视频:2-6 容器的attached和detached模式 (10:53)
- 视频:2-7 容器的交互式模式 (12:38)
- 视频:2-8 windows是如何运行docker engine的 (06:08)
- 视频:2-9 容器和虚拟机 (14:04)
- 视频:2-10 创建容器时背后到底发生了什么 (04:15)
3 镜像的创建管理和发布
介绍镜像获取的三大主要方式,初步了解Dockerfile和镜像的构建和分享
收起列表
- 视频:3-1 镜像的获取方式 (04:23)
- 视频:3-2 镜像的registry介绍 (06:03)
- 视频:3-3 镜像的获取查看和删除 (12:22)
- 视频:3-4 docker镜像的导入导出 (03:05)
- 视频:3-5 Dockerfile的介绍 (08:08)
- 视频:3-6 镜像的构建和分享 (13:02)
- 视频:3-7 通过commit创建镜像 (12:09)
- 视频:3-8 聊聊scratch这个镜像 (07:39)
4 Dockerfile指南
通过示例结合最全的Dockerfile语法讲解,完全掌握Dockerfile语法和重要的最佳实践
收起列表
- 视频:4-1 本章介绍 (01:10)
- 视频:4-2 如何选择基础镜像 (10:15)
- 视频:4-3 通过RUN执行指令 (08:43)
- 视频:4-4 文件的复制和目录操作 (12:06)
- 视频:4-5 构建参数和环境变量 (11:04)
- 视频:4-6 容器启动命令CMD (13:12)
- 视频:4-7 容器启动命令ENTRYPOINT (08:31)
- 视频:4-8 一起构建一个Python Flask镜像 (16:10)
- 视频:4-9 Dockerfile技巧-合理使用缓存 (08:40)
- 视频:4-10 Dockerfile技巧——dockerignore (08:05)
- 视频:4-11 Dockerfile技巧——多阶段构建 (10:25)
- 视频:4-12 Dockerfile技巧——尽量使用非root用户 (07:25)
- 视频:4-13 本章总结 (03:36)
5 Docker的存储
数据的持久化如何实现,Volume有哪些类型和使用场景
收起列表
- 视频:5-1 本章介绍 (04:34)
- 视频:5-2 数据持久化之Data Volume (17:16)
- 视频:5-3 Data Volume练习之MySQL (06:57)
- 视频:5-4 数据持久化之Bind Mount (10:58)
- 视频:5-5 Bind Mount练习之Docker开发环境(本章未完待续) (12:20)
6 Docker的网络
网络命令空间,端口映射,网络地址转换,路由等概念会在这一章详细的讲解给大家。
7 Docker compose
Docker compose是复杂应用在单机环境下编排的必备工具,本章会通过具体的应用部署演示,覆盖docker compose的基本语法和命令行的使用
8 Docker swarm
作为集群的编排工具,docker swarm虽然不如k8s流行,但是万变不离其宗,掌握其基本原理和使用将大大降低大家学习其它编排工具的难度。
9 Docker vs podman
Podman是docker的最有力竞争者,这一章将带领大家快速入门podman,看看podman和docker有什么异同之处和高下之分。
10 Docker的多架构支持
随着苹果M1芯片的快速发展和普集,arm架构开始进入更多开发者的视野,docker是如何支持多CPU架构的?以及我们如何发布支持多CPU架构的容器镜像呢?这一章将向您解答
11 Git和容器——CI/CD
这一章我们会关注在应用的部署和运维中,在持续集成和持续部署中结合版本管理和容器技术,同时也会快速的介绍一些自动化运维和监控工具。
12 容器安全
安全是个大问题,如何确保在生产环境中安全的使用容器呢?本章会为您解开。
13 Docker常用软件安装
13.1 RabbitMQ安装
RabbitMQ是基于AMQP的一款消息管理系统。AMQP(Advanced Message Queuing Protocol),是一个提供消息服务的应用层标准高级消息队列协议,其中RabbitMQ就是基于这种协议的一种实现。
快速构建
1.docker search选择版本
2.docker pull 下载镜像
3.docker运行
1 | docker run -d -p 5672:5672 -p 15672:15672 rabbitmq:版本号 |
可能出现的问题
Windows环境下浏览器无法访问虚拟机开的rabbitmq服务
安装首先确保RabbitMQ的端口等配置正确,另外开放Linux防火墙端口。如果依旧不能访问web界面,那么可能是RabbitMQ没有开启web管理。
只需要通过rabbitmq-plugins list
命令列出插件的启用和禁用状态。然后再修改即可。
解决方法
1.运行RabbitMQ
1 | docker run -d -p 5672:5672 -p 15672:15672 rabbitmq |
2.进入RabbitMQ命令界面
1 | docker exec -it rabbitmq /bin/bash |
3.开启
1 | rabbitmq-plugins enable rabbitmq_management |
13.2 PXC(Percona XtraDB Cluster)集群搭建
常见的MySQL集群方案包括:Replication,Percona XtraDB Cluster(PXC)
MySQL主从复制:https://www.jianshu.com/p/faf0127f1cb2
Replication | PXC |
---|---|
数据同步是单向的,master负责写,然后异步复制给slave;如果slave写入数据,不会复制给master。 | 数据同步时双向的,任何一个mysql节点写入数据,都会同步到集群中其它的节点。 |
异步复制,从和主无法保证数据的一致性 | 同步复制,事务在所有集群节点要么同时提交,要么同时不提交 |
Replication方案适用于日志,博客
这样的网站,存储一些价值较低的内容。
而PXC具备强一致性,数据同步是双向的特点,另外PerconaServer是MySQL改进版,性能提升很大。所以这里我选择的是PXC方案搭建Mysql集群。
13.2.1 环境准备
Docker的安装与配置非常简单。
1.安装docker
2.配置docker镜像加速器
13.2.2 PXC集群环境部署
1.下载镜像
1 | docker pull docker.io/percona/percona-xtradb-cluster |
注意:可以使用docker tag
改名,这里我将 docker.io/percona/percona-xtradb-cluster更名为pxc
2.创建内部网络
出于安全考虑,需要给PXC集群实例创建Docker内部网络
这里我搭建集群使用的是5节点,网段可以自己规定
1 | docker network create --subnet=172.10.0.0/24 net1 |
3.创建Docker卷
容器中的PXC节点映射数据目录的解决方法:
1 | docker volume create --name v1 |
查看docker卷信息:docker inspect v1
4.创建PXC容器
5个PXC容器
1 | docker run -d -p 3306:3306 -e MYSQL_ROOT_PASSWORD=123456 -e CLUSTER_NAME=PXC -e XTRABACKUP_PASSWORD=123456 -v v1:/var/lib/mysql --privileged --name=node1 --net=net1 --ip 172.10.0.2 pxc |
13.2.3 验证PCX集群
在数据库中创建5个DB:
在DB1中新建test数据库并创建student表:
刷新之后,可以看到DB2,DB3,DB4,DB5全部同步到与DB1一致
13.2.4 数据库负载的配置
数据库负载均衡的必要性:
虽然搭建了集群,但是不使用数据库负载均衡,单节点处理所有请求,会暴露负载高,性能差的问题
这里可以使用Haproxy做负载均衡,将请求均匀的分发给每个节点,单节点负载会轻松很多。
1.haproxy的下载
docker pull haproxy
2.创建haproxy配置文件
在/home/soft/haproxy/
目录下创建haproxy.cfg文件
haproxy.cfg
1 | global |
4.实例化haproxy
1 | docker run -it -d -p 4001:8888 -p 4002:3306 -v /home/soft/haproxy:/usr/local/etc/haproxy --name h1 --privileged --net=net1 --ip 172.10.0.7 haproxy |
5.登陆到交互容器里
1 | docker exec -it h1 bash |
6.测试
首页展示: