docker

在这里插入图片描述

1. 什么是容器

容器是隔离的环境中运行的一个进程,如果进程结束,容器就会停止,容器的隔离环境,拥有自己的ip地址,系统文件,主机名,进程管理

1)docker-ce的安装

主机名内存ip
docker012G10.0.0.11
docker022G10.0.0.12
#开启yum缓存
keepcache=1
#安装docker-ce
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 install docker-ce -y

systemctl enable docker
systemctl start docker

#验证
[root@docker01 yum.repos.d]# docker version 
Client: Docker Engine - Community
 Version:           19.03.5
 API version:       1.40
 Go version:        go1.12.12
 Git commit:        633a0ea
 Built:             Wed Nov 13 07:25:41 2019
 OS/Arch:           linux/amd64
 Experimental:      false
#docker01
mkdir docker_rpm
find /var/cache/yum/x86_64/7/ -type f -name "*.rpm"
find /var/cache/yum/x86_64/7/ -type f -name "*.rpm"|xargs mv -t docker_rpm
ls docker_rpm
tar zcf docker_rpm.tar.gz docker_rpm
scp docker_rpm.tar.gz 10.0.0.12:/root
#docker02
tar xf docker_rpm.tar.gz 
cd docker_rpm/
ls
yum localinstall *.rpm -y

2. docker镜像常用指令(image)

docker镜像:把系统文件打成压缩包
find /root/ -type f -name “*.tar.gz” | xargs -i docker load -i {}
或者for n in ls *.tar.gz; do docker image load -i $n ; done

docker search    搜索镜像, 优先选官方
docker pull      拉取镜像(下载镜像)
docker push      推送镜像(上传镜像)
docker load      导入镜像
docker save      导出镜像
docker images    查看镜像列表
docker rmi       删除镜像
docker tag       给镜像打标签
docker inspect   查看镜像属性
docker image prune  清理无效镜像文件
docker system prune 清理所有无效镜像容器文件
docker build     自动构建镜像
docker history   查看镜像构建历史
例子: docker load  -i  docker_nginx.tar.gz  导入
例子:docker save centos:7 -o docker_centos7.tar.gz 导出

3. docker容器的常用命令(container)

docker run     创建并启动容器
docker create  创建容器
docker start   启动容器
docker stop    停止容器
docker kill    强制停止容器
docker restart 重启容器
docker ps      查看容器列表
docker rm      删除容器
docker exec    进入正在运行的容器(分配一个新终端)
docker attach  进入正在运行的容器(使用相同终端),偷偷离开ctrl+p,ctrl+q
docker commit  将容器提交为镜像
docker cp      在容器和宿主机之间相互拷贝
docker stats   监控容器
docker logs 查看容器初始命令的输出(用来排查)
docker top  查看容器内部启动进程
docker rename  容器重命名
docker rm -f `docker ps -a -q`  批量删除所有容器 
docker exec 进入正在运行的容器(分配一个新终端)
例子: docker exec  -it  容器id/容器名字   /bin/bash(/bin/sh)
-d   后台运行
-p   端口映射
-it  进入容器
--name  指定一个名字
docker ps -a -l   最后一个容器
--no-trunc  示完整命令
nginx -g' daemon off;'  把nginx运行起来,并且夯住(为什么启动nginx容器不用添加初始命令)
docker run(命令)  参数1参数2参数3(没有顺序)  最后一个参数(必须是镜像名称:版本)

4. docker端口映射**

docker run
-p  宿主机端口:容器端口
-p  宿主机ip1:宿主机端口:容器端口 (多个容器同时使用80端口)
-p  宿主机ip1::容器端口       随机端口映射
-p  宿主机ip1::容器端口/udp   使用udp协议做随机端口映射
-p 80:80  -p 3306:3306
-p 1111-1119:1111-1119    端口范围映射
-P 自动随机端口映射
sysctl net.ipv4.ip_forward=0  临时调整内核参数
#添加ip地址
ifconfig eth0:1 10.0.0.10/24
ifconfig eth0:2 10.0.0.9/24

5. docker数据卷**

