Docker数据卷管理,私有仓库搭建以及docker-machine部署

一、数据卷

 数据卷        是一个可供一个或多个容器使用的特殊目录,它绕过 UFS,可以提供很多有用的特

性:

  • 数据卷 可以在容器之间共享和重用
  • 数据卷 的修改会立马生效
  • 数据卷 的更新,不会影响镜像,数据卷 默认会一直存在,即使容器被删除

    数据卷 的使用,类似于 Linux 下对目录或文件进行 mount,镜像中的被指定为挂
    载点的目录中的文件会隐藏掉,能显示看的是挂载的 数据卷

创建一个数据卷

$  docker  volume  create  my-vol

查看所有的 数据卷

$  docker  volume  ls
local                my-vol

在主机里使用以下命令可以查看指定 数据卷 的信息

$  docker  volume  inspect my-vol
[
                {
                                "Driver":   "local",
                                "Labels":   {},
                                "Mountpoint":   "/var/lib/docker/volumes/my-vol/_data",
                                "Name": "my-vol",
                                "Options":  {},
                                "Scope":    "local"
                }
]
启动一个挂载数据卷的容器
[root@18 test]# vim Dockerfile 
FROM rhel7
ADD html.tar /usr/share
VOLUME ["/usr/share/nginx/html"]
[root@18 test]# tree nginx/
nginx/
└── html
    └── index.html
[root@18 test]# tar -cf html.tar nginx/
[root@18 test]# vim html.tar 
[root@18 test]# docker build -t rhel7:v1 .
Sending build context to Docker daemon 16.38 kB
Step 1/3 : FROM rhel7
 ---> 0a3eb3fde7fd
Step 2/3 : ADD html.tar /usr/share
 ---> 004a859de6f4
Removing intermediate container 3068abf48972
Step 3/3 : VOLUME /usr/share/nginx/html
 ---> Running in aa8f81643e8e
 ---> 21819872d8dd
Removing intermediate container a

[root@18 test]# docker create --name vol rhel7:v1 bash
42047c6b05ce377ba6c40b32a67c48053a6873f4ba7c0d2311a067d8a7b79163
[root@18 test]# docker run -d --name vm1 --volumes-from vol nginx
3905c1f8a444b6348ff590f7e6d27734d8ed72fa46317e6aeb0e09ae634ba659

[root@18 test]# curl 172.17.0.3
<h1>Docker</h1>

二、配置私有仓库

生成 http 认证文件
[root@18 docker]# mkdir auth

[root@18 docker]# docker run --entrypoint htpasswd registry:2.3.1 -Bbn wxh westos > auth/htpasswd
[root@18 docker]# cat auth/htpasswd 
wxh:$2y$05$m1RLHkjuJTpi9deYMMfg1OD1iLW9/2bKW.h2gd4ghzoJEa3V9V9yq
##htpasswd命令测试,可忽略
[root@18 docker]# htpasswd -cm htpaswd wxh
New password: 
Re-type new password: 
Adding password for user wxh
[root@18 docker]# cat htpaswd 
wxh:$apr1$U7nXN3sd$ySw7SDbs3a2pIGiy9S63J/
[root@18 docker]# htpasswd -m htpaswd admin
New password: 
Re-type new password: 
Adding password for user admin
[root@18 docker]# cat htpaswd 
wxh:$apr1$U7nXN3sd$ySw7SDbs3a2pIGiy9S63J/
admin:$apr1$U8h7BjxU$oondSYh78.0C0b2UpRBnW0
搭建仓库
[root@18 docker]# docker run -d    --restart=always    --name registry    -v `pwd`/certs:/certs    -e REGISTRY_HTTP_ADDR=0.0.0.0:443    -e REGISTRY_HTTP_TLS_CERTIFICATE=/certs/domain.crt    -e REGISTRY_HTTP_TLS_KEY=/certs/domain.key  -v `pwd`/auth:/auth -e "REGISTRY_AUTH=htpasswd" -e "REGISTRY_AUTH_HTPASSWD_REALM=Registry Realm"  -e REGISTRY_AUTH_HTPASSWD_PATH=/auth/htpasswd  -p 443:443    registry:2.3.1
7c3ed6745db4c90be283b3ff55b0707579919fce6ee3f51201834a05d4eb2139

这样我们就搭建好了一个具有权限认证、TLS 的私有仓库

##检查443端口是否开启
[root@18 docker]# netstat -antlup | grep 443
tcp6       0      0 :::443                  :::*                    LISTEN      8639/docker-proxy   

测试私有仓库功能

[root@18 docker]# docker images | grep westos.org
westos.org/rhel7        latest              0a3eb3fde7fd        4 years ago         140 MB

