Docker入门与进阶(下)

作者

刘畅

时间

2020-11-12

实验主机配置

系统centos7.5

主机名

ip

配置

应用

harbor-master

172.16.1.71

2核4G/60G

docker、docker-compose、harbor、Grafana、

Prometheus、cAdvisor

harbor-backup

172.16.1.72

2核4G/60G

docker、docker-compose、harbor

docker-client

172.16.1.73

2核4G/60G

docker、docker-compose、cAdvisor、portainer

本文不赘述docker的安装。

目录

1 企业级镜像仓库Harbor 1

1.1
Harbor
概述 1

1.2
Harbor
HTTP搭建与使用 1

1.3
Harbor
HTTPS搭建与使用 3

1.4
Harbor主从复制 6

1.5
Harbor
基本使用 9

1.6
Harbor运维维护 9

2 单机编排利器Docker Compose 9

2.1
Compose是什么 9

2.2
Linux安装Compose 10

2.3
Compose常用选项与命令 10

2.4
docker-compose.yml编排 10

2.5
一键部署LNMP网站平台 11

2.6
一键部署Nginx反向代理Tomcat集群 14

2.7
小结 17

3 Prometheus+Grafana监控Docker主机 17

3.1
监控系统概述 17

3.2
监控系统部署 17

3.3
Grafana展示 19

3.4
监控多Docker主机 20

4 补充 21

4.1
docker图形化界面 21

4.2
grafana图标不出数据的原因 24

1 企业级镜像仓库Harbor

1.1
Harbor 概述

1 Harbor是由VMWare公司开源的容器镜像仓库。事实上,Harbor是在Docker Registry上进行了相应的企业级扩展,从而获得了更加广泛的应用,这些新的企业级特性包括:管理用户界面,基于角色的访问控制,AD/LDAP集成以及审计日志等,足以满足基本企业需求。

官方:https://goharbor.io/

Github:https://github.com/goharbor/harbor

2 Harbor 部署先决条件

(1)
服务器硬件配置

1) 最低要求:CPU2核/内存4G/硬盘40GB

2) 推荐:CPU4核/内存8G/硬盘160GB

(2)
软件

1) Docker CE 17.06版本+

2) Docker Compose 1.18版本+

(3) Harbor安装有2种方式

1) 在线安装:从Docker Hub下载Harbor相关镜像,因此安装软件包非常小。

2) 离线安装:安装包包含部署的相关镜像,因此安装包比较大,本文采用离线方式安装harbor。

下载docker compose地址

https://github.com/docker/compose/releases/download/1.27.4/docker-compose-Linux-x86_64

下载docker harbor离线包地址

https://github.com/goharbor/harbor/releases/download/v2.1.1/harbor-offline-installer-v2.1.1.tgz

1.2
Harbor HTTP搭建与使用

在172.16.1.71节点上操作

1 先安装Docker
Compose

# mv docker-compose-Linux-x86_64
/usr/bin/docker-compose

# chmod +x /usr/bin/docker-compose

2 部署Harbor
HTTP

# tar -xzf
harbor-offline-installer-v2.1.1.tgz

# cd harbor/

# cp -a harbor.yml.tmpl harbor.yml

# vim harbor.yml

hostname: reg.lc.com

# 先注释https相关配置

https:

harbor_admin_password: Harbor12345

# ./prepare

# ./install.sh

# docker-compose ps

3 通过浏览器访问

(1) 修改windows的C:\Windows\System32\drivers\etc\hosts文件添加如下内容

172.16.1.71 reg.lc.com

(2) 在浏览器中输入http://reg.lc.com 进行访问,用户:admin 密码:Harbor12345

4 通过linux主机访问

在172.16.1.73节点上操作

(1) 修改/etc/hosts文件解析

# vim /etc/hosts

172.16.1.71 reg.lc.com

(2) 登录

# docker login reg.lc.com

错误原因:docker
harbor默认使用https方式登录,现在配的docker harbor连接方式为http,所以需要在docker中配置信任该http域名,解决方法如下。

# vim /etc/docker/daemon.json

{

"registry-mirrors":
["https://b1cx9cn7.mirror.aliyuncs.com"],

"insecure-registries":["reg.lc.com"]

}

# systemctl daemon-reload

# systemctl restart docker

# docker login reg.lc.com

1.3
Harbor HTTPS搭建与使用

在172.16.1.71节点上操作,在"2 部署Harbor
HTTP"基础上更新配置

1 使用cfssl工具生成域名为reg.lc.com的自签名服务证书

(1) 下载cfssl工具

# cat cfssl.sh

