提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档
文章目录
- 前言
- 一、 什么是docker
- 二、容器和虚拟机的区别
- 三、安装doker
- 三、 docker镜像常用命令
- 四、docker实战
- 五、 手动创建nginx单服务docker镜像
- 六、 dockerfile自动构建镜像
- 五、 使用alpine制作系统镜像
- 六、docker分层
- 七 、dockerfile的优化
- 一. 容器之间的互联
- 二、启动zabbix服务
- 三、单机容器编排工具 写一个yaml
- 二、docker私有或官方有仓库(docker registry)
- 三、docker基础网络
- 四、跨宿主机容器之间的通讯
- 五、docker容器的监控 cadvisor+普罗米修斯+grafana(优化图形界面) 的安装
前言
提示:这里可以添加本文要记录的大概内容:
例如:随着人工智能的不断发展,机器学习这门技术也越来越重要,很多人都开启了学习机器学习,本文就介绍了机器学习的基础内容。
提示:以下是本篇文章正文内容,下面案例可供参考
一、 什么是docker
容器是隔离的环境中运行的一个进程,如果进程结束,容器就会停止,容器的隔离环境,拥有自己的ip地址,系统文件,主机名,进程管理
程序: 代码,软件,命令
进程:正在运行的程序
docker是一个cs架构,docker主要包含:镜像 容器 仓库 网络 存储 监控
docker是一个软件打包技术(容器安装好mysql5.7 可以打包成镜像发到仓库)
下载docker 镜像mysql5.7启动容器 启动mysql5.7
二、容器和虚拟机的区别
虚拟机: 硬件cpu支持(vt虚拟化),模拟计算硬件,走正常的开机启动
bios开机自检–根据bios启动项–读取硬盘第一个扇区grub,uefi, centos7, 加载内核,启动系统第一个进程/sbin/init systemd
容器: 不需要硬件cpu的支持,共用宿主机内核,启动容器的第一个进程 共用宿主机内核 内核最低支持3.8
容器优势: 启动快,性能高,损耗少,轻量级
100虚拟机 100个服务 10宿主机
100容器 100个服务 6宿主机
三、安装doker
-
清华源下载repo文件
curl -o /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo
wget -O /etc/yum.repos.d/docker-ce.repo https://download.docker.com/linux/centos/docker-ce.repo
-
加速下载 修改下载地址
sed -i 's+download.docker.com+mirrors.tuna.tsinghua.edu.cn/docker-ce+' /etc/yum.repos.d/docker-ce.repo
-
下载
yum makecache fast
yum install docker-ce -y
-
验证
-
docker加速
vim /etc/docker/daemon.json (默认不存在) 删除#号行
{
"registry-mirrors": [
# "https://1nj0zren.mirror.aliyuncs.com",
# "https://docker.mirrors.ustc.edu.cn",
# "http://f1361db2.m.daocloud.io",
"https://registry.docker-cn.com"
]
}
- (可选)修改网卡
#echo net.ipv4.ip_forward=1 >> /usr/lib/sysctl.d/00-system.conf
三、 docker镜像常用命令
docker run -d -p 80:80 nginx:latest
run 创建并启动一个容器
-d 放置后台启动
-p 端口映射
nginx:latest docker 镜像名称
docker 命令进行分组 | |
---|---|
docker images | 列出本地镜像 |
docker container | 容器命令 |
docker volume | 卷命令 |
docker network | 网络命令 |
docker image 镜像命令 | |
---|---|
docker search httpd | 搜索镜像 |
docker image push | 推送镜像(上传镜像) |
docker image pull | 拉取镜像(下载镜像) |
docker image save nginx:latest -o docker_nginx.tar.gz | 导出镜像 指定包名 |
docker image load -i docker_nginx.tar.gz | 导入镜像 -i 指定压缩包的位置 |
docker image ls | 查看镜像列表 |
docker image rmi | 删除镜像 |
docker image tag ID xxx:xx | 给镜像命名及打标签 |
docker image prune | 自动删除不运行的镜像 |
docker build | |
–network host | 使用本地地址解析及主机名 |
3.1 docker容器的常用命令
docker container 容器命令 | docker run =docker creat +docker start 创建并启动容器 |
---|---|
docker run -d -p 80:80 nginx:latest | 运行镜像 -d守护进程 -p端口映射 |
docker run -it centos:6.9 /bin/bash | 进入到容器里 -it 分配一个交互式终端 |
docker run --name kk nginx:latest | 给容器命名为kk |
docker run --restart always | 开机自启 |
docker --name | 设置名字 |
docker --link | 单向连接网络 |
–memory 10m | 容器最大内存10m |
–volumes-from | |
docker container ls -a = docker ps -a | 长格式显示容器 (-q 段格式显示) |
docker container create nginx:latest | 创建nginx容器(用的少 一般直接docker run) |
docker container start d5b7f571ebe4 | 启动容器(用的少 一般直接docker run) |
docker start/stop/restart xxxx | 开启/关闭/重启 容器 |
docker rm xxxx | 删除容器 |
docker rm -f `docker ps -aq` | 一键删除所有容器 |
docker kill xxxx | 强制停止容器 |
docker ps xxxx | 查看容器列表 -a 全部列表 |
docker rm -f | 强制删除容器 |
docker prune | 自动删除不运行的容器 |
docker attach abd828143a54 | 进入正在运行的容器(同一个终端)Ctrl+p Ctrl+q |
docker exec | 进入正在运行的容器(不同终端) |
docker cp | 从容器拉取到宿主机 或从宿主机推到容器 |
diff | 看容器和镜像相比 发生了哪些变化 |
docker export 89d9as9f0a > dcoker_tar.gz | 把容器导出成压缩包 |
docker import dcoker_tar.gz | 导入压缩包 |
docker inspect | 查看属性 |
docker logs | 查看容器输出 |
docker pause | 挂起容器 |
docker unpause | 恢复挂起 |
docker port | 查看已有容器端口 |
docker rename | 重命名容器 |
docker stats --no-stream | 查看容器占了多少资源 |
docker update | 更新容器的资源限制 |
docker update --restart always | 使容器开机自启 |
3.2 docker端口映射
docker run | |
---|---|
-p 80:80 | 宿主机端口:容器端口 |
-p 10.0.0.13:80:80 | 宿主机ip1:宿主机端口:容器端口 (多个容器同时使用80端口) |
-p 10.0.0.13::80 | 宿主机ip1::容器端口 随机端口映射 |
-p 10.0.0.13::80/udp | 宿主机ip1::容器端口/udp 使用udp协议做随机端口映射 |
-p 80:80 -p 3306:3306 | 添加两个端口 |
-p 1111-1119:1111-1119 | 端口范围映射 |
-P | 自动随机端口映射 |
四、docker实战
同一台虚拟机添加虚拟ip 都可以访问nginx
ifconfig eth0:1 10.0.0.13/24 up
ifconfig eth0:2 10.0.0.14/24 up
ifconfig eth0:3 10.0.0.15/24 up
docker run -d -p 10.0.0.13:80:80 nginx:latest
docker run -d -p 10.0.0.14:80:80 nginx:latest
docker run -d -p 10.0.0.15:80:80 nginx:latest
4.1 nginx容器安装小鸟飞飞
unzip xiaoniaofeifei.zip -d /opt/xiaoniao/
解压至本地
docker run -d -P -v /opt/xiaoniao:/usr/share/nginx/html nginx:latest
开启容器 随机端口 加载小鸟飞飞
docker run -d -P -v /usr/share/nginx/html nginx:latest
把容器持久化 变成一个卷
docker run -d -P -v hahakuang:/usr/share/nginx/html nginx:latest
固定卷的名称
docker -v指定一个目录后docker会创建一个随机的卷 把目录下的文件拷贝到卷里
保存在本地的 /var/lib/docker/volumes/目录里
宿主机文件内容改变 容器内容也会跟着变
4.2 nginx在同一台机器开放80,81端口
方式一: 在docker中添加*.conf配置文件
docker run -d -p 80-81:80-81 -v /opt/xiaoniao:/opt/xiaoniao nginx:latest
docker exec -it sharp_golick /bin/bash
echo 'server {
listen 81;
server_name localhost;
location / {
root /opt/xiaoniao;
index index.html index.htm;
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root /usr/share/nginx/html;
}
}' >/etc/nginx/conf.d/xiaoniao.conf
docker restart sharp_golick
方式二: 从宿主机上复制配置文件
docker container cp xiaoniao.conff f892c205c266:/etc/nginx/conf.d/
方式三:-v 创建时拷贝文件
docker run -d -p 80-81:80-81 -v /opt/xiaoniao:/opt/xiaoniao -v /root/xiaoniao.conf:/etc/nginx/conf.d/xiaoniao.conf nginx:latest
五、 手动创建nginx单服务docker镜像
步骤:
docker run -it -p 80:80 centos:6.9 /bin/bash
开启centos容器curl -o /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-6.repo
vi /etc/yum.repos.d/nginx.repo
安装nginx
[nginx-stable]
name=nginx stable repo
baseurl=http://nginx.org/packages/centos/$releasever/$basearch/
gpgcheck=1
enabled=1
gpgkey=https://nginx.org/keys/nginx_signing.key
module_hotfixes=true
yum install nginx -y
-
echo 'daemon off;'>> /etc/nginx/nginx.conf
全局指令 -
docker container commit fe33616277ff centos6.9_nginx:v1
把容器做成镜像 后面跟名字和版本 -
docker run -d -p 80:80 centos6.9_nginx:v1 nginx
测试镜像 手动添加nginx启动命令
5.1 手动创建nginx+ssh多服务docker镜像
- 启动nginx服务再安装ssh服务
docker run -it -p 80:80 -p 1022:22 centos6.9_nginx:v1 /bin/bash
- 宿主机查看软件包名 容器下载软件
rpm -qf ` which ssh `
yum install openssh-server -y
- 重启sshd服务 生成密钥对
因为缺少密钥对/usr/sbin/sshd -D
重启服务生成密钥对service sshd restart
echo '123456'|passwd --stdin root
- 生成nginx sshd服务的卷
docker container commit 58ac738435c4 centos6.9_nginx_sshd:v1
- 启动服务
因为docker run -it -d -p 80:80 -p 1022:22 centos6.9_nginx_sshd:v1
容器初始命令只能执行一条
所以可以在容器中添加一个脚本 docker命令执行脚本
vim init.sh
/usr/sbin/sshd -p
nginx
docker run -it -d -p 80:80 -p 1022:22 centos6.9_nginx_sshd:v1 /bin/bash /init.sh
5.2 环境 kodexplorer可道云(nginx+php)
-
启动nginx基础环境容器,在容器中安装服务
docker run -it -p 80:80 centos6.9_nginx:v1 /bin/bash
-
安装基础环境–php
yum install php-fpm php-gd php-mbstring -y
-
修改php nginx配置文件
vi /etc/php-fpm.d/www.conf
user = apache 改成nginx
group = apache
- 修改配置文件
vi /etc/nginx/conf.d/default.conf
server {
server_name localhost;
root /code;
listen 80;
index index.htm index.html index.php;
location ~ \.php$ {
fastcgi_pass 127.0.0.1:9000;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}
}
- 上传解压可道云代码
docker cp ./kodexplorer4.40.zip bf7c43ce52f9:/code
yum install unzip
unzip kodexplorer4.40.zip
chown -R nginx.nginx .
- 开启服务
service php-fpm start
nginx -g "daemon off;"
- 编辑一个启动脚本
vi /init.sh
#!/bin/bash
service php-fpm start
nginx -g "daemon off;"
- 登陆网站测试
- 提交镜像
docker commit bf7c43ce52f9 kod:v1
- 测试
docker run -d -p 80:80 kod:v1 /bin/bash /init.sh
六、 dockerfile自动构建镜像
mkdir -p /dockerfile/nginx/
编写dockerfile文件
vim /dockerfile/nginx/dockerfile
FROM centos:6.9
RUN curl -o /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-6.repo
RUN yum install nginx -y
CMD ["nignx","-g","daemon off;"]
自动创建镜像
docker image build -t centos6.9_nginx:v2 /dockerfile/nginx/
6.1常用命令
FROM 基础镜像 例子: FROM centos:6.9
RUN 制作镜像过程中需要的执行命令(安装服务) 每个run就产生一个零时镜像 例子: RUN yuminstall -y nginx
CMD 容器启动的时候执行的初始命令,容易被替换(启动服务) 例子: CMD ["nginx","-g","daemonoff;"]
ENTRYPOINT 容器启动的时候执行的初始命令,不能被替换,如果同时使用CMD和ENTRYPOINT,cmd 命令将作为ENTRYPOINT命令的参数
ADD 把dockerfile当前目录下的文件拷贝到容器中(自动解压tar包)例子: ADD 1.tar /usr/share/nginx/html
COPY 把dockerfile当前目录下的文件拷贝到容器中(不解压tar包)例子: COPY 1.txt /usr/share/nginx/html
WORKDIR 指定容器的默认工作目录 类似于cd 开始就切换到指定目录 例子: WORKDIR 目录 : 进入容器的时候默认所在目录
EXPOSE 镜像要暴露的端口 例子: EXPOSE 端口 端口 :要暴露的端口 ,在开启生成容器的时候 有暴漏的端口那么docker可以自动做随机端口映射
VOLUME 持久化卷(自动自动创建随机名字的卷) 例子: VOLUME 容器目录
ENV 环境变量(ssh的密码,数据库的密码) 声明环境变量 例子: ENV LL=xx 多个环境变量就写多个ENV
五、 使用alpine制作系统镜像
官网例子:
https://github.com/CentOS/sig-cloud-instance-images/blob/dcf7932cbda6dd9865d50bfe969927e3e1f0c671/docker/Dockerfile
Alpine下载地址:
https://mirrors.tuna.tsinghua.edu.cn/lxc-images/images/alpine/3.12/amd64/default/20201010_13%3A00/rootfs.tar.xz
- 清华源下载rootfs.tar (系统包)
wget https://mirrors.tuna.tsinghua.edu.cn/lxc-images/images/alpine/3.11/amd64/default/20201004_13%3A00/rootfs.tar.xz
- 编写dockerfile文件
mkdir /dockerfile/alpine -p
mv /root/rootfs.tar.xz /dockerfile/alpine/
vim /dockerfile/alpine/dockerfile
FROM scratch
ADD rootfs.tar.xz /
CMD ["/bin/sh"]
- 制作alpine镜像
docker build -t alpine:v1 .
- 测试
docker run -it alpine:v1 /bin/sh
5.1 alpine优化
- 更换下载源
sed -i 's/dl-cdn.alpinelinux.org/mirrors.tuna.tsinghua.edu.cn/g' /etc/apk/repositories
- 更新软件包索引
apk update
- 安装nginx
apk add nginx
mkdir /run/nginx
- 把容器提交为镜像
docker commit 654551f83abc alpine_nginx:v1
- 启动容器测试
docker run -d -p 81:80 alpine_nginx:v2 nginx -g "dameon off;"
六、docker分层
优点: 复用,节省磁盘空间,加快启动速度。
一个docker镜像至少包含一层
层之间空间复用; 例如导入wordpress镜像,有两层分别是centos7和wordpress 但在导入一
次centos7镜像的时候,就只导入镜像名, 实际导入的镜像空间服用了
docker history 镜像名字 :查看镜像有多少层, 产生文件变化,就会多一层
层和层之间是有parent id
/var/lib/docker/overlay2 目录下,存储parent id 信息
/var/lib/docker 目录下, 存储docker的镜像,容器 和其他信息
七 、dockerfile的优化
7.1 alpine
- 体积最小的linux系统
docker run -P -d alpine:3.9 /bin/sh
- 修改成国内源
sed -i 's/dl-cdn.alpinelinux.org/mirrors.tuna.tsinghua.edu.cn/g' /etc/apk/repositories
- 更新软件源
apk update
- 安装nginx
apk add nginx
八、容器和容器之间的访问
容器的ip地址不固定
容器的ip地址不固定
docker run --link 90dsa90989f:98das91
会将当前目录所有的文件都传输到容器中,没有使用再在内存中删除,这样很多本来用不到的文件也会浪费时
间,所以编辑一个dockerignore文件 (vim dockerignore) 里面写上不需要的文件,就不会有前面的浪费
docker 镜像的每一层都只保留变化的内存,例如文件的属主属组变化
例如: 基于alpine 制作nginx镜像
第一步进入alpine镜像: docker run -it alpine:latest /bin/sh
第二步修改下载源: / # sed -i ‘s/dl-cdn.alpinelinux.org/mirrors.tuna.tsinghua.edu.cn/g’
/etc/apk/repositories
第三步更行软件仓库 😕 # apk update
第四步下载nginx: / # apk add nginx
第五步导入启动脚本文件: docker cp init.sh 2ecdacdc6f6c:/init.sh
第六步导出为镜像 [root@docker02 wordpress]# docker commit 2ecdacdc6f6c alpine_nginx:v1
第七步启动导出的镜像 [root@docker02 wordpress]# docker run -d -p 89:80 alpine_nginx:v2
/bin/sh /init.sh
一. 容器之间的互联
suse zypper
ubantu apt apt-get
alpine apk
centos7 yum
centos8 dnf
问题:docker启动时IP地址不固定 无法连接到mysql容器
命名
docker -d -name web01 kod:v5
link单向通讯
docker -run -it --link web01:v1 --link php-fpm:v1 mysql:v1
二、启动zabbix服务
找到安装包
docker-mysql-5.7.tar.gz zabbix-java-gateway.tar.gz zabbix-server-mysql.tar.gz zabbix-web-nginx-mysql.tar.gz
-
批量上传镜像
for i in `ls ./*.gz` ; do docker load -i $i ;done
-
启动mysql zabbix容器
docker run --name mysql-server -it \
-e MYSQL_DATABASE="zabbix" \
-e MYSQL_USER="zabbix" \
-e MYSQL_PASSWORD="zabbix_pwd" \
-e MYSQL_ROOT_PASSWORD="root_pwd" \
-d mysql:5.7 \
--character-set-server=utf8 --collation-server=utf8_bin
docker run --name zabbix-java-gateway -t \
-d zabbix/zabbix-java-gateway:latest
docker run --name zabbix-server-mysql -t \
-e DB_SERVER_HOST="mysql-server" \
-e MYSQL_DATABASE="zabbix" \
-e MYSQL_USER="zabbix" \
-e MYSQL_PASSWORD="zabbix_pwd" \
-e MYSQL_ROOT_PASSWORD="root_pwd" \
-e ZBX_JAVAGATEWAY="zabbix-java-gateway" \
--link mysql-server:mysql \
--link zabbix-java-gateway:zabbix-java-gateway \
-p 10051:10051 \
-d zabbix/zabbix-server-mysql:latest
docker run --name zabbix-web-nginx-mysql -t \
-e DB_SERVER_HOST="mysql-server" \
-e MYSQL_DATABASE="zabbix" \
-e MYSQL_USER="zabbix" \
-e MYSQL_PASSWORD="zabbix_pwd" \
-e MYSQL_ROOT_PASSWORD="root_pwd" \
--link mysql-server:mysql \
--link zabbix-server-mysql:zabbix-server \
-p 80:80 \
-d zabbix/zabbix-web-nginx-mysql:latest
三、单机容器编排工具 写一个yaml
功能:
- 批量启动容器
- 批量关闭容器
- 批量重启容器
工具docker-compose 有三个版本 : v1 v2 v3
不同版本语法不同
四、安装docker-compose
- 更新epel源
curl -o /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-7.repo
- yum下载
yum install -y docker-compose
- 写一个yaml文件
mkdir -p /dockerfile/docker-compose/zabbix
vi /dockerfile/docker-compose/zabbix/docker-compose.yml
version: '3' #首先需要声明docker-compose版本,分别是v1,v2,v3 不同版本yaml配置文件语法不同
services:
mysql-server:#服务名称
image: mysql:5.7#镜像
restart: always#docker重启,容器也重启,
environment:#声明环境变量,有缩进机制
MYSQL_ROOT_PASSWORD: root_pwd
MYSQL_DATABASE: zabbix
MYSQL_USER: zabbix
MYSQL_PASSWORD: zabbix_pwd
command: --character-set-server=utf8 --collation-server=utf8_bin
zabbix-java-gateway:
image: zabbix/zabbix-java-gateway:latest
restart: always
zabbix-server:
depends_on: #启动依赖mysql-server先启动
- mysql-server
image: zabbix/zabbix-server-mysql:latest
restart: always
environment:
DB_SERVER_HOST: mysql-server
MYSQL_DATABASE: zabbix
MYSQL_USER: zabbix
MYSQL_PASSWORD: zabbix_pwd
MYSQL_ROOT_PASSWORD: root_pwd
ZBX_JAVAGATEWAY: zabbix-java-gateway
ports:
- "10051:10051"
zabbix-web-nginx-mysql:
depends_on:
- zabbix-server
image: zabbix/zabbix-web-nginx-mysql:latest#镜像
ports:#端口映射
- "80:80"
restart: always
environment:
DB_SERVER_HOST: mysql-server
MYSQL_DATABASE: zabbix
MYSQL_USER: zabbix
MYSQL_PASSWORD: zabbix_pwd
MYSQL_ROOT_PASSWORD: root_pwd
- 批量启动(临时)
docker-compose up
docker-compose | 常用命令 |
---|---|
dockercompose up -d | 在后台启动服务 |
dockercompose down | 停止服务 |
dockercompose start | 批量启动容器 |
dockercompose stop | 批量停止容器 |
dockercompose restart | 批量重启容器 |
-f可以指定dockercompose | 文件所在位置 |
二、docker私有或官方有仓库(docker registry)
docker 是一种软件打包技术
私有仓库的镜像是有域名的
私有仓库pull镜像要加域名,否则是从官方仓库下载
push镜像到私有仓库也需要加域名
docker registry: 功能弱.占用资源少.
#镜像地址
官方仓库:docker push nginx:latest
官方私人仓库:docker push hahakuang2009/alpine:v1
私有仓库:docker push 10.0.0.12/alpine:v1
或者docker push www.hahakuang.top/alpine:v1
2.1 启动私有仓库 服务端 10.0.0.11
开启私有仓库
[root@docker01 ~]# docker run -d -p 5000:5000 --restart=always --name registry -v /opt/myregistry:/var/lib/registry registry
这个私有仓库用的是http协议
上传镜像 客户端 10.0.0.12
#第一次上传镜像会报错
- 修改配置文件
[root@docker02 ~]#vim /etc/docker/daemon.json
{
"registry-mirrors": ["http://registry.docker-cn.com"],
"insecure-registries": ["10.0.0.11:5000"]
}
- 重启服务
systemctl restart docker
- 打标签并上传到私有仓库
docker tag alpine:3.9 10.0.0.11:5000/alpine:3.9
docker image push 10.0.0.11:5000/alpine:3.9
#下载镜像
docker image pull 10.0.0.11:5000/alpine:3.9
私有仓库镜像列表
10.0.0.11:5000/v2/_catalog
10.0.0.11:5000/v2/镜像/tags/list
#删除私有仓库的镜像
①进入仓库
docker exec -it registry /bin/sh
② 删除repo
rm -fr /var/lib/registry/docker/registry/v2/repositories/nginx
③清楚掉blob
registry garbage-collect /etc/docker/registry/config.yml
2.2 docker 官方仓库上传镜像 (缺点:慢)
-
docker login 登录官方仓库
docker login
Username: hahakuang2009
Password:xxxxxx -
打标签,需要指定自己的官方仓库id
docker tag alpine_nginx:v2 hahakuang2009/apline_nginx:v1
-
上传镜像
docker push hahakuang2009/alpine_nginx:v1
2.3 制作本地仓库 Harbor (本地 快)
基础环境:docker docker-compose服务
- 下载Harbor安装包
https://github.com/goharbor/harbor/archive/master.zip
- 解压
tar xf harbor-offline-installer-v2.1.0.tgz -C /opt
- 复制模板配置文件
cp harbor.yml.tmpl harbor.yml
- ssl证书
去阿里云下载证书 证书目录和配置文件中一致 - 修改配置文件
vi harbor.yml
不能有空格
#ip地址或者域名 使用ip地址则注销https
hostname: www.hahakuang.top
# https related config
# https related config
https:
# https port for harbor, default is 443
port: 443
# The path of cert and key files for nginx
certificate: /opt/harbor/zhengshu/3543938_www.hahakuang.top.pem
private_key: /opt/harbor/zhengshu/3543938_www.hahakuang.top.key
harbor_admin_password: 123456
- 安装
./install.sh
- 检测
#浏览器查看 http://10.0.0.12
初始账户:admin
密码:123456
客户端
#没有配置https需要修改 /etc/docker/daemon.json 重启服务
{
"registry-mirrors": ["http://registry.docker-cn.com"],
#和安装地址一样
"insecure-registries": ["10.0.0.12"]
}
#systemctl restart docker
#删除旧的密码文件rm -rf /root/.docker/config.json
登陆账号
docker login 10.0.0.12
admin
123456
打标签并测试
docker tag centos:7 10.0.0.12/library/centos7:v1
docker push 10.0.0.12/library/centos7:v1
三、docker基础网络
四种基础网络类型
- -network
- bridge 默认类型 NAT模式 docker run 没有指定 --network 就使用默认的网络
host host类型,使用宿主机网络,网络性能最高 容易端口冲突 配置方法 docker run -it --network - host 镜像
使用主机网络 宿主机主机名和容器主机名相同 - container 容器类型。使用其他容器共用网络,k8s中使用,很容易端口冲突 经量再两个容器中使用不同的
服务,要不然会端口冲突
设置方法: docker run -it --network container:要使用哪个容器网络的容器id 镜像 /bin/bash - none 没有网络,上不了外网 设置方法 docker run -it --network none 镜像 只有内网没有外网提供
不了服务,只能用来练习一个基础命令
创建自定义网络
docker network create -d bridge --subnet 172.18.0.0/16 --gateway 172.18.0.1 kk
docker run -P -it --network kk alpine:latest
四、跨宿主机容器之间的通讯
4.1 调静态路由
4.2 macvlan 小规模使用
macvlan类似与虚拟机的桥接网络,不能自动分配网络ip需要手动指定
缺点:容易ip地址冲突
- 创建网络,再要制作macvlan的容器所在的宿主机上添加上以下命令
docker network create -d macvlan --subnet 10.0.0.0/24 --gateway 10.0.0.254 -o parent=eth0 macvlan_1
(网络名称,不要有重复的) - 启动容器
docker run -it --network macvlan_1 --ip 10.0.0.5 alpine:3.9
docker run -it --network macvlan_1 --ip 10.0.0.6 alpine:3.9
4.3 跨宿主机容器间的通讯之overlay
consul 存储ip地址分配和节点
docker03 10.0.0.13 上: consul存储ip地址的分配
docker run -d -p 8500:8500 -h consul --name consul progrium/consul -server -bootstrap
-h: 指定容器主机名
10.0.0.13:8500 访问测试
docker01、02上:
vim /etc/docker/daemon.json
{
"cluster-store": "consul://10.0.0.13:8500", #集群存储信息,注册到哪个consul上面
"cluster-advertise": "10.0.0.11:2376" #节点信息,不同节点信息不一样 11是11的节点信息,12是
12的节点信息
}
systemctl restart docker
2)创建overlay网络 在节点上创建 docker01或者docker02
docker network create -d overlay --subnet 172.26.0.0/16 --gateway 172.26.0.1 ol1
3)启动容器测试
docker01: docker run -it --network ol1 --name oldboy01 alpine:3.9 /bin/sh
docerk02: docker run -it --network ol1 --name oldboy02 alpine:3.9 /bin/sh
容器名不能相同
每个容器有两块网卡,eth0实现容器间的通讯,eth1实现容器访问外网
测试: 在docker02中 ping docker01
/ # ping oldboy01
五、docker容器的监控 cadvisor+普罗米修斯+grafana(优化图形界面) 的安装
docker stats --no-stream 容器id : 监控容器状态
普罗米修斯监控不同的服务需要安装不同的exporter. 普罗米修斯可以收集数据,自带时间序列数据库,
使用prometheus监控需要在Prometheus.yaml中配置监控列表.
promethues 原理
客户端node节点
- 启动node-exporter 用来采集宿主机信息
下载monitor_html.tar.gz镜像
docker run -d -p 9100:9100 -v "/:/host:ro,rslave" --name=node_exporter quay.io/prometheus/node-exporter --path.rootfs /host
- 启动cadvisor
docker run --volume=/:/rootfs:ro --volume=/var/run:/var/run:rw --volume=/sys:/sys:ro --volume=/var/lib/docker/:/var/lib/docker:ro --publish=8080:8080 --detach=true --name=cadvisor google/cadvisor:latest
服务端prometheus主节点 docker03
从官网下载prometheus-2.22.0.linux-amd64.tar.gz
安装prometheus和grafana
tar xf prometheus-2.12.0.linux-amd64.tar.gz
cd prometheus-2.12.0.linux-amd64/
vim prometheus.yml
# metrics_path defaults to '/metrics'
# scheme defaults to 'http'.
static_configs:
- targets: ['localhost:9090']
- job_name: 'node-exporter'
static_configs:
- targets: ['10.0.0.11:9100','10.0.0.12:9100']
- job_name: 'cadvisor'
static_configs:
- targets: ['10.0.0.11:8080','10.0.0.12:8080']
启动普罗米修斯
./prometheus --config.file="prometheus.yml" &
浏览器查看http://IP:9090
安装grafana图形化增强
清华源下载rpm包
https://mirrors.tuna.tsinghua.edu.cn/grafana/yum/rpm/grafana-7.2.1-1.x86_64.rpm
上传grafana 压缩包
yum localinstall grafana-6.3.3-1.x86_64.rpm -y
systemctl start grafana-server.service
systemctl enable grafana-server.service
访问grafana http://IP:3000,默认账号admin:admin
新建数据源–导入dashboard模板