02-docker基础操作

1.什么是容器

image-20200527234954024

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

image-20200526103425267

程序: 代码,软件,命令

进程:正在运行的程序

2:容器和虚拟机的区别

虚拟机: 硬件cpu支持(vt虚拟化),模拟计算硬件,走正常的开机启动

bios开机自检–根据bios启动项–读取硬盘第一个扇区grub,uefi, centos7, 加载内核,启动系统第一个进程/sbin/init systemd

容器: 不需要硬件cpu的支持,共用宿主机内核,启动容器的第一个进程

容器优势: 启动快,性能高,损耗少,轻量级

100虚拟机 100个服务 10宿主机

100容器 100个服务 6宿主机

image-20200526103344036

3:docker-ce的安装

主机名 内存 ip
docker01 2G 10.0.0.11
docker02 2G 10.0.0.12
#安装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

 [root@docker01 ~] # docker info

4:docker主要内容

配置镜像加速

阿里云Docker-hub

https://cr.console.aliyun.com/cn-hangzhou/mirrors
mkdir -p /etc/docker

tee /etc/docker/daemon.json <<-'EOF'
{
   "registry-mirrors": ["https://68rmyzg7.mirror.aliyuncs.com"]
}
EOF   

或者:
vim   /etc/docker/daemon.json

    {
         "registry-mirrors": ["https://68rmyzg7.mirror.aliyuncs.com"]
    }

docker是一个cs架构, docker主要:镜像 容器 仓库 网络 存储 监控

docker是一个软件的打包技术.

docker  run -d  -p 80:80  nginx:latest 
run 创建并启动一个容器
-d  放后台启动
-p  端口映射
nginx:latest docker镜像名称

5:docker镜像常用命令

1-搜索镜像, 优先选官方,stars数量多 docker search 

        docker pull    拉取镜像(下载镜像),注意版本
        docker pull centos:6.9
        docker pull centos:7.5.1804




2-推送镜像(上传镜像)docker push   



3-导入镜像docker load     -i 
   例子: docker load  -i  docker_nginx.tar.gz
   docker image import   不会导入镜像的名称和版本
   批量导入
   [root@docker01 ~] # for i in  docker_* ;do  docker  load -i $i ;done 





4-导出镜像docker save     docker export
    [root@docker ~]# docker image save nginx >/opt/nginx.tar.gz
   例子:docker save centos:7 -o docker_centos7.tar.gz




5-查看镜像列表docker image  ls   
        docker images
        docker images -q 
        docker inspect ID/name:tag



6-删除镜像 docker rmi    
        [root@docker01 ~] # docker rmi xiaohe
        docker rmi  IID 
        docker rmi `docker images -q`
        docker rmi $(docker images -q)




7-给镜像打标签  docker tag     
    [root@docker01 ~] # docker tag alpine:latest   alpiune/linux:v1
    [root@docker01 ~] # docker tag nginx:latest  nginx/xiaoming_v1

6:docker容器的常用命令

0-.交互式启动容器+Ctrl+p+q
[root@docker ~]# docker run  -it --name "testnginx" nginx /bin/bash
加ctrl+p+q
[root@docker ~]# docker attach testnginx
2.死循环
docker run  --name testnginx1  -d nginx /bin/sh -c "while true ;do echo hello world; sleep 1;done"
3.服务前台运行
sshd -D  
[root@docker01 ~] # nginx -g 'daemon off;' 
    ---    启动服务夯住

---注意 docker run == docker create  +  docker start

1-创建并启动容器  docker  run
     例子:docker run  -d -it -p 80:80  nginx:latest
     -d 放在后台  
     -p 端口映射   先宿主机——在虚拟机
     -it 分配交互式的终端——i  tty 进入容器
     [root@docker01 ~] # docker run   -it   centos:6.9   /bin/bash 

      docker attach testnginx


2-创建容器docker create  创建容器 --name
[root@docker01 ~] # docker container  create   --name xx  alpine 


3-启动容器docker start   
[root@docker01 ~] # docker start  969cd3f94570 
docker run -it --name "testcentos" centos:6.9 /bin/bash


4-停止容器 docker  stop   
[root@docker01 ~] # docker container  stop    c0b867d55dec

5-重启容器 docker  restart 
[root@docker01 ~] # docker container  restart  c0b867d55dec 


5-强制停止容器 docker  kill   
[root@docker01 ~] # docker container  kill  xiaoming 


6-查看容器列表  docker  ps     查看容器列表  -a 查看所有容器
[root@docker01 ~] # docker container  ls -a

7-删除容器 docker  rm    
[root@docker01 ~] # docker container  rm c0b867d55dec 

8-只能删除,停止中的容器  -f 
[root@docker01 ~] # docker container  rm   66df9b35c192

9-批量删除所有容器 docker rm -f `docker ps -a -q`
[root@docker01 ~] # docker container rm  `docker ps -a -q`
[root@docker01 ~] # docker container  prune  
                    ----删除所有停止的容器。

10-进入正在运行的容器(分配一个新终端) docker  exec    attach
[root@docker01 ~] # docker container  attach  01766ddc420a 
                    --- attach 同一个终端   偷偷离开的快捷键ctrl +p,ctrl +q
                    ----docker attach  进入正在运行的容器(使用相同的终端),

[root@docker01 ~] # docker container  exec  -it  01766ddc420a  /bin/bash 

例子: docker exec  -it  容器id/容器名字   /bin/bash(/bin/sh)

docker run -it --rm -v /etc -v logs:/var/log centos /bin/produce_some_logs 


11-查看日志
[root@docker01 /opt] # docker logs 513d23d69919 


12-查看镜像分成
[root@docker02 /opt/docker-com] # docker history  mysql:5.6


13-查看容器内部变量等相关信息
[root@docker02 /opt/docker-com] # docker inspect  

14-tailf  /etc/host


15--查看端口
docrker  port  837958f94992 

16-容器改名
docrker  rename  837958f94992 

17-查看容器使用资源
[root@docker01 ~] # docker stats ede8607a6c5f

18-限制容器内存
[root@docker01 ~] # docker run -dti  -P     --memory 50M   centos6.9_nginx_v1:lates

19-更新容器内存 开机自动启动 cpu 等
[root@docker01 ~] # docker container  update  ede8607a6c5f  --
[root@docker01 ~] # docker container  update  ede8607a6c5f  --restart always 