wget
https://pkg.cfssl.org/R1.2/cfssl_linux-amd64

wget
https://pkg.cfssl.org/R1.2/cfssljson_linux-amd64

wget
https://pkg.cfssl.org/R1.2/cfssl-certinfo_linux-amd64

chmod +x cfssl*

mv cfssl_linux-amd64 /usr/bin/cfssl

mv cfssljson_linux-amd64
/usr/bin/cfssljson

mv cfssl-certinfo_linux-amd64
/usr/bin/cfssl-certinfo

# sh cfssl.sh

(2) 执行certs.sh脚本生成相关证书

# cat certs.sh

cat > ca-config.json <<EOF

{

"signing": {

"default": {

"expiry":
"87600h"

},

"profiles":
{

"server": {

"expiry":
"87600h",

"usages":
[

"signing",

"key
encipherment",

"server
auth",

"client
auth"

]

}

}

}

}

EOF

cat > ca-csr.json <<EOF

{

"CN": "harbor",

"key": {

"algo":
"rsa",

"size":
2048

},

"names": [

{

"C":
"CN",

"L":
"Beijing",

"ST":
"Beijing"

}

]

}

EOF

cfssl gencert -initca ca-csr.json | cfssljson -bare ca
-

cat > reg.lc.com-csr.json <<EOF

{

"CN": "reg.lc.com",

"hosts": [],

"key": {

"algo":
"rsa",

"size": 2048

},

"names": [

{

"C":
"CN",

"L":
"BeiJing",

"ST":
"BeiJing"

}

]

}

EOF

cfssl gencert -ca=ca.pem -ca-key=ca-key.pem
-config=ca-config.json -profile=server reg.lc.com-csr.json
| cfssljson -bare reg.lc.com

# sh certs.sh

生成的证书中reg.lc.com-key.pem和reg.lc.com.pem是我所需要的

# mkdir -p /data/ssl

# cp -a reg.lc.com.pem reg.lc.com-key.pem
/data/ssl/

2 Harbor启用HTTPS

# cd harbor/

# cp -a harbor.yml.tmpl harbor.yml

# vim harbor.yml

hostname: reg.lc.com

https:

# https port for harbor, default is
443

port: 443

# The path of cert and key files for
nginx

certificate:
/data/ssl/reg.lc.com.pem

private_key:
/data/ssl/reg.lc.com-key.pem

harbor_admin_password: Harbor12345

3 重新配置并部署Harbor

# docker-compose down

down: 停止并删除容器,网络

harbor容器数据持久化目录为/data,日志持久化目录为/var/log/harbor,

删除harbor容器不会删除harbor中的数据。

# ./prepare

# docker-compose
up -d

up:创建和启动容器

-d:将容器放到后台运行

4浏览器访问查看自签证书信息

5 linux主机登录docker harbor

在172.16.1.73节点上操作

# docker login reg.lc.com

解决办法:

# mkdir /etc/docker/certs.d/reg.lc.com
-p

# scp -rp root@172.16.1.71:/data/ssl/reg.lc.com.pem
/etc/docker/certs.d/reg.lc.com/reg.lc.com.crt

提示:

出现上面报错的原因为证书为自签证书,如果是正规机构颁发的证书不会出现如上错误。

1.4
Harbor主从复制

1 harbor主从复制架构

2、在172.16.1.72节点上部署从harbor

# mv docker-compose-Linux-x86_64
/usr/bin/docker-compose

# chmod +x /usr/bin/docker-compose

# tar -xzf
harbor-offline-installer-v2.1.1.tgz

# cd harbor/

# cp -a harbor.yml.tmpl harbor.yml

# vim harbor.yml

hostname: 172.16.1.72

# 注释掉https证书相关的内容

#https:

# https port for harbor, default is
443

#  port: 443

# The path of cert and key files for
nginx

#  certificate:
/your/certificate/path

#  private_key:
/your/private/key/path

harbor_admin_password: Harbor12345

# ./prepare

# ./install.sh

3、在172.16.1.71节点上创建主从复制

(1)
系统管理—>仓库管理—>新建目标

(2)
系统管理—>仓库管理—>新建规则

(3)
测试

1) 当在172.16.1.71主节点上提交镜像后,172.16.1.72从节点会被同步到镜像。

2) harbor镜像同步只会同步镜像。

3) 比如一个项目和镜像只在主节点上存在,当启动复制规则后,会把项目名和镜像同步到

从节点,项目下的用户不会被同步,当主节点删除该项目,从节点的镜像会被删除,但项

目名会被保留。

1.5
Harbor 基本使用

以library项目为例

1 在项目中标记镜像