docker run(挂载的形式,可以在宿主机修改)
-v  宿主机绝对目录:容器目录(目录对目录;文件对文件)
-v  容器目录        #创建一个随机卷,来持久化容器的目录下的数据
-v  卷名:容器目录    #创建一个固定名字的卷,来持久化容器的目录下的数据
--volumes-from      跟某一个容器挂载所有相同的卷
-v  挂载目录的时候,只能用绝对路径,不能使用相对路径

6. 手动制作docker镜像**

1)dockerfile单服务例子—基于centos7系统的nginx镜像
1:启动一个纯净的centos:7容器,在容器中安装nginx
[root@docker01 ~]# docker run --name didi -it -p 80:80 centos:7 
[root@a9e7fb6d2d88 /]# curl -o /etc/yum.repos.d/CentOS-Base.repo 
[root@a9e7fb6d2d88 /]# curl -o /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-7.repo
[root@docker01 ~]# docker cp /etc/yum.repos.d/nginx.repo didi:/etc/yum.repos.d/nginx.repo
[root@a9e7fb6d2d88 /]# yum install nginx -y
[root@581199ef270b ~]# nginx
2:把安装好服务的容器,提交为镜像
[root@docker01 ~]# docker container commit didi centos7_nginx:1.6
3:测试镜像的功能(修改初始命令)
[root@docker01 ~]# docker run -d  -p 81:80 centos7_nginx:1.6 nginx -g 'daemon off;'
2)dockerfile多服务例子1—基于centos7系统的kod网盘的镜像
1:启动一个纯净的centos:7容器,在容器中安装服务(基于上一个做好的nginx镜像即可)
[root@docker01 ~]# docker run -p 80:80 -it --name kod_dd centos7_nginx:1.6 
[root@a9e7fb6d2d88 /]# yum install php-fpm php-gd php-mbstring -y
2:修改配置准备站点目录
[root@a9e7fb6d2d88 /]# vi /etc/php-fpm.d/www.conf 
     39 user = nginx
     41 group = nginx
[root@a9e7fb6d2d88 /]# vi /etc/nginx/conf.d/default.conf 
server {
    listen       80;
    server_name  localhost;
    location / {
        root   /html;
        index  index.php index.html index.htm;
    }
    location ~ \.php$ {
        root           /html;
        fastcgi_pass   127.0.0.1:9000;
        fastcgi_index  index.php;
        fastcgi_param  SCRIPT_FILENAME  /html$fastcgi_script_name;
        include        fastcgi_params;
    }
}
[root@a9e7fb6d2d88 /]# mkdir /html
[root@a9e7fb6d2d88 /]# cd /html/
[root@docker01 ~]# docker cp /opt/dockfile/kod/kodexplorer4.40.zip kod_dd:/html/kodexplorer4.40.zip
[root@a9e7fb6d2d88 html]# yum install -y unzip
[root@a9e7fb6d2d88 html]# unzip kodexplorer4.40.zip
[root@a9e7fb6d2d88 html]# chown -R nginx:nginx /html/
[root@a9e7fb6d2d88 html]# vi /init.sh
#/bin/bash
php-fpm -D
nginx -g 'daemon off;'
[root@a9e7fb6d2d88 html]# nginx
[root@a9e7fb6d2d88 html]# php-fpm -D
3:把安装好服务的容器,提交为镜像
[root@docker01 ~]# docker container commit kod_dd centos7_kod:v1
4:测试镜像的功能(修改初始命令)
[root@docker01 ~]# docker run -d -it -p 81:80 centos7_kod:v1 /bin/bash /init.sh

访问网站10.0.0.11:81
在这里插入图片描述

3)dockerfile多服务例子3—基于centos6系统的httpd+sshd双服务镜像
1:启动一个纯净的centos:7容器,在容器中安装服务
[root@docker01 ~]# docker run --name sshd_httpd -it -p 80:80 -p 1022:22  centos:6.9
[root@efcc408f4049 /]# yum install -y httpd openssh-server
[root@efcc408f4049 /]# vi /init.sh
#/bin/bash
/etc/init.d/sshd start;
/usr/sbin/httpd -D FOREGROUN
[root@efcc408f4049 /]# /etc/init.d/sshd start;/usr/sbin/httpd -D FOREGROUND

2:把安装好服务的容器,提交为镜像

[root@docker01 ~]# docker container commit dd centos6.9_sshd_httpd:v3

