doker介绍 安装 LNMP架构服务 docker-compose 容器之间的互联 私有仓库 跨宿主机通讯 监控

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档


前言

提示:这里可以添加本文要记录的大概内容:
例如:随着人工智能的不断发展,机器学习这门技术也越来越重要,很多人都开启了学习机器学习,本文就介绍了机器学习的基础内容。


提示:以下是本篇文章正文内容,下面案例可供参考

一、 什么是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

  1. 清华源下载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

  2. 加速下载 修改下载地址
    sed -i 's+download.docker.com+mirrors.tuna.tsinghua.edu.cn/docker-ce+' /etc/yum.repos.d/docker-ce.repo

  3. 下载
    yum makecache fast
    yum install docker-ce -y

  4. 验证
    在这里插入图片描述

  5. 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"
    ]
}
  1. (可选)修改网卡
    #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镜像

步骤:
在这里插入图片描述

  1. docker run -it -p 80:80 centos:6.9 /bin/bash 开启centos容器
  2. curl -o /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-6.repo
  3. 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

  1. echo 'daemon off;'>> /etc/nginx/nginx.conf全局指令

  2. docker container commit fe33616277ff centos6.9_nginx:v1把容器做成镜像 后面跟名字和版本

  3. docker run -d -p 80:80 centos6.9_nginx:v1 nginx 测试镜像 手动添加nginx启动命令

5.1 手动创建nginx+ssh多服务docker镜像

  1. 启动nginx服务再安装ssh服务
    docker run -it -p 80:80 -p 1022:22 centos6.9_nginx:v1 /bin/bash
  2. 宿主机查看软件包名 容器下载软件
    rpm -qf ` which ssh `
    yum install openssh-server -y
  3. 重启sshd服务 生成密钥对
    因为缺少密钥对 /usr/sbin/sshd -D
    重启服务生成密钥对service sshd restart
    echo '123456'|passwd --stdin root
  4. 生成nginx sshd服务的卷
    docker container commit 58ac738435c4 centos6.9_nginx_sshd:v1
  5. 启动服务
    因为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)

在这里插入图片描述

  1. 启动nginx基础环境容器,在容器中安装服务
    docker run -it -p 80:80 centos6.9_nginx:v1 /bin/bash

  2. 安装基础环境–php
    yum install php-fpm php-gd php-mbstring -y

  3. 修改php nginx配置文件
    vi /etc/php-fpm.d/www.conf

user = apache    改成nginx
group = apache
  1. 修改配置文件
    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;
        }
}
  1. 上传解压可道云代码
    docker cp ./kodexplorer4.40.zip bf7c43ce52f9:/code
    yum install unzip
    unzip kodexplorer4.40.zip
    chown -R nginx.nginx .
  2. 开启服务
    service php-fpm start
    nginx -g "daemon off;"
  3. 编辑一个启动脚本
    vi /init.sh
#!/bin/bash
service php-fpm start
nginx -g "daemon off;"
  1. 登陆网站测试
  2. 提交镜像
    docker commit bf7c43ce52f9 kod:v1
  3. 测试
    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

  1. 清华源下载rootfs.tar (系统包)
    wget https://mirrors.tuna.tsinghua.edu.cn/lxc-images/images/alpine/3.11/amd64/default/20201004_13%3A00/rootfs.tar.xz
  2. 编写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"]
  1. 制作alpine镜像
    docker build -t alpine:v1 .
  2. 测试
    docker run -it alpine:v1 /bin/sh

5.1 alpine优化

  1. 更换下载源
    sed -i 's/dl-cdn.alpinelinux.org/mirrors.tuna.tsinghua.edu.cn/g' /etc/apk/repositories
  2. 更新软件包索引
    apk update
  3. 安装nginx
    apk add nginx
    mkdir /run/nginx
  4. 把容器提交为镜像
    docker commit 654551f83abc alpine_nginx:v1
  5. 启动容器测试
    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

  1. 体积最小的linux系统
    docker run -P -d alpine:3.9 /bin/sh
  2. 修改成国内源
    sed -i 's/dl-cdn.alpinelinux.org/mirrors.tuna.tsinghua.edu.cn/g' /etc/apk/repositories
  3. 更新软件源
    apk update
  4. 安装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
  1. 批量上传镜像
    for i in `ls ./*.gz` ; do docker load -i $i ;done

  2. 启动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

功能:

  1. 批量启动容器
  2. 批量关闭容器
  3. 批量重启容器

工具docker-compose 有三个版本 : v1 v2 v3
不同版本语法不同

四、安装docker-compose

  1. 更新epel源
    curl -o /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-7.repo
  2. yum下载
    yum install -y docker-compose
  3. 写一个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
  1. 批量启动(临时)
    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

#第一次上传镜像会报错

  1. 修改配置文件
    [root@docker02 ~]#vim /etc/docker/daemon.json
{
"registry-mirrors": ["http://registry.docker-cn.com"],
"insecure-registries": ["10.0.0.11:5000"]
}
  1. 重启服务
    systemctl restart docker
  2. 打标签并上传到私有仓库
    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 官方仓库上传镜像 (缺点:慢)

  1. docker login 登录官方仓库
    docker login
    Username: hahakuang2009
    Password:xxxxxx

  2. 打标签,需要指定自己的官方仓库id
    docker tag alpine_nginx:v2 hahakuang2009/apline_nginx:v1

  3. 上传镜像
    docker push hahakuang2009/alpine_nginx:v1

2.3 制作本地仓库 Harbor (本地 快)

基础环境:docker docker-compose服务

  1. 下载Harbor安装包
    https://github.com/goharbor/harbor/archive/master.zip
  2. 解压
    tar xf harbor-offline-installer-v2.1.0.tgz -C /opt
  3. 复制模板配置文件
    cp harbor.yml.tmpl harbor.yml
  4. ssl证书
    去阿里云下载证书 证书目录和配置文件中一致
  5. 修改配置文件
    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
  1. 安装
    ./install.sh
  2. 检测
    #浏览器查看 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地址冲突

  1. 创建网络,再要制作macvlan的容器所在的宿主机上添加上以下命令
    docker network create -d macvlan --subnet 10.0.0.0/24 --gateway 10.0.0.254 -o parent=eth0 macvlan_1
    (网络名称,不要有重复的)
  2. 启动容器
    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" #节点信息,不同节点信息不一样 1111的节点信息,1212的节点信息
}

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节点

  1. 启动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
  2. 启动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模板

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值