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左右更新完毕