3:测试镜像的功能(修改初始命令)

[root@docker01 ~]# docker run -d  -p 81:80 centos6.9_httpd_sshd:v1 /bin/bash /init.sh
[root@docker01 ~]# docker run -d  -p 1023:22 centos6.9_httpd_sshd:v1 /bin/bash /init.sh

网页访问10.0.0.11:81
在这里插入图片描述
在这里插入图片描述

7. 自动制作docker镜像**

1)dockerfile常用指令
FROM  基础镜像
RUN   制作镜像过程中需要的执行命令(安装服务) 不能出现交互式命令
CMD   容器启动的时候执行的初始命令,容易被替换(启动服务)
ENTRYPOINT  容器启动的时候执行的初始命令,不能被替换,如果同时使用CMD和ENTRYPOINT,cmd命令将作为ENTRYPOINT命令的参数
ADD   把dockerfile当前目录下的文件拷贝到容器中(自动解压tar包)
COPY  把dockerfile当前目录下的文件拷贝到容器中(不解压tar包)
WORKDIR 指定容器的默认工作目录
EXPOSE  镜像要暴露的端口
VOLUME  持久化卷
ENV     环境变量(ssh的密码,数据库的密码)
LABEL   镜像的属性标签
MAINTAINER  管理者标识
2)根据dockerfile自动构建镜像思路
a:手动制作docker镜像,记录历史命令
b:根据历史命令编写dockerfile文件
c:docker build构建docker镜像
d:测试镜像的功能
3)dockerfile单服务例子
1.创建目录
[root@docker01 opt]# mkdir /opt/dockfile/centos_nginx -p
[root@docker01 centos_nginx]# cd /opt/dockfile/centos_nginx
2.编写文件
[root@docker01 centos_nginx]# vim dockerfile
FROM centos:6.9
RUN yum install epel-release -y 
RUN yum install nginx -y
CMD ["nginx","-g","daemon off;"]
3.构建镜像
[root@docker01 centos_nginx]# docker image build -t centos6.9:v1 .
4.测试
[root@docker01 centos_nginx]# docker run -d -p 90:80 centos6.9_nginx:v1 
#注意:centos6yum源
RUN curl -o /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-6.repo
RUN curl -o /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-6.repo
4)dockerfile多服务例子1
1.创建目录
[root@docker01 opt]# mkdir /opt/dockfile/httpd_sshd -p
[root@docker01 httpd_sshd]# cd /opt/dockfile/httpd_sshd
2.编写文件
[root@docker01 httpd_sshd]# vim dockerfile
FROM centos:6.9
RUN yum install httpd openssh-server -y 
RUN echo '123456'|passwd --stdin root
ADD init.sh /init.sh
CMD ["/bin/bash","/init.sh"]
EXPOSE 80 1022
[root@docker01 httpd_sshd]# cat init.sh 
#/bin/bash
/etc/init.d/sshd start;
/usr/sbin/httpd -D FOREGROUND
3.构建镜像
[root@docker01 httpd_sshd]# docker image build -t httpd_sshd:v1 .
4.测试
[root@docker01 httpd_sshd]# docker run -d -p 81:80 -p 1023:22 httpd_sshd:v1 
5)dockerfile多服务例子2
1.创建目录
[root@docker01 opt]# mkdir /opt/dockfile/kod -p
[root@docker01 kod]# cd /opt/dockfile/kod
2.编写文件
[root@docker01 kod]# vim dockerfile
FROM centos:6.9
ADD nginx.repo /etc/yum.repos.d/nginx.repo
RUN yum install -y nginx && \
 yum install php-fpm php-gd php-mbstring -y && \
 yum clean all
ADD www.conf /etc/php-fpm.d/www.conf
ADD default.conf /etc/nginx/conf.d/default.conf
RUN mkdir /html
WORKDIR /html
ADD kod.tar.gz /html
RUN chown -R nginx:nginx .
ADD init.sh /init.sh
CMD ["/bin/bash","/init.sh"]
EXPOSE 80 81
[root@docker01 dockfile]# ll kod/
total 13136
-rw-r--r-- 1 root root      391 Feb 21 20:40 default.conf
-rw-r--r-- 1 root root      376 Feb 24 16:19 dockerfile
-rw-r--r-- 1 root root       45 Feb 21 20:33 init.sh
-rw-r--r-- 1 root root 13422511 Feb 24 16:10 kod.tar.gz
-rw-r--r-- 1 root root      192 Feb 21 20:39 nginx.repo
-rw-r--r-- 1 root root    10016 Feb 21 20:37 www.conf
3.构建镜像
[root@docker01 kod]# docker image build -t kod:v1 .
4.测试
[root@docker01 kod]# docker run -d -p 82:80 kod:v1 