尝试推送

[root@18 docker]# docker push westos.org/rhel7
The push refers to a repository [westos.org/rhel7]
18af9eb19b5f: Preparing 
no basic auth credentials

登录到私有仓库。

[root@18 docker]# docker login -u wxh -p westos westos.org
Login Succeeded
[root@18 docker]# cat /root/.docker/config.json 
{
    "auths": {
        "westos.org": {
            "auth": "d3hoOndlc3Rvcw=="
        }
    }
}

推送成功

[root@18 docker]#docker push westos.org/rhel7
The push refers to a repository [westos.org/rhel7]
18af9eb19b5f: Pushed 
latest: digest: sha256:f1b19bc905965d1ff157c76b9ef6615c119aadad3cf4652bc881d3354ba3fdc4 size: 528

三、Compose

Defining    and running multi-container Docker  applications

Compose 项目是 Docker 官方的开源项目,负责实现对 Docker 容器集群的快速编排。从功能上看,跟 OpenStack 中的 Heat 十分类似。
其代码目前在 https://github.com/docker/compose 上开源。

Compose 允许用户通过一个单独的     docker-compose.yml      模板文件

(YAML 格式)来定义一组相关联的应用容器为一个项目(project)。
Compose 中有两个重要的概念:

  • 服务 ( service ):一个应用的容器,实际上可以包括若干运行相同镜像的容器实例。
  • 项目 ( project ):由一组关联的应用容器组成的一个完整业务单元,在 **docker-
    compose.yml** 文件中定义。

Compose 的默认管理对象是项目,通过子命令对项目中的一组容器进行便捷地生命周期管
理。
Compose 项目由 Python 编写,实现上调用了 Docker 服务提供的 API 来对容器进行管理。因
此,只要所操作的平台支持 Docker API,就可以在其上利用 Compose 来进行编排管理。

[root@18 compose]# cd /usr/local/bin/
[root@18 bin]# ln -s docker-compose-Linux-x86_64-1.22.0 docker-compose
[root@18 bin]# docker-compose version
docker-compose version 1.22.0, build f46880fe
docker-py version: 3.4.1
CPython version: 3.6.6
OpenSSL version: OpenSSL 1.1.0f  25 May 2017
[root@18 compose]# tree .
.
├── docker-compose.yml
├── haproxy
│   └── haproxy.cfg
└── web
    └── index.html
[root@18 compose]# cat docker-compose.yml 
apache:
    image: rhel7:v1
    expose:
        - 80
    volumes:
        - ./web:/var/www/html
nginx:
    image: nginx
    expose:
        - 80

haproxy:
    image: haproxy
    volumes:
        - ./haproxy:/usr/local/etc/haproxy
    links:
        - apache
        - nginx
    ports:
        - "8080:80"
    expose:
        - 80
[root@18 compose]# cat web/index.html 
<h1>Docker</h1>
[root@18 compose]# cat haproxy/haproxy.cfg 
global
    log 127.0.0.1 local0
    log 127.0.0.1 local1 notice
defaults
    log global
    mode http
    option httplog
    option dontlognull
    timeout connect 5000ms
    timeout client 50000ms
    timeout server 50000ms
    stats uri /status
frontend balancer
    bind 0.0.0.0:80
    default_backend web_backends
backend web_backends
    balance roundrobin
    server web1 apache:80 check
    server web2 nginx:80 check

运行 compose 项目

[root@18 compose]# docker-compose up
Recreating compose_apache_1 ... done
Starting compose_nginx_1    ... done
Recreating compose_haproxy_1 ... done
apache与nginx负载均衡

这里写图片描述

这里写图片描述
这里写图片描述

四、集群图形化显示工具 Visualizer

首先创建一个vislualizer镜像