docker tag SOURCE_IMAGE[:TAG]
reg.lc.com/library/REPOSITORY[:TAG]

2 推送镜像到当前项目

docker push
reg.lc.com/library/REPOSITORY[:TAG]

1.6
Harbor运维维护

1 harbor相关容器及服务

容器

功能

harbor-core

配置管理中心

harbor-db PG

数据库

harbor-jobservice

负责镜像复制

harbor-log

记录操作日志

harbor-portal Web

管理页面和API

nginx

前端代理,负责前端页面和镜像上传/下载转发

redis

会话

registryctl

镜像存储

容器数据持久化目录:/data

日志文件目录:/var/log/harbor

数据库做好定期备份。

docker-compose命令引用的配置文件默认是当前目录下的docker-compose.yml文件。

2 单机编排利器Docker
Compose

在172.16.1.73节点上操作

2.1
Compose是什么

1 Compose是用于定义和运行多容器的工具。

2 通过Compose可以使用YAML文件来配置容器。然后,使用一个命令就可以从配置中创建并

启动所有服务。

3 使用Compose大致为三步

(1)
定义Dockerfile,以便可以在任意环境运行

(2)
定义应用程序启动配置文件docker-compose.yml

(3)
docker-compose启动并管理整个应用程序生命周期

4 官方文档

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

2.2
Linux安装Compose

1 下载二进制文件

curl -L
https://github.com/docker/compose/releases/download/1.27.4/docker-compose-Linux-x86_64
-o /usr/bin/docker-compose

2 添加可执行权限:

chmod +x /usr/bin/docker-compose

2.3
Compose常用选项与命令

1 常用选项

(1)
-f,--file
指定yaml文件,默认docker-compose.yml

1) Docker-compose读取文件的目录是根据指定"-f docker-compose.yml"所在的目录确定的。

2) 如果编写的文件名就是docker-compose.yml,docker-compose命令操作时可以不指定。

(2) -p,--project-name 指定项目名称,默认是当前目录

2 命令

build

重新构建服务

ps

列出所有容器(包括在线或不在线的)

up

创建和启动容器

exec

在容器里执行命令

scale

指定一个服务容器启动数量

down

删除容器、网络、数据卷和镜像

stop/start/restart

停止/启动/重启服务

2.4
docker-compose.yml编排

1 示例

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

2 常用yml参数

2.5
一键部署LNMP网站平台

1 环境设置

[root@docker-client ~]# cd
/root/compose_lnmp/

[root@docker-client compose_lnmp]# tree -L
2

# docker-compose配置文件内容

2 构建镜像

[root@docker-client compose_lnmp]# docker-compose
build

3 创建容器并在后台运行

[root@docker-client compose_lnmp]# docker-compose up
-d

4 查看服务

[root@docker-client compose_lnmp]# docker-compose
ps

5 访问wordpress网站

http://172.16.1.73/wordpress/

因为所有的docker服务都在同一个docker网络中,在不暴露docker服务端口的情况下

可以通过docker容器的名称访问到docker容器内部服务的端口号。

2.6
一键部署Nginx反向代理Tomcat集群

1 环境设置

[root@docker-client ~]# cd
compose_lnmt/

[root@docker-client compose_lnmt]# tree -L
2

# docker-compose.yml文件内容

2 构建镜像

[root@docker-client compose_lnmt]# docker-compose
build

3 创建容器并在后台运行

[root@docker-client compose_lnmt]# docker-compose up
-d

4 查看服务

[root@docker-client compose_lnmt]# docker-compose
ps

5 访问网站

http://172.16.1.73/

6 查看docker网络信息

2.7
小结

以上通过docker-compose安装的lnmp、lnmt服务,执行docker-compose
down命令后不会删除挂

载卷中存储的数据,执行docker-compose up
-d命令即可在保留原来数据的情况下将容器服务拉起。

3 Prometheus+Grafana监控Docker主机

3.1
监控系统概述

1 cAdvisor(Container Advisor)

用于收集正在运行的容器资源使用和性能信息。

https://github.com/google/cadvisor

2 Prometheus(普罗米修斯)

容器监控系统。

https://prometheus.io

https://github.com/prometheus

3 Grafana

是一个开源的度量分析和可视化系统。

https://grafana.com/grafana

4 数据采集顺序

3.2
监控系统部署

1 Docker部署cAdvisor

在172.16.1.71、73节点上操作

# docker run -d \

--volume=/:/rootfs:ro \

--volume=/var/run:/var/run:ro \

--volume=/sys:/sys:ro \

--volume=/var/lib/docker/:/var/lib/docker:ro
\