8. docker镜像的分层(复用,节省空间)

在这里插入图片描述

9. dockerfile的优化

a:使用体积小的linux镜像alpine
b:尽可能的清理无用的缓存文件(尽可能把多个run合并,用&&连接)
c:修改dockerfile的时候,尽可能把修改的内容放在最后
d:使用.dockerignore忽略构建docker镜像时,不需要的文件
# docker run  -it  -p 80:80 alpine:latest /bin/sh
/ # cat /etc/apk/repositories   #yum源
/ # sed -i 's/dl-cdn.alpinelinux.org/mirrors.tuna.tsinghua.edu.cn/g' /etc/apk/repositories
/ # apk update
/ # apk add nginx
/ # nginx -v
/ # mkdir /run/nginx
/ # nginx
/ # apk add curl
/ # cat /etc/nginx/conf.d/default.conf 
server {
	listen 80 default_server;
	listen [::]:80 default_server;
	location / {
         root /html;
         index index.html index.htm;
	}
	location = /404.html {
		internal;
	}
}
/ # nginx -t
/ # nginx -s stop
/ # nginx
/ # mkdir /html
/ # cd /html/
/html # echo 'oldboy' >index.html
/html # apk add php7-fpm
/html # apk add php7-curl
/html # php-fpm7 -m
####php模块,每一个模块就是一个插件,不建议上来就安装一堆模块
漏洞风险更大,消耗更多的资源。docker尽可能小,php模块用多少装多少

10. 容器间的互联

docker run --link 正在运行容器的名字(单方向)

[root@docker01 ~]# docker run -it --link didi alpine:latest 
/ # cat /etc/hosts
127.0.0.1	localhost
::1	localhost ip6-localhost ip6-loopback
fe00::0	ip6-localnet
ff00::0	ip6-mcastprefix
ff02::1	ip6-allnodes
ff02::2	ip6-allrouters
172.17.0.2	didi ef5708fb5fc3
172.17.0.3	d8df0b987b80
/ # ping didi
PING didi (172.17.0.2): 56 data bytes
64 bytes from 172.17.0.2: seq=0 ttl=64 time=0.178 ms
第一步:下载
[root@docker01 srv]# docker pull mysql:5.7
[root@docker01 srv]# docker pull zabbix-java-gateway:latest 
[root@docker01 srv]# docker pull zabbix-server-mysql:latest 
[root@docker01 srv]# docker pull zabbix-web-nginx-mysql:latest
第二步:导入
[root@docker02 srv]# for n in `ls *` ;do docker load -i $n ;done
第三步:启动容器
[root@docker01 srv]# 
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
####登录数据库
[root@docker01 srv]# docker exec -it mysql-server /bin/bash
root@9b7201d205b2:/# mysql -uroot -proot_pwd
第四步:访问浏览器 10.0.0.11  Admin---zabbix

11. 单机版的容器编排

# yum install  docker-compose   -y (需要epel源)
# mkdir -p /opt/dock-compose/zabbix
# cat /opt/dock-compose/zabbix/dock-compose.yml
version: '3'

services:
   mysql-server:
     image: mysql:5.7
     restart: always
     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
     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
[root@docker01 zabbix]# docker-compose up
访问10.0.0.11
ctrl+c容器就死掉了
####注意
docker-compose版本v1 v2 v3, 每一一个版本语法,功能不一样
docker- compose中不需要link,↓docker- compose内部提供dns功能,通过service的名字来通信,双向通讯
有了docker-compose,可以很简单的启动多个容器
docker-compose up  创建并启动容器
docker-compose down  停止并删除容器
docker-compose start  启动一个或多个容器
docker-compose stop   停止一个或多个容器
docker-compose restart  重启一个或多个容器
docker-compose up -d   后台运行 启动服务
docker-compose  down   停止服务