20-查看容器进程top 
[root@docker01 ~] # docker container  top   zabbix_mysql-server_1

-h 容器主机名字
21-监控
[root@docker02 ~] # docker stats   --no-stream  


22-显示容器修改的文件
[root@docker01 ~] # docker diff 2cd7c18a471f






---------
docker镜像常用:
docker search
docker image rmi
docker image load
docker image save
docker image pull
docker image push
docker image tag
docker image ls
docker image build
docker image histroy

docker容器常用
attach  进入正在运行的容器
commit  把容器提交为镜像
cp      在宿主机和容器之间拷贝文件
create  创建容器
diff    显示容器修改的文件
exec    进入正在运行的容器
export  把容器导出成镜像压缩包(没有标签和版本)
inspect 查看属性
kill    强制停止容器
logs    查看容器的输出
ls      查看容器列表
pause   挂起容器
port    查看容器暴露的端口
prune   清理容器
rename  重命名容器
restart  重启容器
rm       删除容器
run      创建并运行容器
start    启动容器
stats    查看容器使用资源情况
stop     停止容器
top      查看容器的进程
unpause  恢复挂起的容器
update   更新容器的属性 

nginx
php-fpm
/usr/sbin/sshd

tail -f /var/log/xxx.log
----介绍
docker 容器所有 --的参数都必须放在镜像名称前面

服务运行在容器中,服务出现故障,需要进入容器中排查

每一个容器启动的时候,都需要执行一条 初始命令
容器在本质上就是一个进程(初始命令)必须夯住
进程执行结束,容器退出

每一个镜像都有默认的初始命令
启动容器没有在镜像后面指定初始命令,那么容器就会执行镜像默认的初始命令

nginx镜像默认执行  nginx -g 'daemon off;' 不只是夯住了,还启动了nginx的服务

每一个容器镜像,都有自己的操作系统,centos,Ubuntu,debian,alpine

只要是使用linux内核的操作系统,都可以叫linux系统

为了保证,docker镜像体积尽可能小,很多命令都没有安装

alpine :系统体积小,docker pull下载越快

docker 是一个软件的打包技术
docker容器默认只有内网ip,没有桥接模式

启动了一个wordpress 容器,只有宿主机可以访问这个wordpress?

容器想要放在后台一直运行的化,那么容器的初始==命令,必须夯住(前台==运行),否则容器就会退出.

-d -it 必须一直纯在 必须夯住容器

每一个容器

前台运行
[root@docker01 ~] # nginx -g 'daemon off;'
/usr/sbin/php-fpm --nodaemonize

7:docker端口映射

image-20200526170021806

[root@docker01 ~] # iptables -t nat  -L -n
注意查看ip 不要冲突

docker run
-p  宿主机端口:容器端口
    [root@docker01 ~] # docker run  -d -p 80:80  nginx:latest 

-p  宿主机ip1:宿主机端口:容器端口 (多个容器同时使用80端口)
    [root@docker01 ~] # ifconfig eth0:1 10.0.0.13/24 up
    [root@docker01 ~] # docker run  -d -p 10.0.0.13:80:80 nginx:latest 
   [root@docker01 /opt] # docker exec  -it  3825d3a22fec  /bin/bash

    root@2f78688d552f:/# echo "web01" > /usr/share/nginx/html/index.html 

-p  宿主机ip1::容器端口   随机端口映射
    [root@docker01 ~] # docker run  -d -p 10.0.0.11::80  nginx:latest  

-p  宿主机ip1::容器端口/udp   使用udp协议做随机端口映射
    [root@docker01 ~] # docker run  -d -p 10.0.0.11::80/udp   nginx:latest 

-p 80:80  -p 3306:3306
    [root@docker01 ~] # docker run  -d -p 10.0.0.12::80/udp  -p 10.0.0.12::81   nginx:latest  
    [root@docker01 /opt] # docker  run -d -p 10.0.0.11:80:80  -p 10.0.0.12:81:80 nginx:latest 


-p 1111-1119:1111-1119  端口范围映射
    [root@docker01 ~] # docker run  -d -p  1000-1010:80-90 nginx:latest  
                                宿主机  1000-1010    虚拟机的80-90
    [root@docker01 /opt] # docker run  -d -p 110-120:810-820 nginx:latest 

-P 自动随机端口映射  大P
    [root@docker01 ~] # docker run  -d -P  nginx:latest  

8:docker数据卷

[root@docker01 ~] # mkdir  /xiaoniao
[root@docker01 ~] # unzip xiaoniaofeifei.zip  -d /xiaoniao/
[root@docker01 /opt] # docker run   -d -P  -v /opt/xiaoniao:/usr/share/nginx/html nginx:latest  
[root@docker01 /opt] # docker run  -d -p 80:80    -v /opt/xiaoniao:/usr/share/nginx/html nginx:latest
[root@docker01 /opt/html] # docker run -P -d  -v /opt/html:/usr/share/nginx/html nginx:latest
-----------------

1-只指定了容器 持久化
--默认
[root@docker01 /opt/html] # docker run   -d -P  -v  /usr/share/nginx/html nginx:latest
--指定目录名字
[root@docker01 /opt] # docker run   -d -P  -v xiaohe:/usr/share/nginx/html nginx:latest   


[root@docker01 /opt] # docker volume  ls
DRIVER              VOLUME NAME
local               2f9a47cc8091b1f170a1db9b47820d4e7705108e2d07e7bf284481a8ea9f3a9f
local               xiaohe