[root@18 docker]# docker tag dockersamples/visualizer westos.org/visualizer
[root@18 docker]# docker tag nginx westos.org/nginx
[root@18 docker]# 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/visualizer
[root@18 docker]# docker run -d --restart=always --name registry -v `pwd`/certs:/certs    -e REGISTRY_HTTP_ADDR=0.0.0.0:443 -e REGISTRY_HTTP_TLS_CERTIFICATE=/certs/domain.crt -e REGISTRY_HTTP_TLS_KEY=/certs/domain.key -p 443:443 registry:2.3.1
37734567e341d13e98150a5d90bd500ee0aaf1ba3638c7623ca7f5e06d204c72
[root@18 docker]# scp -r /etc/docker/certs.d/ server1:/etc/docker/root@server1's password: 
[root@18 docker]# scp -r /etc/docker/certs.d/ server1:/etc/docker/root@server2's password: 
[root@18 docker]# scp -r /etc/docker/certs.d/ server1:/etc/docker/root@server3's password: 
[root@18 docker]# docker push westos.org/nginx
[root@18 docker]# docker load -i /mnt/docker/visualizer.tar
[root@server1 docker]# docker ps
CONTAINER ID        IMAGE                                                                                           COMMAND                  CREATED             STATUS                    PORTS               NAMES
3bf1f29d0482        westos.org/nginx@sha256:e59bbe13ca0c309644d9bca972c1b660c170fbdee7ff81eda9ff966b86f14e63        "nginx -g 'daemon ..."   9 minutes ago       Up 9 minutes              80/tcp, 443/tcp     nginx.1.2exl0v7eex83wbpibqw7e0i7h
[root@server1 docker]# docker service scale nginx=1
[root@server1 docker]# echo "server1" > index.html
[root@server1 docker]# docker cp index.html nginx.1.2exl0v7eex83wbpibqw7e0i7h:/usr/share/nginx/html/
[root@server2 mnt]# echo "server2" > index.html
[root@server2 mnt]# docker cp index.html nginx.3.b77d9xbtgxd6ixgmkpb26yjt2:/usr/share/nginx/html/
[root@server2 mnt]# docker run -d --name vm1 westos.org/nginx
[root@server3 mnt]# echo "server2" > index.html
[root@server3 mnt]# docker cp index.html nginx.3.b77d9xbtgxd6ixgmkpb26yjt2:/usr/share/nginx/html/
[root@server3 mnt]# docker run -d --name vm1 westos.org/nginx
[root@server1 docker]# docker service ls
ID            NAME   MODE        REPLICAS  IMAGE
593z41p2yi7i  nginx  replicated  3/3       westos.org/nginx:latest
idcqhvundhz0  viz    replicated  1/1       westos.org/visualizer:latest
[root@server1 docker]# 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/visualizer
[root@18 Desktop]# for i in {1..6}; do curl 172.25.18.1; done
server3
server2
server1
server3
server2
server1

这里写图片描述

当在server3上关闭docker服务时,nginx服务会迁移到其他节点:

这里写图片描述

当server3重新开启docker服务,nginx也不会迁移回来。

这里写图片描述

##设置最大服务个数
[root@server1 docker]# docker service scale nginx=10
nginx scaled to 10
##设置每次更新服务个数为4
[root@server1 docker]# docker service update --image westos.org/nginx --update-parallelism 4 --update-delay 10s nginx
nginx

五、docker-machine部署

[root@18 docker]# cd /usr/local/bin/
[root@18 bin]# ln -s docker-machine-Linux-x86_64-1.15.0 docker-machine
[root@18 bin]# chmod +x docker-machine

使用ssh免密建立连接管理。

##把本地用户生成的key,添加到目标主机上
[root@18 docker]# ssh-keygen 
[root@18 docker]# ssh-copy-id server1
[root@18 docker]# ssh-copy-id server2
[root@18 docker]# ssh-copy-id server3
##添加3台目标主机到docker管理节点
[root@18 ~]#docker-machine create --driver generic --generic-ip-address=172.25.18.1 server1
[root@18 ~]# docker-machine create --driver generic --generic-ip-address=172.25.18.2 server2
[root@18 ~]# docker-machine create --driver generic --generic-ip-address=172.25.18.3 server3

create 命令本是要创建虚拟主机并安装 Docker,因为本例中的目标主机已经存在,所以仅安装 Docker。 –driver 的形式,主要用来指定使用什么驱动程序来创建目标主机。Docker Machine 支持在云服务器上创建主机,就是靠使用不同的驱动来实现了。本例中使用 generic 就可以了。接下来以 –generic 开头的参数主要是指定操作的目标主机,最后一个参数 server1是虚拟机的名称,Docker Machine 会用它来设置目标主机的名称。

测试通过docker-machine建立节点

删除节点server2

[root@18 ~]# docker-machine rm server2
About to remove server2
WARNING: This action will delete both local reference and remote instance.
Are you sure? (y/n): y
Successfully removed server2
再次创建时,它会自动开启docker
[root@foundation3 ~]# docker-machine create --driver generic --generic-ip-address=172.25.3.2 server2

这里写图片描述

查看目标主机的环境变量
[root@18 ~]# docker-machine env server3
export DOCKER_TLS_VERIFY="1"
export DOCKER_HOST="tcp://172.25.18.3:2376"
export DOCKER_CERT_PATH="/root/.docker/machine/machines/server3"
export DOCKER_MACHINE_NAME="server3"
# Run this command to configure your shell: 
# eval $(docker-machine env server3)
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值