12. 私有仓库docker-registry

docker私有仓库:配置简单、功能简单、占用资源少

第一步:上传仓库镜像包并导入镜像
[root@docker01 ~]# docker load -i registry.tar.gz
第二步:启动私有仓库
docker run -d -p 5000:5000 --restart=always --name registry -v /opt/myregistry:/var/lib/registry registry
第三步:上传一个镜像
a 打标签 docker tag alpine:3.9 10.0.0.11:5000/alpine:3.9
b 上传   docker image push 10.0.0.11:5000/alpine:3.9
注意:第一次上传镜像会报错
[root@docker01 ~]# cat /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"
    ],
    "insecure-registries": ["10.0.0.11:5000"]
}
第四步:重启docker服务
[root@docker01 ~]# systemctl restart docker
第五步:上传镜像
[root@docker01 ~]# docker image push 10.0.0.11:5000/oldboy/alpine:latest
[root@docker01 ~]# scp -r /etc/docker/daemon.json root@10.0.0.12:/etc/docker/daemon.json
注意镜像地址区分
nginx:1.15        官方仓库的官方镜像
nginx/nginx:1.15  官方仓库的用户镜像
daocloud.io/nginx/nginx:1.15  私有仓库的镜像
客户端下载镜像
[root@docker02 ~]# systemctl restart docker
[root@docker02 ~]# docker image pull  10.0.0.11:5000/oldboy/alpine:latest

docker官方仓库:友好的web界面,支持多用户,支持认证

上传一个镜像到官方仓库:
a: docker hub注册一个仓库
b: 登录docker login
# docker login
c: 打标签
# docker tag 10.0.0.11:5000/oldboy/alpine:latest 807529573/alpine:latest
d: 上传
# docker push 807529573/alpine:latest

13. 企业级私有仓库harbor(docker-compose)

harbor:企业级的私有仓库,(基于registry扩展了很多功能)需要2G内存

harbor是VMware中国团队开发10.0.0.12

1)配置环境
第一步:下载安装器
harbor-offline-installer-v1.8.0.tgz
第二步:解压
[root@docker02 opt]# tar xf harbor-offline-installer-v1.8.0.tgz
第三步:安装docker-compose并导入镜像
[root@docker02 opt]# cd harbor/
[root@docker02 harbor]# yum install -y docker-compose(需要eple源)
[root@docker02 harbor]# docker load -i harbor.v1.8.0.tar.gz 
第四步:修改配置文件
[root@docker02 harbor]# cat harbor.yml
5	hostname: 10.0.0.12
27	harbor_admin_password: 123456
第五步:执行安装脚本
[root@docker02 harbor]# vim install.sh     #镜像之前已经导入
152 #       docker load -i ./harbor*.tar.gz
[root@docker02 harbor]# ./install.sh 
第六步:浏览器访问10.0.0.12,登录admin(123456)
2)上传镜像文件
第一步:修改配置文件
[root@docker01 ~]# cat /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"
    ],
    "insecure-registries": ["10.0.0.11:5000","10.0.0.12"]
}
[root@docker01 ~]# systemctl restart docker
第二步:登录harbor仓库
[root@docker01 ~]# docker login 10.0.0.12
第三步:打标签并上传镜像
[root@docker01 ~]# docker tag alpine:latest 10.0.0.12/library/alpine:latest
[root@docker01 ~]# docker push 10.0.0.12/library/alpine:latest 
第四步:刷新网站页面查看
3)为harbor配置https证书
第一步:修改harbor.yml--http加上注释,https取消注释
[root@docker02 harbor]# cat -n harbor.yml 
     5	hostname: blog.oldqiang.com
     7	# http related config
     8	#http:
     9	#  port for http, default is 80. If https enabled, this port will redirect to https port
    10	#  port: 80
    13	https:
    14	  port: 443
    15	  certificate: /your/certificate/path
    16	  private_key: /your/private/key/path
