docker数据卷的管理以及集群的建立

docker
数据卷管理
docker run 在创建容器时使用 -v 参数可以挂载一个或多个数据卷到当前运行的容器中,-v
的作用是将宿主机上的目录作为容器的数据卷挂载到容器中,使宿主机和容器之间可以共
享一个目录。
挂载数据卷到新创建的容器上:

docker run -it –name westos -v /tmp/data1:/data1 -v /tmp/data2:/data2 rhel7 /bin/bash

-v 参数可以重复使用,挂载多个数据卷到容器中,冒号前面的是宿主机的目录(本地目录
不存在 docker 会自动创建),冒号后面的是容器中的挂载目录。
注:docker commit 时卷的数据不会被保存。

Usage:  docker volume COMMAND

Manage volumes

Options:
      --help   Print usage

Commands:
  create      Create a volume #创建创建卷
  inspect     Display detailed information on one or more volumes#检查显示一个或多个卷的详细信息
  ls          List volumes#ls列出卷
  prune       Remove all unused volumes#prune删除所有未使用的卷
  rm          Remove one or more volumes#rm删除一个或多个卷

Run 'docker volume COMMAND --help' for more information on a command.

将nginx或是apache等一些静态的文件可以封装在镜像里面,并共用他的数据卷,这样做的目的可以节省资源,是资源利用达到最大化

[root@foundation19 test]# ls
Dockerfile  html.sh  index.html  nginx  sss.tar
[root@foundation19 test]# tar tf sss.tar #将目录以及静态页面打压,通过add可以实现自动压缩
nginx/
nginx/html/
nginx/html/index.html
[root@foundation19 test]# cd nginx/html/
[root@foundation19 html]# ls
index.html
[root@foundation19 html]# cat index.html #页面所有的内容
<h1>hello word</h1>
<h1>hello word</h1>
<h1>hello word</h1>
<h1>hello word</h1>
<h1>hello word</h1>
<h1>hello word</h1>
<h1>hello word</h1>
[root@foundation19 html]# cd -
/tmp/docker/test
[root@foundation19 test]# cat Dockerfile #Dockerfile所写内容
FROM rhel7
ADD sss.tar /usr/share
VOLUME ["/usr/local/nginx/html"]
[root@foundation19 test]# docker build -t rhel7:v5 .   #制作镜像文件
Sending build context to Docker daemon 15.87 kB
Step 1/3 : FROM rhel7
 ---> 0a3eb3fde7fd
Step 2/3 : ADD sss.tar /usr/share
 ---> 45114d2819c2
Removing intermediate container ec7b87bdaf3e
Step 3/3 : VOLUME /usr/share/nginx/html
 ---> Running in baf1cd7277dd
 ---> 49367a3812c4