--volume=/dev/disk/:/dev/disk:ro \

--publish=8080:8080 \

--detach=true \

--name=cadvisor \

--restart=always \

google/cadvisor:latest

# cadvisor访问url地址

http://172.16.1.73:8080/containers/

http://172.16.1.73:8080/metrics

2 Docker部署Grafana

在172.16.1.71节点上操作

# mkdir -p /opt/grafana/

# chown -R 472.472 /opt/grafana/

# docker run -d \

--name grafana7.1.5 \

-p 3000:3000 \

-v /opt/grafana:/var/lib/grafana \

--restart=always \

grafana/grafana:7.1.5

# 数据目录/var/lib/grafana

# grafana访问url地址

http://172.16.1.71:3000

grafana初次访问的用户名和密码都是"admin",输入初始密码后会让你修改

密码,我这里密码设置为"123456"

3 Docker部署Prometheus

在172.16.1.71节点上操作

# mkdir -p /opt/prometheus/

# 上传prometheus.yml文件到/opt/prometheus/目录,添加监控主机如下

# docker run -d \

--name prometheus \

-p 9090:9090 \

-v /opt/prometheus:/etc/prometheus \

--restart=always \

prom/prometheus

# 配置文件目录/etc/prometheus

# Prometheus访问url地址

http://172.16.1.71:9090/

3.3
Grafana展示

1 添加prometheus库

2 添加模版

https://grafana.com/dashboards

ID:193

3 会看到一个监控172.16.1.71、72上所有容器(cpu、内存、网络)的dashboard。

3.4
监控多Docker主机

1 添加选择多节点按钮

label_values(up,instance)

2 图表增加筛选条件

' ,instance="$Node" '

4 补充

4.1
docker图形化界面

在172.16.1.73节点上操作

1 说明

Docker 图形化管理提供了很多工具,有Portainer、Docker UI、Shipyard等等,本文主要介绍Portainer。Portainer是一个开源、轻量级Docker管理用户界面,基于Docker API,提供状态显示面板、应用模板快速部署、容器镜像网络数据卷的基本操作(包括上传下载镜像,创建容器等操作)、事件日志显示、容器控制台操作、Swarm集群和服务等集中管理和操作、登录用户管理和控制等功能。功能十分全面,基本能满足中小型单位对容器管理的全部需求。

官方网站:https://portainer.io/

官方文档:https://portainer.readthedocs.io/

演示网址:http://demo.portainer.io
账号admin 密码
tryportainer

2 安装

# docker run -d \

--name portainerUI \

-p 9000:9000 \

-v /var/run/docker.sock:/var/run/docker.sock
\

-v /opt/portainer_data:/data \

portainer/portainer

# 数据目录/data

# 访问portainer

http://172.16.1.73:9000/

3 设置一个密码即可,点击创建用户

4 我们搭建的是单机版,直接选择Local ,点击连接

5 现在就可以使用了,点击Local进入仪表盘主页面

6 容器页面

7 portainer
管理远程docker主机

(1)
在172.16.1.72节点上开启DockerAPI

# vim
/usr/lib/systemd/system/docker.service

ExecStart=/usr/bin/dockerd -H tcp://0.0.0.0:2375 -H
unix:///var/run/docker.sock

# systemctl daemon-reload

# systemctl restart docker

# netstat -tulp | grep docker

tcp6       0      0 [::]:2375               [::]:*                  LISTEN      2132/dockerd

(2)
添加远程docker主机

(3)
添加成功

4.2
grafana图标不出数据的原因

1 时间没有同步

2 promql有问题,可能是版本不兼容

3 prometheus里没有数据