第二步:上传解压配置证书
[root@docker02 opt]# tar xf blog.oldqiang.com.zip 
[root@docker02 harbor]# cat -n harbor.yml 
13	https:
14    port: 443
15    certificate: /opt/Nginx/1_blog.oldqiang.com_bundle.crt
16    private_key: /opt/Nginx/2_blog.oldqiang.com.key
第三步:配置域名(每一台机器)
# cat /etc/hosts
10.0.0.12 blog.oldqiang.com
本地hosts解析
10.0.0.12 blog.oldqiang.com
第四步:#重新执行安装脚本
./install.sh
第五步:访问网站blog.oldqiang.com
4)测试
[root@docker02 harbor]# docker pull blog.oldqiang.com/library/alpine:latest
latest: Pulling from library/alpine
Digest: sha256:57334c50959f26ce1ee025d08f136c2292c128f84e7b229d1b0da5dac89e9866
Status: Downloaded newer image for blog.oldqiang.com/library/alpine:latest
blog.oldqiang.com/library/alpine:latest
5)将docker redistry镜像迁移到harbor

第一步:上传镜像在docker01上

 docker tag xiaoniao:v1 10.0.0.11:5000/xiaoniao:v1
 docker puh 10.0.0.11:5000/xiaoniao:v1

第二步:配置网页版harbor
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

14. docker基础网络

四种基础网络类型

bridge    默认类型,NAT模式(最常用)
host      host类型,使用宿主机网络,网络性能最高,宿主机的主机名,宿主机的host解析文件
container 容器类型,使用其他容器共用网络,k8s中使用,容器的主机名,容器的host解析文件
none    没有网络,上不了外网功能受限制
注意:
host类型,容器不需要做端口映射
container类型,共用ip地址,节省ip地址,两个容器80,9000 127.0.0.1
举例:
docker run -d -it --network bridge/host/container:其他容器的id/none centos:6.9

创建自定义网络

[root@docker01 opt]# docker network create -d bridge --gateway 172.19.0.1 --subnet 172.19.0.0/16 oldboy
27269f83a482fbb95712bb8d6efc1d2ad6ff2f2cefcb8c25812f9980ef9140f4
[root@docker01 opt]# docker run -it --network oldboy alpine:latest 
-d:网络类型

注意:ip地址范围
公网ip:
私网ip:10.0.0.0~10.255.255.255 和172.16.0.0~172.31.255.255

15. 跨宿主机容器间的通讯之macvlan

macvlan类似与虚拟机的桥接网络

1)跨宿主机通信(ping不通宿主机)

2)需要手动管理ip分配

3)不需要端口映射就能被外界访问

#创建网络并启动容器
[root@docker01 ~]# docker network create -d macvlan --subnet 10.0.0.0/24 --gateway 10.0.0.254 -o parent=eth0 macvlan_1
da7fd7ea5736eae3c9d3768425e09d762f77d5d9a84aa8269b0df1e104e4181e
[root@docker01 ~]# docker run -it --network macvlan_1 --ip 10.0.0.99 alpine:latest
[root@docker02 ~]# docker network create -d macvlan --subnet 10.0.0.0/24 --gateway 10.0.0.254 -o parent=eth0 macvlan_1
[root@docker02 ~]# docker run -it --network macvlan_1 --ip 10.0.0.98 10.0.0.11:5000/oldboy/alpine:latest

测试:
在这里插入图片描述

16. 跨宿主机容器间的通讯之overlay

1)跨宿主机通信(ping不通宿主机)

2)不需要手动管理ip分配,ip地址分配由数据库(consul)管理

3)overlay全局网络,在任意一个节点创建即可

4)需要端口映射就能被外界访问

第一步:部署docker并上传导入镜像文件
[root@docker03 ~]# docker load -i docker_progrium_consul.tar.gz 
第二步:consul存储ip地址的分配
[root@docker03 ~]# docker run -d -p 8500:8500 -h consul --name consul progrium/consul -server -bootstrap
第三步:docker01、02上添加
     8	    "insecure-registries": ["10.0.0.11:5000","10.0.0.12"],
     9	    "cluster-store": "consul://10.0.0.13:8500", #集群信息存储在consul上
    10	    "cluster-advertise": "10.0.0.11:2376" #节点自己的信息
[root@docker01 ~]#systemctl restart docker
访问10.0.0.13:8500

在这里插入图片描述