2---卷的位置
---1
[root@docker01 ~] # docker inspect  xiaohe 
--2
[root@docker01 ~] # docker inspect  03f3f1e35498   |grep -i  Volume
            "VolumeDriver": "",
            "VolumesFrom": null,
                "Type": "volume",
                "Source": "/var/lib/docker/volumes/9ce379af0df77c90b142fad750471466544db01b33780eeabf915ee2e8f21467/_data",
            "Volumes": {

-----

3-- 固定卷的名字
--自动生成
[root@docker01 /opt/html] # docker run -d -P  -v /usr/share/nginx/html nginx:latest  
--带名字目录
[root@docker01 ~] # docker run   -d -P  -v xiaohe:/usr/share/nginx/html nginx:latest  



--volumes-from  跟某一个容器挂载所有相同的卷
-- 记得是大P是随机端口
[root@docker01 ~] # docker run -d -P   --volumes-from  c6d9be27f2c4  nginx:latest 
--
[root@docker01 ~] # docker inspect  c6d9be27f2c4     |grep -i  Volume

[root@docker01 ~] # docker inspect   cac8fa5ba854   |grep -i  Volume


 -v 文件对文件++目录对目录————————

-v  宿主机绝对目录:容器目录 绝对路径不然,docker 会当成那个卷名字
-v  容器目录        #创建一个随机卷,来持久化容器的目录下的数据
-v  卷名:容器目录    创建一个固定名字的卷,来持久化容器的目录下的数据
--volumes-from  跟某一个容器挂载所有相同的

8.1数据卷容器

docker run -it  --name "httpd_volumes" -v /opt/Volume/httpd_volume/conf:/usr/local/apache2/conf -v /opt/Volume/httpd_volume/html:/usr/local/apache2/htdocs centos:6.9 /bin/bash
ctrl p q
拷贝数据到数据卷中
/opt/Volume/httpd_volume/html
/opt/Volume/httpd_volume/conf
docker  cp  DOCKERNAME:/opt/a.txt  /opt
使用数据卷容器
docker run -d  -p 8085:80 --volumes-from  httpd_volumes --name "http8085"  httpd
docker run -d  -p 8086:80 --volumes-from  httpd_volumes --name "http8086"  httpd

8.2-使用数据卷容器进行备份(了解一下)

docker run --volumes-from  httpd_volumes --name "httpd_volumesbak" --rm  -v /backup:/backup:rw  centos:6.9   tar cvf /backup/conf.tar /usr/local/apache2/conf

docker run --volumes-from  centosv1 --name "centosrestore" --rm  -v /backup:/backup:rw  centos   tar xvf  /backup/conf.tar

小练习: 只启动一个nginx容器,要求访问80端口,出现nginx默认欢迎首页,访问81端口,出现小鸟飞飞.

默认80:端口
--1  方案1
--启动容器代码目录挂载到:opt下,默认欢迎,否则就是小鸟
[root@docker01 /opt] # docker run -d  -p80-81:80-81  -v /opt/xiaoniao:/opt/xiaoniao  nginx:latest 
--进入容器
[root@docker01 /opt] # docker exec  -it  292cc15d53c7  /bin/bash
cat >>xiaoniao.conf<<EOF
server {
    listen       81;
    server_name  localhost;
    location / {
        root   /opt/xiaoniao;
        index  index.html index.htm;
    }
}
EOF
[root@docker01 /opt]#docker restart    292cc15d53c7 



2---cp 方案
[root@docker01 /opt] # docker run -d -p 82-83:80-81 -v /opt/xiaoniao:/opt/xiaoniao nginx:latest
--本地写入配置文件
[root@docker01 /opt] # cat >>xiaoniao.conf<<EOF
> server {
>     listen       81;
>     server_name  localhost;
>     location / {
>         root   /opt/xiaoniao;
>         index  index.html index.htm;
>     }
> }
> EOF
--配置文件复制到容器
[root@docker01 /opt] # docker cp xiaoniao.conf  513d23d69919 :/etc/nginx/conf.d
[root@docker01 /opt] # docker restart   513d23d69919



3-方案--直接挂着—目录对目录文件对文件
vim xiaoniao.conf
server {
    listen       81;
    server_name  localhost;
    location / {
        root   /opt/xiaoniao;
        index  index.html index.htm;
    }
}
[root@docker01 /opt] # docker run -d -p 84-85:80-81 -v /opt/xiaoniao:/opt/xiaoniao -v /opt/xiaoniao.conf:/etc/nginx/conf.d/xiaoniao.conf nginx:latest

9:手==动制作docke==r镜像

制作一个基于centos6系统的nginx镜像(单服务)

1:启动一个纯净的centos:6.9容器,安装nginx-启动并且进入
[root@docker01 /opt] # docker run  -it -p 80:80 centos:6.9  /bin/bash

[root@cd38de25eb84 /]# 配置源
curl -o /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-6.repo
curl -o /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-6.repo
[root@cd38de25eb84 /]# yum install nginx -y
[root@53bd7ae41556 nginx]# nginx  -g 'daemon off'

2:把安装好服务的容器,提交为镜像
docker container commit eb109f194821 centos6.9_nginx:v1

3:测试镜像的功能  必须夯住,生命周期
docker run -d  -p 82:80 centos6.9_nginx:v1 nginx -g 'daemon off;'
[root@docker01 /opt] # curl  -I 10.0.0.11:81

制作一个基于centos6系统的kod网盘的镜像(多服==务)kodexplorer==

1:启动一个centos6.9_nginx:v1,再安装php
[root@docker01 /opt] # docker run -it -p 88:80 -p 1022:22 centos6.9_nginx_v1  /bin/bash

2--容器内安装
[root@5ac3b5074cf3 /]#yum install php-fpm php-gd php-mbstring -y

3--修改用户 统一用户
[root@5ac3b5074cf3 /]#vi /etc/php-fpm.d/www.conf
user = nginx
group = nginx


4-写入 测试配置文件
[root@5ac3b5074cf3 /]#vi /etc/nginx/conf.d/default.conf
server {
    listen 80;
    server_name localhost;
    root /code;
    location / {
        index index.php index.html index.htm;
    }

    location ~ \.php$ {
        fastcgi_pass 127.0.0.1:9000;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
                include fastcgi_params;
    }
}

5--创建代码目录
[root@5ac3b5074cf3 /]# mkdir /code
#宿主机操作--代码传递
[root@docker01 ~] # docker cp kodexplorer4.40.zip f12048d09d53:/code
容器操作
[root@5ac3b5074cf3 /]#yum install unzip -y
[root@5ac3b5074cf3 /]#unzip kodexplorer4.40.zip
[root@5ac3b5074cf3 /]#chown -R nginx:nginx .


6-测试访问--
[root@5ac3b5074cf3 /]#service php-fpm start
[root@5ac3b5074cf3 /]#cd /etc/nginx/conf.d/


7--写入脚本
[root@5ac3b5074cf3 /]#vi /init.sh
#!/bin/bash
service php-fpm start
nginx -g 'daemon off;'


8--:把安装好服务的容器,提交为镜像
[root@docker01 ~] # docker commit 47208e3e3796 kod:v2

9--:测试镜像的功能
[root@docker01 ~] # docker run -d -p 83:80 kod:v2 /bin/bash /init.sh

制作一个基于centos7系统的==nginx+sshd双==服务镜像

--1 查看包名字
[root@docker01 ~] # netstat  -lnutp |grep ssh
tcp        0      0 0.0.0.0:22              0.0.0.0:*               LISTEN      6863/sshd   
[root@docker01 ~] # which sshd
/usr/sbin/sshd
[root@docker01 ~] # rpm -qf /usr/sbin/sshd
penssh-server-7.4p1-16.el7.x86_64

--2 进入容器,安装软件 
[root@docker01 ~] # docker run  -it  -p 89:80 -p 1023:22 centos6.9nginx__ssh_v1   /bin/bash

curl -o /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo
curl -o /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-7.repo

curl -o /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-6.repo
RUN curl -o /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-6.repo
yum install nginx -y
yum install openssh-server -y

--3 配置服务密钥连接
[root@4c53446c7198 /]# service  sshd restart 
Stopping sshd:                                             [FAILED]
Generating SSH2 RSA host key:                              [  OK  ]
Generating SSH1 RSA host key:                              [  OK  ]
Generating SSH2 DSA host key:                              [  OK  ]
Starting sshd:                                             [  OK  ]
yum install initscripts -y  #忽略
/usr/sbin/sshd-keygen


--4设置密码连接
echo '123456'|passwd --stdin root


--5 提交
[root@docker01 /opt] # docker commit  4c53446c7198 centos6.9nginx__ssh_v1


--6 脚本 启动
#!/bin/bash
/usr/sbin/sshd
nginx -g 'daemon off;'



--7 提交最后的版本
[root@docker01 /opt] # docker commit  098b1d220b55  centos6.9_nginx_sshd_v2 




--8 启动
[root@docker01 /opt] # docker run -d -p 81:80 -p 1022:22  centos6.9_nginx_sshd_v2  /bin/bash   /init.sh

--9 测试
[root@docker01 /opt] # curl  -I 10.0.0.11:81
[root@docker01 /opt] # ssh root@10.0.0.11 -p1022



/usr/sbin/sshd -D
vi /init.sh

10:自动制作docker镜像

自动构建docker镜像的需要一个dockerfile文件,一个镜像一个dockerfile文件

镜像: 中药

dockerfile: 配方

dockerfile常用指令

FROM  基础镜像   
RUN   制作镜像过程中需要的执行命令(安装服务)
CMD   容器启动的时候执行的初始命令,容易被替换(启动服务)
ENTRYPOINT  容器启动的时候执行的初始命令,不能被替换,如果同时使用CMD和ENTRYPOINT,cmd命令将作为ENTRYPOINT命令的参数

ADD   把dockerfile当前目录下的文件拷贝到容器中(自动解压tar包)
COPY  把dockerfile当前目录下的文件拷贝到容器中(不解压tar包)
WORKDIR 指定容器的默认工作目录  指定某进入系统,进去那个目录
EXPOSE  镜像要暴露的端口            自动暴露端口 80  22 
VOLUME  持久化卷  (自动化创建随机的卷)——启动一次创建一次
            VOLUME  /opt/dockerfile/ssh

ENV     环境变量(ssh的密码,数据库的密码)——密码

LABEL       镜像的属性标签
MAINTAINER  管理者标识
FROM  基础镜像   wget https://mirror.tuna.tsinghua.edu.cn/lxc-images/images/alpine/3.11/amd64/default/20200526_13%3A00/rootfs.tar.xz

根据dockerfile自动构建镜像的思路

a:手动制作docker镜像,记录历史命令
b:根据历史命令编写dockerfile文件
c:docker build构建docker镜像
d:测试镜像的功能

dockerfile单服务例子1:

[root@docker01 /opt/dockerfile/centos_6.9_nginx] # mkdir  /opt/dockerfile/
[root@docker01 /opt/dockerfile] # mkdir  centos_6.9_nginx
[root@docker02 /opt/dockerfile/centos6.9] # cat dockerfile 
FROM centos:6.9
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
RUN yum install nginx -y
EXPOSE 80 
CMD ["nginx","-g","daemon off;

--上传构建
[root@docker01 /opt/dockerfile/centos_6.9_nginx] # docker image build  -t centos6.9_nginx_v2 .
[root@docker02 /opt/dockerfile/centos6.9] # docker image build  -t centos6.9_nginx:v1  /opt/dockerfile/centos6.9/

--进入临时容器
[root@docker02 /opt/dockerfile/centos6.9] # docker run  -it e7807ea14f34  /bin/bash
[root@docker01 /opt/dockerfile/centos_6.9_nginx] # docker  run -d -P     centos6.9_nginx_v4

==dockerfile多服务例==子2云盘 可道云

1- 使用基于刚刚的容器搭建nginx 搭建可道云
[root@docker02 /opt/dockerfile] # mkdir  kod
--配置文件
[root@docker01 /opt/dockerfile/kod] # docker cp cd38de25eb84:/etc/xxx   .
[root@docker02 /opt/dockerfile/kod] # ls
default.conf  dockerfile  init.sh  kodexplorer4.40.zip  www.conf

2-编写dockerfile
[root@docker02 /opt/dockerfile/kod] # cat dockerfile 
FROM  centos6.9_nginx:v1
RUN    yum install php-fpm php-gd php-mbstring -y 
ADD    www.conf   /etc/php-fpm.d/www.conf
ADD    default.conf /etc/nginx/conf.d/default.conf 
RUN    mkdir /code
RUN    yum install unzip -y
ADD    kodexplorer4.40.zip  /code 
RUN    unzip /code/kodexplorer4.40.zip   -d   /code/ 
RUN    chown -R nginx:nginx  /code 
ADD    init.sh   /init.sh 

CMD ["/bin/bash","init.sh"]

EXPOSE 80 

3--编写脚本
[root@docker02 /opt/dockerfile/kod] # cat init.sh 
#!/bin/bash
service php-fpm start
nginx -g 'daemon off;'


4--启动构建镜像
[root@docker02 /opt/dockerfile/kod] # docker image build  -t centos_kod:v1  /opt/dockerfile/kod/

5--启动容器测试
[root@docker02 /opt/dockerfile/kod] # docker run -it  -d  -p 82:80  centos_kod:v1  


第二方案
FROM centos6.9_nginx:v1
RUN yum install php-fpm php-gd php-mbstring -y
ADD www.conf /etc/php-fpm.d/www.conf
ADD default.conf /etc/nginx/conf.d/default.conf 
RUN mkdir /html
WORKDIR /html
RUN curl -o kodexplorer4.40.zip http://192.168.19.200/191127/kodexplorer4.40.zip
RUN yum install unzip -y
RUN unzip kodexplorer4.40.zip 
RUN chown -R nginx:nginx .
ADD init.sh   /init.sh

CMD ["/bin/bash","/init.sh"]

vi /init.sh
#!/bin/bash

[root@docker01 /opt/dockerfile/kod] # docker cp cd38de25eb84:/etc/xxx   .

service php-fpm start
nginx -g 'daemon off;'

dockerfile使用环境变量的例子:

1--创建基础目录
[root@docker02 /opt/dockerfile] # mkdir ssh_



2--编写dockerfile 
[root@docker02 /opt/dockerfile/ssh_] # cat dockerfile 
FROM centos:6.9
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
RUN  yum install nginx -y
RUN  yum install openssh-server -y
ENV  SSH_PASS 12345
RUN service  sshd restart 
EXPOSE 80 
EXPOSE 22
ADD init.sh  /init.sh 
ENTRYPOINT ["/bin/bash","/init.sh"]





3--编写配置文件
[root@docker02 /opt/dockerfile/ssh_] # cat init.sh 
#!/bin/bash
if [ -z $SSH_PASS ];then
    SSH_PWD=$1
fi
echo $SSH_PASS|passwd --stdin root
nginx
/usr/sbin/sshd -D



4--开始构建
[root@docker02 /opt/dockerfile/ssh_] # docker image build  -t centos_sshdzd:v1   .


5-启动变量
[root@docker02 /opt/dockerfile/ssh_] # docker run -d -p 88:80 -p 2020:22 --env "SSH_PASS=1" centos_sshdzd:v1 

6-测试
[F:\~]$ ssh root@10.0.0.12 2020




FROM centos:7
RUN curl -o /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo
RUN curl -o /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-7.repo
RUN yum install nginx openssh-server initscripts -y
RUN /usr/sbin/sshd-keygen
ADD init.sh  /init.sh
ENTRYPOINT ["/bin/bash","/init.sh"]

vi  init.sh
#!/bin/bash
if [ -z $SSH_PWD ];then
    SSH_PWD=$1
fi

echo $SSH_PWD|passwd --stdin root
nginx
/usr/sbin/sshd -D
docker run --env 声明环境变量 覆盖  dockerfile ENV 环境变量

11:docker镜像的分层(复用,节省空间)

image-20200528130020228

image-20200528130036225

12:dockerfile的优化

a: 使用体积小的linux镜像alpine
b:尽可能的清理无用的缓存文件(尽可能把多个RUN合并)
c:修改dockerfile的时候,尽可能把修改的内容放在最后
d:使用.dockerignore忽略构建docker镜像时,不需要的文件

构建wordpress-docker_file

[root@docker01 /opt/worldpess] # cat dockerfile 
FROM centos:7
RUN curl -o /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-7.repo
RUN yum install nginx mariadb-server php-fpm php-mysql -y
RUN mysql_install_db --user=mysql --defaults-file=/etc/my.cnf
RUN tmp=`nohup mysqld_safe --defaults-file=/etc/my.cnf &` && sleep 5 && \
 mysql -e "create database wordpress;" && \
 mysql -e "grant all on wordpress.* to wordpress@localhost identified by '123456';"


ADD www.conf /etc/php-fpm.d/www.conf 

ADD nginx.conf /etc/nginx/nginx.conf

RUN  mkdir /code
WORKDIR /code/
ADD wordpress-4.2.2-zh_CN.zip  .
RUN yum install unzip -y

RUN  unzip wordpress-4.2.2-zh_CN.zip 
RUN  mv wordpress/* .
RUN  chown -R nginx:nginx .

ADD init.sh /init.sh

CMD ["/bin/bash","/init.sh"]
--构建
[root@docker01 /opt/worldpess] # docker build -t ceos7_wordp      .

---启动
[root@docker01 /opt/worldpess] # docker run -it  -p 80:80  ceos7_wordp:latest /bin/bash

使用alpine 构建nginx

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
apk add nginx

拆开使用-无法指定ip 地址

容器之前默认网络通。但是ip 无法指定

所已有了 –link 可以直接互联,可以取别名

原因加入了hosts 的解析

[root@7bbae45f49e1 /]# 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    web_2 b70dd70f8b1a hopeful_newton
172.17.0.3    7bbae45f49e1

docker run --link可以用来链接2个容器,使得源容器(被链接的容器)和接收容器(主动去链接的容器)之间可以互相通信,并且接收容器可以获取源容器的一些数据,如源容器的环境变量。

--link的格式:

--link <name or id>:alias

其中,name和id是源容器的name和id,alias是源容器在link下的别名。

[root@docker02 /opt/docker-com] # docker run -it centos6.9_nginx    /bin/bash
[root@docker02 /opt/docker-com] # docker run -it --link b70dd70f8b1a:web_2 centos6.9_nginx:v1   /bin/bash
--可以直接ping 


docker run -d -p 80:80 nginx
​    docker run -it --link quirky_brown:web01 qstack/centos-ssh /bin/bash
​    ping web01    
​    
lb  --->    nginx  172.17.0.4 --> db01   172.17.0.3
​                                            --> nfs01  172.17.0.2

使用docker运行zabbix-server

上传镜像  批量导入
for  i in `ls *.tar.gz`;do docker load -i $i ; done

#-启动mysql
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

#-启动zabbix
docker run --name zabbix-java-gateway -t \
      -d zabbix/zabbix-java-gateway:latest

#启动zabbix 服务端  link 数据库等
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

#启动zabbix 服务端 link 下去
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

单机

14:单机版的容器编排==compose==

yum install docker-compose -y(需要epel源)

用于批量启动容器停止从启

用于批量管理

---curl -o /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-7.repo

--yum install  docker-compose   -y

版本不同语法格式不一样 v1 v2 v3 
[root@docker01 /opt/docker-compos/zabbix] # mkdir /opt/docker-compos
--一个项目一个docker-compos
[root@docker01 /opt/docker-compos] # mkdir zabbix/
[root@docker01 /opt/docker-compos/zabbix] # vim docker-compose.yml 

常用命令  第一次启动 up 
--启动 后台
[root@docker01 /opt/docker-compos/zabbix] # docker-compose  up -d 
--停止
[root@docker01 /opt/docker-compos/zabbix] # docker-compose  stop 
--启动
[root@docker01 /opt/docker-compos/zabbix] # docker-compose  start  
--从启
[root@docker01 /opt/docker-compos/zabbix] # docker-compose  restart 

-f  指定配置文件
--停掉删除
[root@docker01 /opt/docker-compos/zabbix] # docker-compose  down 


-- 从启某一个容器 
[root@docker01 /opt/docker-compos/zabbix] # docker-compose  restart    mysql-server
Restarting zabbix_mysql-server_1 ... done

image-20200528193831581

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

方案二

version: "3"
services:
  db:
    image: mysql:5.7
    volumes:
      - /var/lib/mysql:/var/lib/mysql
    #自动重启
    restart: always
    environment:
      #指定MySQL的root账号初始密码
      MYSQL_ROOT_PASSWORD: 123456
      #指定容器启动后要创建的数据库
      MYSQL_DATABASE: wordpress
      #指定容器在启动后要创建的普通用户账号,该账号有远程登录的权限
      MYSQL_USER: tom
      #为用户设置密码
      MYSQL_PASSWORD: 123456
  wordpress:
    depends_on:
      - db
   # image: 10.30.12.55/docker/wordpress
    image: c39f75d30bcd 
    ports:
      - "8000:80"
    restart: always
    environment:
      #指定要使用的数据库名
      WORDPRESS_DB_NAME: wordpress
      #指定要MySQL容器的ip和端口
      WORDPRESS_DB_HOST: db:3306
      #指定登录MySQL的账号
      WORDPRESS_DB_USER: tom
      #指定登录MySQL的密码
      WORDPRESS_DB_PASSWORD: 123456

docker-compose up -d 启动服务

docker-compose down 停止服务

---------
[root@docker02 ~] # docker run --name mysql -e MYSQL_ROOT_PASSWORD=admin -p 3306:3306 -d mysql:5.6
6f6c2dfb74c6b7f34348e241a1a6b814afba4aacc39067ae89bbebb5273d11dd
[root@docker02 ~] # docker run -itd --name wordpress -e WORDPRESS_DB_HOST=mysql -e WORDPRESS_DB_PASSWORD=admin -p 80:80 --link mysql:mysql -d wordpress
d42450049b2fcaebed2bf346a0968859d15c1c548cba37f5044ff6690df3a58a

14.1-游戏架构

服务端:内存4G+
桥接
TYPE=Ethernet
BOOTPROTO=dhcp
NAME=eth0
DEVICE=eth0
ONBOOT=yes
~            
~     
[root@kvm ~] # curl -o /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-7.repo
bash 源


安装docker 
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 docker-compose -y

systemctl enable docker
[root@kvm /etc/yum.repos.d] # systemctl start docker


上传服务器包
fuck.tar

[root@kvm ~] # tar xf fuck.tar.gz -C /usr/local/games/
[root@kvm /etc/yum.repos.d] # cd /usr/local/games/fuck/

[root@kvm /usr/local/games/fuck] # ./start 
af6bf1987c2e: Loading layer [==================================================>]  201.5MB/201.5MB
1be27ef8f857: Loading layer [==================================================>]  608.7MB/608.7MB

修改游戏服务器列表信息中的ip地址
[root@kvm ~] # vi /usr/local/games/fuck/www/tianlong3D/conf/serverlist/serverlist.txt

[root@kvm ~] # cat /usr/local/games/fuck/www/tianlong3D/conf/serverlist/serverlist.txt
Id    Desc    Name    Ip    Port    State    Type    GroupName                
INT    STRING    STRING    STRING    INT    INT    INT    STRING                
#预留                                            
#    描述    服务器名    IP    端口    状态 状态 顺畅0 拥挤1 火爆2 维护3    类型 不推荐0 推荐1    组名        
19901    混服公测服    天上人间    192.168.1.1    2231    1    0    1--10
19901    混服公测服    天上上地狱    192.168.1.1    2231    1    0    1--10

客户端:
安装win-jdk 1.8
打开ApkIDE最新3.3.3少月增强版
反编译apk包

C:\Program Files\Java\jdk1.8.0_66\
选着项目
编译成功打开目录
G:\小明同学作业表\文件脚本网站\天龙八部\ApkIDE最新3.3.3少月增强版\Work\com.mto.sdk.tlbb.sm
安装win-jdk 1.8
打开ApkIDE最新3.3.3少月增强版
反编译apk包
修改assets\config.properties文件8,13,14行
修改res\values\strings.xml文件9,10,17,18服务器地址



充值元宝
http://192.168.1.111:81/zt/gm.php
http://IP:81/zt/gm.php
gmcode默认123456

[root@kvm /usr/local/games/fuck] # docker exec  -it  9a8eb5c45728  /bin/bash 
root@9a8eb5c45728:/# mysql -uroot -p12345

mysql> use  mtlbbdb_19900 
mysql> select * from  t_char \G;
mysql> update t_char  set   leve1=80 where  aid=17
mysql> update  mtlbbdb_19900.t_char   set  level='80' where aid=17;

15:私有仓库docker-registry


https://oldqiang.com/archives/350.html  参考文献

#启动私有仓库
registry.tar.gz

[root@docker01 ~] # docker image load  -i  registry.tar.gz 

[root@docker01 ~] # docker run -d  -p 5000:5000 --restart=always  --name registy -v /opt/myregistry:/var/lib/registry registry

#镜像地址
nginx:1.15        官方仓库的官方镜像
nginx/nginx:1.15  官方仓库的用户镜像

daocloud.io/nginx/nginx:1.15  私有仓库的镜像

#上传镜像
docker tag alpine:3.9 10.0.0.11:5000/alpine:3.9
docker image push 10.0.0.11:5000/alpine:3.9
#第一次上传镜像会报错
Get https://10.0.0.11:5000/v2/: http: server gave HTTP response to HTTPS client
这个私有仓库,用的是http协议

vim /etc/docker/daemon.json
{
  "registry-mirrors": ["https://registry.docker-cn.com"],
  "insecure-registries": ["10.0.0.11:5000"]#信任该仓库
}

systemctl  restart docker

docker image push 10.0.0.11:5000/alpine:3.9


#下载镜像
docker image pull 10.0.0.11:5000/alpine:3.9

注意名字浅醉域名ip
[root@docker02 ~] # docker  tage   b7b28af77ffe dockerluhong/alpine:v1  
[root@docker02 ~] # docker  push  dockerluhong/alpine:v1  

https://oldqiang.com/archives/350.html

 # du -smh *
 查看镜像列表
使用浏览器访问:
http://10.0.0.11:5000/v2/_catalog

15.1官方仓库

1--注册一个账户 
https://hub.docker.com/repositories
2-登入docker 用户名密码
[root@docker01 /etc/docker] # docker login 
3-标签写入
[root@docker01 /etc/docker] # docker tag 0c7c1b331e52 dockerluhong/alpine_nginx:v1 
4-推送文件
[root@docker01 /etc/docker] # docker push dockerluhong/alpine_nginx:v1

本地仓库加安全认证

生成密码:
yum install httpd-tools -y
mkdir /opt/registry-auth/ -p
htpasswd  -Bbn oldguo 123 > /opt/registry-auth/htpasswd

重新启动带有秘钥功能的registry容器

docker rm -f `docker ps -aq`
docker run -d -p 5000:5000 -v /opt/registry-auth/:/auth/ -v /opt/registry:/var/lib/registry  --name register-auth -e "REGISTRY_AUTH=htpasswd" -e "REGISTRY_AUTH_HTPASSWD_REALM=Registry Realm" -e "REGISTRY_AUTH_HTPASSWD_PATH=/auth/htpasswd" registry 

push镜像,需要进行login

[root@oldboy ~]# docker login 10.0.0.100:5000
Username: oldguo  
Password: 

16: 企业级私有仓库==harbor(==docker-compose)

#下载安装器
https://github.com/goharbor/harbor/releases/download/v1.10.0/harbor-offline-installer-v1.10.0.tgz
#解压
[root@docker01 opt]# tar xf harbor-offline-installer-v1.8.0.tgz 
#修改配置文件
cd  harbor
vim harbor.yml
5 hostname: 10.0.0.12
25 harbor_admin_password: 123456
#执行安装脚本
 ./install.sh
 yum -y install docker-conpre

 admin  123456
 要么域名要么ip  用 docker-conpre 启动的 80端口

为harbor配置https证书

可以使用443端口:可以推送镜像

--1上传证书
[root@docker02 /opt/cert] # mkdir  /opt/cert/
--2配置好路经

#修改harbor.yml
#配置域名
hostname: blog.oldqiang.com

#配置证书
https:
  port: 443
  certificate: /opt/certs/Nginx/1_blog.oldqiang.com_bundle.crt
  private_key: /opt/certs/Nginx/2_blog.oldqiang.com.key

#重新执行安装脚本
[root@docker02 ~/harbor] # ./install.sh 
--电脑端解析域名端口
--宿主机解析 不然失败
--访问测试

--------------------------------
  5 hostname: blog.oldqiang.com
  6 
  7 # http related config
  8 #http:
 10  # port: 80
 11 

# https related config
 12 # https related config
 13 https:
 14    port: 443
 15    certificate: /opt/cert/Nginx/1_blog.oldqiang.com_bundle.crt
 16    private_key: /opt/cert/Nginx/2_blog.oldqiang.com.key
 17 

--------------

本地解析  虚拟机解析


--登录 https://blog.oldqiang.com/
[root@docker02 ~/harbor] # docker login  blog.oldqiang.com
[root@docker01 /etc/docker] # docker tag nginx:latest   blog.oldqiang.com/nginx:v1
--标签推送
[root@docker01 /etc/docker] # docker tag nginx:latest   blog.oldqiang.com/library/ngin:v1
[root@docker01 /etc/docker] # docker push  blog.oldqiang.com/library/ngin:v1

--存放密码的位置
[root@docker01 /etc/docker] # cat /root/.docker/config.json 
bash 64 可揭秘

迁移

迁移位置  系统 仓库管理 
系统     同步管理

image-20200529210423659

image-20200529145457178

17:docker基础网络

四种基础网络类型

bridge  默认类型 NAT模式 docker run 没有指定--network 172.17.0.x/16
host    host类型,使用宿主机网络,网络性能最高   容易端口冲突  主机名字:ip 地址一样
container 容器类型。使用其他容器共用网络,k8s中使用
none    没有网络,上不了外网  
[root@docker01 ~] # docker run -it   --network host   centos:7   /bin/bash 
[root@docker01 /]# 主机名字都会一样 注意已什么角色进入
[root@docker01 ~] # docker run -it   --network none   alpine:latest   /bin/sh
[root@docker01 ~] # docker inspect    host  

--3  container
[root@docker01 ~] # docker run   -d      centos6.9_kod:v3  
[root@docker01 ~] # docker run     -it  --network container:3351eab0ee79      centos:6.9   /bin/bash  
基于刚刚的容器启动同镜像同网络 共用端口 ip 地址同上个

创建自定义网络 ==bridge==


使用自定义网络启动容器


[root@docker02 ~/harbor] # docker inspect  harbor_harbor 
查看用 docker.compose.network": "harbor", 自动创建的网络
docker network create -d bridge --subnet 172.18.0.0/16 --gateway 172.18.0.1 oldqiang
如果被使用了就报错
docker network create -d bridge --subnet 172.30.0.0/16 --gateway 172.30.0.1 oldqiang

使用自定义网络启动容器
[root@docker02 ~] # docker run  -it   --network oldqiang    centos:6.9  /bin/bash


[root@docker02 ~/harbor] # docker network  ls
NETWORK ID          NAME                DRIVER              SCOPE
e0caf7c74c5b        bridge              bridge              local
9ee098ee4645        docker_gwbridge     bridge              local
63021e4c7330        dockercom_default   bridge              local
a5c9f376d7a8        harbor_harbor       bridge              local
731a4450c82e        host                host                local
b45e10c3daa9        macvlan_1           macvlan             local
8d56426c3041        none                null                local
c05d3caf2a0a        oldqiang            bridge              local


18:跨宿主机容器间的通讯之macvlan

==macvlan类似与虚拟机的桥接网络==不能自动分配地址

#创建网络——01-02任何一个节点创建网络。都会同步网络
docker network create -d macvlan --subnet 10.0.0.0/24 --gateway 10.0.0.254 -o parent=eth0 macvlan_1

创建 网络  macvlan   地址范围 网关   桥接到eth0 只能桥接一次

#启动容器
[root@docker01 ~] # docker run -it --network macvlan_1 --ip 10.0.0.105 alpine:3.9 
[root@docker02 ~] # docker run -it --network macvlan_1 --ip 10.0.0.106 alpine:3.9 
                        网络模式                指定ip 地址
                        注意容器主机名字不可以相同


可以直接ping 通

macvlan 非常类似kvm虚拟机的桥接网络,不能自动分配ip地址,每次docker run启动容器,需要手动指定ip

19:跨宿主机容器间的通讯之==overlay==

docker01 docker02 docker03
overlay overlay consul
consul 数据库 保管ip 地址 存储ip地址分配和节点
每个数据库都要去注册进去成为节点,集中起来管理方案
加入 overlay 网络 就属于同一个集群,后面创建网络自动加入
1--安装doker-ce 更改源
[root@docker03 ~] # wget -O /etc/yum.repos.d/docker-ce.repo https://download.docker.com/linux/centos/docker-ce.repo

[root@docker03 ~] # sed -i 's+download.docker.com+mirrors.tuna.tsinghua.edu.cn/docker-ce+' /etc/yum.repos.d/docker-ce.repo

[root@docker03 ~] # yum install docker-ce -y

image-20200529164946855

1--上传安装包
[root@docker03 ~]# ocker_progrium_consul.tar.gz
[root@docker03 ~] # docker03上: consul存储ip地址的分配

[root@docker03 ~] #  docker run -d -p 8500:8500 -h consul --name consul progrium/consul -server -bootstrap

参数介绍
 -bootstrap:用来控制一个server是否在bootstrap模式,在一个datacenter中只能有一个server处于bootstrap模式,当一个server处于bootstrap模式时,可以自己选举为raft leader,在一个节点的模式下这种方式很重要,否则在集群中的一致性不能保证,不推荐在集群中应用这个标识
 -server:定义agent运行在server模式还是Client模式,提供时即为Server端,每个集群至少有一个server并且每台机器上不要超过5个dataceter.所有服务器采用一致性算法Raft保证数据一致,确保在故障的情况下的可用性。

 -------------------------------------------------------

2--访问  http://10.0.0.13:8500/

3-docker01、02上:
[root@docker03 ~] # vim  /etc/docker/daemon.json

{
  "cluster-store": "consul://10.0.0.13:8500", #集群信息
  "cluster-advertise": "10.0.0.11:2376"#节点信息
}
-----
4-systemctl restart docker
----
5-加入文件解析
-------
10.0.0.11 docker01
10.0.0.12 docker02
-----------

2)创建overlay网络
docker01--一次就好
docker network create -d overlay --subnet 172.26.0.0/16 --gateway 172.26.0.1  ol1
                    创建网卡     名字            段位          网关   名字


3)启动容器测试
[root@docker01 ~] # docker run -it --network ol1 --name oldboy01  alpine:latest  /bin/sh
[root@docker02 ~] # docker run -it --network ol1 --name oldboy02  alpine:latest  /bin/sh

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

#  全局网络  overlay 一个节点有全部有  网络主机名不能 一样

image-20200529170649562

20:docker容器的监控

image-20200529172139589

0--#客户端节点
#安装数据采集器 https://prometheus.io/ 谷歌公司
采集到的数据,普罗米修斯收集数据找他们要数据-自带时间序列数据库-报警
出图展示 #grafana

[root@docker02 ~/harbor] # docker stats  --no-stream 

1--安装01-02-安装
docker_monitor_node.tar.gz
[root@docker01 /opt] # docker load  -i docker_monitor_node.tar.gz   两个镜像
[root@docker02 ~] # docker load  -i docker_monitor_node.tar.gz 


2--启动node-exporter 挂载采集信息   11  12 
[root@docker01 /opt] # docker run -d   -p 9100:9100   -v "/:/host:ro,rslave"   --name=node_exporter   quay.io/prometheus/node-exporter   --path.rootfs /host

启动cadvisor    11  12  9100端口
[root@docker02 ~] # 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


3--prometheus节点  3 主要节点
安装prometheus和grafana
[root@docker03 ~] #  tar xf prometheus-2.12.0.linux-amd64.tar.gz 

 cd prometheus-2.12.0.linux-amd64/

[root@docker03 ~/prometheus-2.12.0.linux-amd64] # vim prometheus.yml 
scrape_configs:
  - job_name: 'prometheus'
    static_configs:
    - targets: ['localhost:9090']
  - job_name: 'cadvisor'
    static_configs:
    - targets: ['10.0.0.11:8080','10.0.0.12:8080']
  - job_name: 'node_exporter'
    static_configs:
    - targets: ['10.0.0.11:9100','10.0.0.12:9100']

[root@docker03 ~/prometheus-2.12.0.linux-amd64] # ./prometheus --config.file="prometheus.yml"  &


4--#安装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.0.0.13:9090

image-20200529185834106

image-20200529190052098

image-20200529190230203

image-20200529190655469

image-20200529223409659


   转载规则


《02-docker基础操作》 小明 采用 知识共享署名 4.0 国际许可协议 进行许可。
 上一篇
03-k8s集群的安装 03-k8s集群的安装
1:k8s集群的安装1.1 k8s的架构通常我们都是通过 kubectl 对 Kubernetes 下命令的,它通过 APIServer 去调用各个进程来完成对 Node 的部署和控制。 APIServer 的核心功能是对核心对象(例如:
2020-06-05
下一篇 
01-云计算_kvm_openstack 01-云计算_kvm_openstack
1:什么是云计算?云计算是一种按量付费的模式!云计算的底层是通过虚拟化技术来实现的! 2:云计算的服务类型2.1 IAAS 基础设施即服务(infrastructure as an service) 虚拟机 ecs opensta
  目录