Docker入门与进阶(下)的更多相关文章

  1. Docker入门与进阶(上)

    Docker入门与进阶(上) 作者 刘畅 时间 2020-10-17 目录 1 Docker核心概述与安装 1 1.1 为什么要用容器 1 1.2 docker是什么 1 1.3 docker设计目标 ...

  2. 这是一次 docker 入门实践

    前言 其实接触 docker 也有一段时间了,但是一直没有做下总结,现在网上关于 docker 的介绍也有很多了,本着好记性不如烂笔头的原则,还是自己再记录一波吧. 实现目标 安装 docker ce ...

  3. Docker入门教程(五)Docker安全

    Docker入门教程(五)Docker安全 [编者的话]DockOne组织翻译了Flux7的Docker入门教程,本文是系列入门教程的第五篇,介绍了Docker的安全问题,依然是老话重谈,入门者可以通 ...

  4. Docker入门之七Dockerfile

    Dockerfile是一个文本格式的配置文本,可以使用它来创建自定义的镜像.首先我们可以先看一个dockerfile是什么样子.这里可以有一个网站不错:http://dockerfile.github ...

  5. Docker入门学习总结

    1. 什么是Docker Docker是一种虚拟化技术,其在容器的基础上进一步封装了文件系统.网络互联.进程隔离等等,从而极大地简化了容器的创建和维护.Docker使用 Google 公司推出的 Go ...

  6. 推荐 10 本 Go 经典书籍,从入门到进阶(含下载方式)

    书单一共包含 10 本书,分为入门 5 本,进阶 5 本.我读过其中 7 本,另外 3 本虽然没读过,但也是网上推荐比较多的. 虽然分了入门和进阶,但是很多书中这两部分内容是都包含了的.大家看的时候可 ...

  7. 第三章 Docker 入门

    第三章 docker 入门 3.1 确保docker已经就绪 首先查看docker程序是否存在,功能是否正常 [#3#cloudsoar@cloudsoar-virtual-machine ~]$su ...

  8. Docker入门教程(八)Docker Remote API

    Docker入门教程(八)Docker Remote API [编者的话]DockerOne组织翻译了Flux7的Docker入门教程,本文是系列入门教程的第八篇,重点介绍了Docker Remote ...

  9. Docker入门教程(七)Docker API

    Docker入门教程(七)Docker API [编者的话]DockerOne组织翻译了Flux7的Docker入门教程,本文是系列入门教程的第七篇,重点介绍了Docker Registry API和 ...

随机推荐

  1. Azure DevOps(一)利用Azure DevOps Pipeline 构建应用程序镜像到AWS ECR

    一,引言 最近项目上让开始学习AWS,作为一名合格的开发人员,当然也是学会利用Azure DevOps Pipeline 将应用程序部署到 AWS ECS(完全托管的容器编排服务).我们要学会将应用程 ...

  2. gdb 调试,当发现程序退出,需要定位程序退出位置时。

    在进入gdb后设置,执行下面语句 handle SIGSEGV nopass handle SIGSEGV nostop 执行程序,触发问题,gdb侧执行c 故障出现时,执行bt,显示堆栈调用.

  3. 2.9. 管道和重定向ls /proc && echo suss! || echo failed. 能够提示命名是否执行成功or失败; 与上述相同效果的是: if ls /proc; then echo suss; else echo fail; fi

    2.9. 管道和重定向 批处理命令连接执行,使用 | 串联: 使用分号 ; 前面成功,则执行后面一条,否则,不执行:&& 前面失败,则后一条执行: || ls /proc && ...

  4. jmeter 通过CSV Data Set Config控件参数化

    CSV Data Set Config控件配置如下: 被导入的.csv 文件内容如下 用excel打开如下 设置中url2对应:cn.toursforfun.com 和 www.163.com url ...

  5. 018.Python迭代器以及map和reduce函数

    一 迭代器 能被next进行调用,并且不断返回下一个值的对象 特征:迭代器会生成惰性序列,它通过计算把值依次的返回,一边循环一边计算而不是一次性得到所有数据 优点:需要数据的时候,一次取一个,可以大大 ...

  6. 76-Java安装Eclipse并创建第一个HelloWorld.md

    76-Java安装Eclipse并创建第一个HelloWorld.md 首先确定已经安装Java系统环境,若未安装,请参考博客Java环境windows搭建 访问Eclipse官网 下载完成直接发送快 ...

  7. Kubernetes集群搭建 ver1.20.5

    目录 部署方式 1. 基础环境准备 1.1 基础初始化 1.2 安装docker 2. 部署harbor及haproxy高可用反向代理 2.1 镜像加速配置 2.2 高可用master可配置 3. 初 ...

  8. Linux(CentOS7)下rpm安装MySQL8.0.16

    记录一下自己在 CentOS7 下 rpm 安装 MySQL8.0.16 的过程. 一.准备工作 1. 下载MySQL所需要的安装包 从 MySQL官网 下载,上传至 CentOS 系统 /usr/l ...

  9. Mysql索引数据结构为什么是B+树?

    目录 Mysql索引数据结构 二叉树 红黑树 B-Tree B+Tree Mysql索引数据结构 下面列举了常见的数据结构 二叉树 红黑树 Hash表 B-Tree(B树) Select * from ...

  10. 内建函数 iter()

    可以选择接受一个无参的可调用对象以及一个哨兵(结束)作为输入.当已这种方式使用时,iter()会创建i一个迭代器,然后重复调用用户提供的可调用对象,直到返回哨兵的值为止. import sys wit ...