Removing intermediate container baf1cd7277dd
Successfully built 49367a3812c4
[root@foundation19 test]# vim Dockerfile 
[root@foundation19 test]# docker create --name hmp rhel7:v5 bash #使用该镜像会生成一个数据卷
8762cc88e2759649b8a2044d9eb736194025b289161ae82d29041888b2899879
[root@foundation19 test]# docker run -d --name vm1 --volumes-from hmp nginx  #使用该数据卷以及nginx镜像并构建一个nginx服务容器
d8f7420e79a2d77b1d1344246847b851f91b952233a7833dfe5049e4dfca6716
(reverse-i-search)`vm': docker run -d --name nginx --volumes-from hmp nginx
[root@foundation19 test]# docker inspect hmp | grep vo  #数据卷会生成在以下目录里面
                "Type": "volume",
                "Source": "/var/lib/docker/volumes/4d6dca9a50dbfa16f117a902be672939638096149fd7bf7ac33dad89747d300b/_data",
[root@foundation19 test]# cd /var/lib/docker/volumes/4d6dca9a50dbfa16f117a902be672939638096149fd7bf7ac33dad89747d300b/_data
[root@foundation19 _data]# ls  #进入后查看
index.html
[root@foundation19 _data]# cat index.html 
<h1>hello word</h1>
<h1>hello word</h1>
<h1>hello word</h1>
<h1>hello word</h1>
<h1>hello word</h1>
<h1>hello word</h1>
<h1>hello word</h1>
[root@foundation19 _data]# docker inspect vm1 | grep vo' #查看vm1容器的数据卷
[root@foundation19 _data]# ls
index.html
[root@foundation19 _data]# cat index.html 
<h1>hello word</h1>
<h1>hello word</h1>
<h1>hello word</h1>
<h1>hello word</h1>
<h1>hello word</h1>
<h1>hello word</h1>
<h1>hello word</h1>

这里写图片描述
docker swarm搭建docker集群

[root@server11 ~]# yum install -y bash-* #下载工具,可以自动补齐命令,使用终端连接的话需要退出重新进入加载变量方可生效
Loaded plugins: product-id, search-disabled-repos, subscription-manager
This system is not registered to Red Hat Subscription Management. You can use subscription-manager to register.
Package bash-4.2.46-20.el7_2.x86_64 already installed and latest version
Package 1:bash-completion-2.1-6.el7.noarch already installed and latest version
Nothing to do
[root@server11 ~]# docker swarm

Usage:  docker swarm COMMAND

Manage Swarm

Options:
      --help   Print usage

Commands:
  init        Initialize a swarm #init初始化一个群
  join        Join a swarm as a node and/or manager #join将swarm加入为节点和/或管理器
  join-token  Manage join tokens #join-token管理连接令牌
  leave       Leave the swarm #离开离开群
  unlock      Unlock swarm #解锁解锁群
  unlock-key  Manage the unlock key #unlock-key管理解锁密钥
  update      Update the swarm #更新群 

Run 'docker swarm COMMAND --help' for more information on a command.
[root@server11 ~]# docker swarm init
Swarm initialized: current node (5tzqa03rlipbfn8k6e3z9bvly) is now a manager.

To add a worker to this swarm, run the following command:

    docker swarm join \
    --token SWMTKN-1-1jgaxgciyq52jfru6fnxsfk1l32uzbml0e9dall1yiypx47t3d-5n1y2ulpq3kucdhdb4kwfpo30 \
    172.25.19.11:2377

To add a manager to this swarm, run 'docker swarm join-token manager' and follow the instructions.

[root@server11 ~]# docker node ls #查看节点
ID                           HOSTNAME  STATUS  AVAILABILITY  MANAGER STATUS
5tzqa03rlipbfn8k6e3z9bvly *  server11  Ready   Active        Leader
9zyfsrtqxmvq6k48lvoz9k68v    server33  Ready   Active        
wf2pgw1rh5aw6vm9pyk2nn6lg    server22  Ready   Active        

安装监控
首先在仓库之中推入
我这里仓库时http方式,没有加密所以不够安全,推荐可以使用https的方式

[root@foundation19 ~]# docker tag dockersamples/visualizer westos.org:5000/visualizer
[root@foundation19 ~]# docker push westos.org:5000/visualizer
The push refers to a repository [westos.org:5000/visualizer]
5f70bf18a086: Image successfully pushed 
94cd25765710: Image successfully pushed 
fa467b43abc0: Image successfully pushed 
ea93ed99abca: Image successfully pushed 
53888d7f4cca: Image successfully pushed 
2d6a463420f7: Image successfully pushed 
d5aa1ab1b431: Image successfully pushed 
00ed018016c5: Image successfully pushed 
d1627040da6d: Image successfully pushed 
300a6cad969a: Image successfully pushed 
dfd8ee95c7e7: Image successfully pushed 
f7e883283ebc: Image successfully pushed 
0a19bde117a5: Image successfully pushed 
5bef08742407: Image successfully pushed 
Pushing tag for rev [17e55a9b2354] on {http://westos.org:5000/v1/repositories/visualizer/tags/latest}

在master端创建镜像

[root@server11 ~]# docker service create \
>  --name=viz \
>  --publish=8080:8080/tcp \
>  --constraint=node.role==manager \
>  --mount=type=bind,src=/var/run/docker.sock,dst=/var/run/docker.sock \
>   westos.org:5000/visualizer

这里写图片描述

[root@server11 ~]# docker service create --name nginx --publish 80:80 --replicas 6 westos.org:5000/nginx# 跑上六个nginx服务
[root@server11 ~]# docker service ps nginx #查看状态,会发现每个节点分配了两个 
ID            NAME     IMAGE                  NODE      DESIRED STATE  CURRENT STATE            ERROR  PORTS
5u8sfl4i62m4  nginx.1  westos.org:5000/nginx  server11  Running        Preparing 4 seconds ago         
ef1m0nfntxz6  nginx.2  westos.org:5000/nginx  server22  Running        Preparing 5 seconds ago         
rx3ixr69c84e  nginx.3  westos.org:5000/nginx  server33  Running        Preparing 5 seconds ago         
57dl907z9une  nginx.4  westos.org:5000/nginx  server11  Running        Preparing 4 seconds ago         
xwbcghjb1273  nginx.5  westos.org:5000/nginx  server22  Running        Preparing 5 seconds ago         
zbth8icc79x4  nginx.6  westos.org:5000/nginx  server33  Running        Preparing 4 seconds ago         
[root@server11 ~]# docker ps #查看以下 确定
CONTAINER ID        IMAGE                               COMMAND                  CREATED             STATUS                   PORTS               NAMES
0e32bc7c0d2d        westos.org:5000/nginx:latest        "nginx -g 'daemon ..."   27 seconds ago      Up 22 seconds            80/tcp              nginx.4.57dl907z9uneqzieqf5kgkod8
7a908330b137        westos.org:5000/nginx:latest        "nginx -g 'daemon ..."   27 seconds ago      Up 23 seconds            80/tcp              nginx.1.5u8sfl4i62m48g51eml9e83im
9e22098ca458        westos.org:5000/visualizer:latest   "npm start"              8 minutes ago       Up 8 minutes (healthy)   8080/tcp            viz.1.xjpgppzx1rra5try9q6tlf1vg

观看监控 清楚明了
这里写图片描述

docekr 会自动进行负载均衡的调用
为了更直观的显示,在每个容器内写入不同的静态页面
这里写图片描述

滚动更新

 docker service update --image westos.org:5000/game2048 --update-parallelism 3 --update-delay 5s nginx #每5s更新一次 每次更新3个

为了更加直观的表现出来,我值这里创建了30个容器的集群,可以使用docker service 命令直接创建
这里写图片描述
在更新过程中
这里写图片描述
经过50s左右更新完毕

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值