注意:overlay网络的宿主机的主机名不能相同
第四步:创建overlay网络(可以在任意节点创建)
[root@docker01 ~]# docker network create -d overlay --gateway 172.31.0.1 --subnet 172.31.0.0/16 ol1
第五步:启动容器测试
[root@docker01 ~]# docker run -it --network ol1 --name test01 alpine:latest
[root@docker02 ~]# docker tag 10.0.0.11:5000/oldboy/alpine:latest alpine:latest
[root@docker02 ~]# docker run -it --network ol1 --name test02 alpine:latest 

在这里插入图片描述

每个容器有两块网卡,eth0实现容器间的通讯,eth1实现容器访问外网

17. docker容器的监控

docker容器的监控:
宿主机的资源:还剩下多少内存,磁盘空间,cpu负载
容器的资源:每一个容器使用的cpu,内存,磁盘

zabbix:监控,低级自动发现(命令行取值)

prometheus:只是对容器支持比较好,在其他很多地方,还不是很完善

docker容器的监控宿主机的资源:还剩下多少内存,磁盘空间,cpu负载
容器的资源:每一个容器使用的cpu,内存,磁盘
zabbix监控,低级自动发现(命令行取值)
prometheus只是对容器支持比较好,在其他很多地方,还不是很完善
功能分析数据,存储数据(时间序列数据库)
构成prometheus:主程序
alertmanager:报警
监控采集数据插件blackbox_exporter
consul_exporter
graphite_exporter
haproxy_exporter
memcached exporter
mysqld_exporter
node_exporter: 宿主机
第三方采集数据插件cadvisor 监控容器
nginx

alertmanager:报警

第一步:上传导入(docker01,docker02)
docker_monitor_node.tar.gz
[root@docker01 ~]# docker load -i docker_monitor_node.tar.gz 
第二步:客户端节点,启动node-exporter和启动cadvisor(docker01,docker02)
[root@docker01 ~]# docker run -d   -p 9100:9100   -v "/:/host:ro,rslave"   --name=node_exporter   quay.io/prometheus/node-exporter   --path.rootfs /host
[root@docker01 ~]# 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节点,安装prometheus和grafana(docker03)
[root@docker03 opt]# tar xf prometheus-2.12.0.linux-amd64.tar.gz 
第四步:更改配置文件(docker03)
[root@docker03 opt]# cd prometheus-2.12.0.linux-amd64/
[root@docker03 prometheus-2.12.0.linux-amd64]# cat prometheus.yml
 21 scrape_configs:
 22   # The job name is added as a label `job=<job_name>` to any timeseries scraped from this config.
 23   - job_name: 'prometheus'
 24     static_configs:
 25     - targets: ['localhost:9090']
 26   - job_name: 'node_exporter'
 27     static_configs:
 28     - targets: ['10.0.0.11:9100','10.0.0.12:9100']
 29   - job_name: 'cadvisor'
 30     static_configs:
 31     - targets: ['10.0.0.11:8080','10.0.0.12:8080']
第五步:启动(docker03)
[root@docker03 prometheus-2.12.0.linux-amd64]# ./prometheus --config.file="prometheus.yml"
第六步:安装grafana
[root@docker03 ~]# wget https://mirrors.tuna.tsinghua.edu.cn/grafana/yum/rpm/grafana-6.6.2-1.x86_64.rpm
[root@docker03 ~]# yum localinstall grafana-6.6.2-1.x86_64.rpm -y
#启动grafana
[root@docker03 ~]# systemctl start grafana-server.service 
[root@docker03 ~]# systemctl enable grafana-server.service 
#访问grafana  http://IP:3000,默认账号admin:admin
新建数据源--导入dashboard模板

在这里插入图片描述

第六步:安装grafana
[root@docker03 ~]# wget https://mirrors.tuna.tsinghua.edu.cn/grafana/yum/rpm/grafana-6.6.2-1.x86_64.rpm
[root@docker03 ~]# yum localinstall grafana-6.6.2-1.x86_64.rpm -y
#启动grafana
[root@docker03 ~]# systemctl start grafana-server.service 
[root@docker03 ~]# systemctl enable grafana-server.service 
#访问grafana  http://IP:3000,默认账号admin:admin
新建数据源--导入dashboard模板

在这里插入图片描述
调光
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
https://grafana.com/grafana/dashboards

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值