1 基础知识
1.1 基本概念
1.1.1 Docker的基本概念
– Docker是开发人员和系统管理员使用的容器
– Docker是用于开发,部署和运行应用程序的平台
注:
– 使用Linux容器来部署应用程序称为集装箱化
– 用于轻松部署应用程序
1.1.2 镜像(Images)
镜像的实质是一个可执行的包,包括应用程序代码、运行状态、库、环境变量和配置文件等。
1.1.3 容器(containers)
容器是镜像运行时的实例,即镜像执行是在内存中的内容
1.1.4 容器与虚拟机的区别
– 容器直接共享主机或其他容器的内核,独立运行的进程不占用任何其他可执行文件的内存,因此更轻量。
– 虚拟机运行一个完整的客户操作系统,因此需要使用更多的资源。
1.2 使用对象
– 开发人员
– 系统管理员
1.3 Docker的作用
– 用于开发
– 用于部署
1.4 Docker的特点
– 灵活,Docker能适应负责的应用程序装箱
– 轻量级,容器可直接利用并共享主机内核
– 可互换,可即时部署更新和升级
– 可扩展,可自由增加和自动分发容器副本
– 可堆叠,可垂直堆叠服务并即时堆叠服务
1.5 Docker的版本
– 社区版(CE,Community Edition),适用于个人开发人员或小团队(适用于尝试使用容器)
– 企业版(EE,Enterprise Edition),适用于企业开发和IT团队(适用于生产构建、发布和运行关键业务程序)
2 安装部署
2.1 系统环境配置
2.1.1 系统环境信息
HOST = docker0[1-n]
OS = CentOS 7.x x86_64
IP Address = 10.168.0.2[10-1x]
2.1.2 部署常用工具
In docker0[1-n]
yum install -y vim wget net-tools unzip
2.1.3 设置内存权限大小
In docker0[1-n]
su - echo 'vm.max_map_count = 262144' >> /etc/sysctl.conf sysctl -p sysctl -a | grep vm.max_map_count
显示如下则达成目的:
vm.max_map_count = 262144
2.1.4 关闭SELinux
In docker0[1-n]
sed -i 's/SELINUX=enforcing/SELINUX=disabled/g' /etc/selinux/config setenforce 0
2.1.5 设置时区
In docker0[1-n]
timedatectl set-timezone Asia/Shanghai
2.1.6 配置名称解析
In docker0[1-n]
echo '10.168.0.210 docker01 docker01.cmdschool.org' >> /etc/hosts echo '10.168.0.211 docker02 docker02.cmdschool.org' >> /etc/hosts
2.2 软件环境配置
2.2.1 升级系统到指定版本
In docker0[1-n]
mkdir /etc/yum.repos.d/backup mv /etc/yum.repos.d/*.repo /etc/yum.repos.d/backup/ curl http://mirrors.163.com/.help/CentOS7-Base-163.repo > /etc/yum.repos.d/CentOS7-Base-163.repo
然后使用如下命令更新,
yum -y update
然后,重启系统验证配置,
reboot
2.2.2 手动配置Docker的源(可选)
In docker0[1-n]
curl https://download.docker.com/linux/centos/docker-ce.repo > /etc/yum.repos.d/docker-centos-7-x86_64.repo
2.3.3 安装DockerCE相关包
In docker0[1-n]
yum install -y docker-ce-19.03.9
验证管理用户的创建,
grep -i docker /etc/group /etc/passwd
显示如下:
/etc/group:docker:x:972:
注:docker组已经创建,但尚未有用户加入该组
2.3.4 启动Docker并配置自启动
In docker0[1-n]
systemctl enable docker.service systemctl start docker.service systemctl status docker.service
2.3.5 修改Docker存储位置
In docker0[1-n] 查看存储的类型与位置
docker info | egrep -i "Docker Root Dir|Storage Driver"
显示如下:
Storage Driver: devicemapper Docker Root Dir: /var/lib/docker
停止Dcoker的服务
systemctl stop docker.service
迁移存储数据
mkdir -p /data/docker/ mv /var/lib/docker /data/docker/runningdata
定义新的存储位置:
vim /etc/docker/daemon.json
更改如下参数:
{ "storage-driver": "overlay2", "data-root": "/data/docker/runningdata" }
启动Dcoker的服务
systemctl start docker.service
确认钱以后的存储的类型与位置
docker info | egrep -i "Docker Root Dir|Storage Driver"
显示如下:
Storage Driver: overlay2 Docker Root Dir: /data/docker/runningdata
2.3.6 校验安装的版本
In docker0[1-n]
docker --version
2.3.7 查看更详细的版本
In docker0[1-n]
docker info
信息显示如下:
Containers: 0 Running: 0 Paused: 0 […]
3 搭建Swarm集群
3.1 Swarm集群的基础知识
– Swarm集群是一组运行Docker并加入集群中的机器
– 加入集群后,运行的Dckcek将在集群管理器中执行
– 群体中的机器可以是物理节点也可以是虚拟节点
– Swarm集群支持多种策略运行容器(例如应用运行在负载最低节点)
– 集群管理者是集群中唯一可以执行命令的机器或授权的其他机器
3.2 配置公钥认证(可选)
In docker0[1-n]
ssh-keygen
向导如下,
Generating public/private rsa key pair. Enter file in which to save the key (/root/.ssh/id_rsa): Created directory '/root/.ssh'. Enter passphrase (empty for no passphrase): Enter same passphrase again: […]
然后,使用如下命令部署公钥,
ssh-copy-id -i ~/.ssh/id_rsa.pub docker02
部署完毕后,使用如下命令测试,
ssh docker02
3.3 建立你的集群
3.3.1 配置主机防火墙
In docker0[1-n]
systemctl stop firewalld.service systemctl disable firewalld.service
3.3.2 执行的步骤
运行“docker swarm init”启用集群模式
运行“docker swarm join”将新的节点加入集群
3.3.3 管理主机启用集群
In docker01
docker swarm init
提示如下:
Swarm initialized: current node (km3cx63bzg9pfaue0o8hbo8m9) is now a manager. To add a worker to this swarm, run the following command: docker swarm join --token SWMTKN-1-2o1l0zx4ow0av23rvffgi8827t6dk8zobmscph7ypscgplm61p-ejp2a1v7665uyw2yr0yoft3zv 10.168.0.210:2377 To add a manager to this swarm, run 'docker swarm join-token manager' and follow the instructions.
3.3.4 将成员主机加入集群
In docker0[2-n]
docker swarm join --token SWMTKN-1-2o1l0zx4ow0av23rvffgi8827t6dk8zobmscph7ypscgplm61p-ejp2a1v7665uyw2yr0yoft3zv 10.168.0.210:2377
3.3.5 查看群集成员
In docker01
docker node ls
显示如下:
ID HOSTNAME STATUS AVAILABILITY MANAGER STATUS ENGINE VERSION km3cx63bzg9pfaue0o8hbo8m9 * docker01.cmdschool.org Ready Active Leader 19.03.9 jw10e1kylrk5pwvs1bzv0l95b docker02.cmdschool.org Ready Active 19.03.9
4 部署Docker Registry
4.1 Registry的作用
– 严格控制镜像的存储位置
– 完全掌控镜像的分配渠道
– 可紧密将镜像的存储与分发紧密集成到内部开发工作流中
4.2 以服务的方式运行
4.2.1 配置证书目录并上传
In docker01
mkdir -p /data/docker/certs
如果没有证书,请从腾讯云申请免费证书,
https://cloud.tencent.com/product/ssl
注:以上申请后使用Nginx证书即可并保存到目录“/data/docker/certs”
4.2.3 将TLS证书与私钥保存为秘钥
docker secret create docker01.cmdschool.org.crt /data/docker/certs/docker01.cmdschool.org.crt docker secret create docker01.cmdschool.org.key /data/docker/certs/docker01.cmdschool.org.key
检查保存的密钥:
docker secret ls
显示如下:
ID NAME DRIVER CREATED UPDATED r9xmhrnhxnanzsvjpqkyxdlg7 docker01.cmdschool.org.crt 16 seconds ago 16 seconds ago l2gwnjrsyd9xx0fnklp4dmta0 docker01.cmdschool.org.key 16 seconds ago 16 seconds ago
另外,配置完成后我们建议重启服务器,以避免出现不兼容的问题(可选)
ssh docker02 reboot reboot
4.3 部署服务
4.3.1 准备镜像
In docker01
mkdir –p /data/docker/images cd /data/docker/images docker load -i registry_2.7.1.tar
以上命令软件包可通过以下命令获取,
docker pull registry:2.7.1 docker save registry:2.7.1 -o registry_2.7.1.tar
4.3.2 创建配置文件
vim /data/docker/yml/registry-v2-stack.yml
加入如下配置,
version: '3.6' services: v2: image: 'registry:2.7.1' ports: - target: 443 published: 5000 protocol: tcp mode: host secrets: - docker01.cmdschool.org.crt - docker01.cmdschool.org.key environment: - REGISTRY_HTTP_ADDR=0.0.0.0:443 - REGISTRY_HTTP_TLS_CERTIFICATE=/run/secrets/docker01.cmdschool.org.crt - REGISTRY_HTTP_TLS_KEY=/run/secrets/docker01.cmdschool.org.key - TZ=Asia/Shanghai volumes: - registry-data:/var/lib/registry logging: driver: "json-file" options: max-size: "20m" max-file: "10" deploy: replicas: 1 placement: constraints: [node.labels.registry-v2==true] volumes: registry-data: external: true secrets: docker01.cmdschool.org.crt: external: true docker01.cmdschool.org.key: external: true
4.3.3 标记运行节点
In docker01
docker node update --label-add registry-v2=true docker01.cmdschool.org
4.3.4 部署服务
In docker01
docker stack deploy -c /data/docker/yml/registry-v2-stack.yml registry
5 部署Portainer
5.1 Portainer的基础知识
5.1.1 Portainer的简介
Portainer是一个轻量级的管理UI,可让你轻松管理Docker主机和Swarm群集
5.1.2 Portainer的作用
– 管理Docker堆栈
– 管理Docker的容器
– 管理Docker的镜像
– 管理Docker的卷
– 管理Docker的网络等
5.1.3 Portainer的兼容性
Portainer支持任何的Docker引擎
5.2 部署Portainer
5.2.1 准备镜像
In docker01
cd /data/docker/images/ docker load -i portainer-ce:2.5.0.tar docker tag portainer/portainer-ce:2.5.0 docker01.cmdschool.org:5000/portainer/portainer-ce:2.5.0 docker push docker01.cmdschool.org:5000/portainer/portainer-ce:2.5.0 docker image rm portainer/portainer-ce:2.5.0 docker load -i portainer-agent:2.4.0.tar docker tag portainer/agent:2.4.0 docker01.cmdschool.org:5000/portainer/agent:2.4.0 docker push docker01.cmdschool.org:5000/portainer/agent:2.4.0 docker image rm portainer/agent:2.4.0
以上命令软件包可通过以下命令获取,
docker pull portainer/portainer-ce:2.5.0 docker save portainer/portainer-ce:2.5.0 -o portainer-ce:2.5.0.tar docker pull portainer/agent:2.4.0 docker save portainer/agent:2.4.0 -o portainer-agent:2.4.0.tar
In docker01
5.2.1 创建服务配置文件
mkdir -p /data/docker/yml/ vim /data/docker/yml/portainer-stack.yml
加入如下配置:
version: '3.6' services: agent: image: docker01.cmdschool.org:5000/portainer/agent:2.4.0 environment: # REQUIRED: Should be equal to the service name prefixed by "tasks." when # deployed inside an overlay network AGENT_CLUSTER_ADDR: tasks.agent # AGENT_PORT: 9001 # LOG_LEVEL: debug TZ: Asia/Shanghai volumes: - /var/run/docker.sock:/var/run/docker.sock logging: driver: "json-file" options: max-size: "20m" max-file: "10" networks: - agent_network deploy: mode: global portainer: image: docker01.cmdschool.org:5000/portainer/portainer-ce:2.5.0 environment: TZ: Asia/Shanghai command: -H tcp://tasks.agent:9001 --tlsskipverify ports: - "9900:9000" volumes: - portainer-data:/data logging: driver: "json-file" options: max-size: "20m" max-file: "30" networks: - agent_network deploy: mode: replicated replicas: 1 placement: constraints: [node.labels.portainer-web == true] volumes: portainer-data: external: true networks: agent_network: driver: overlay
5.2.2 标记运行节点
In docker01
docker node update --label-add portainer-web=true docker01.cmdschool.org
5.2.3 部署服务
docker stack deploy -c /data/docker/yml/portainer-stack.yml portainer
5.2.4 创建管理员账号
http://docker01.cmdschool.org:9000
注:以上登录Portainer将会提示你创建管理员账号
参阅文档
=========================
存储驱动
—————
https://docs.docker.com/storage/storagedriver/select-storage-driver/
“/etc/docker/daemon.json”的支持文档
———————————–
https://docs.docker.com/engine/reference/commandline/dockerd/
没有评论