Docker中对卷的操作以及容器间的互联

一.docker中对volume(卷)的操作

1.不指定宿主机挂载目录,在镜像中直接就有目录/data1

docker run -it --name vm1 -v /data1 ubuntu

这里写图片描述
2.在镜像中利用df命令,可以查看到在镜像中/data1在宿主机中挂载

3.在真机中利用df命令可以看到

shm                                   65536        0     65536   0% /var/lib/docker/containers/8d6ac6efac9fa95b65747dcf8a8a8f30eccb108d737f774d3ef7d80cfe8bae02/shm

这里写图片描述
说明容器中的和数据挂载在真机中的该目录下;
4. 查看容器vm1在真宿主机挂载的绝对路径

docker inspect vm1  | grep volume 
cd /var/lib/docker/volumes/8c947da23e3c3073dc4dc6f873f0b30d495289edd39db3183682c4d0d2254669/_data
cp /etc/passwd .
docker container attach vm1
cd data1/
ls passwd          # 可以查看到在真机中的复制过来的passwd(更加清楚的说明宿主机与容器间数据的关系)

这里写图片描述
5.不用指定挂载的源文件所在位置,也可以直接在真机中看到nginx中的数据

docker run -d --name vm2 -v /usr/share/nginx/html nginx
docker inspect vm2 | grep volume
cd /var/lib/docker/volumes/b7f1f53c614f91799abcf9945383057f6c695fba9083a11ee39f526925109f78/_data
ls

这里写图片描述

6.删除卷组

 docker rm -v vm2   # 直接删除容器和卷组

这里写图片描述

二.创建卷组镜像
在打开别的镜像的时候,可以直接挂载这个卷
1.建立创建镜像的目录

cd /tmp/docker/   
mkdir test
mkdir nginx/html/     
vim index.html    
   hello jay
tar cf html.tar nginx/

这里写图片描述
2.编辑Dockerfile文件

vim Dockerfile
FROM rhel7        # 初始镜像是rhel7
ADD html.tar /usr/share     # 对html.tar解压后index.html所在路径是/usr/share/nginx/html/index.html
VOLUME ["/usr/share/nginx/html"]   # 卷组所在位置是/usr/share/nginx/html

6.封装虚拟机

docker build -t rhel7:v5 .    

7.利用封装的虚拟机创建一个卷组

docker create --name volume rhel7:v5 bash

利用创建的卷组创建一个容器,直接带有卷组中的文件

docker run -d --name vm7 --volumes-from volume nginx

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

三.docker容器间的互联

Dockerfile 可以让用户管理一个单独的应用容器;而 Compose 则允许用户在一个模板(YAML格式)中定义一组相关联的应用容器(被称为一个 project,即项目)
我们可以利用docker-compose工具建立容器之间的互联,创建一个高可用集群:

1.创建存放/tmp/docker/compose的目录

cd  /tmp/docker/compose
mkdir compose

2.编辑docker-compose.yml文件

cd compose/
vim docker-compose.yml
apache:
        image: rhel7:v1                       # 提供httpd服务的apache镜像
        expose:
                - 80                          # 端口80
        volumes:
                - ./web:/var/www/html         # 默认发布目录,当前物理主机的web目录下
nginx:
        image: nginx                          # 提供httpd服务的nginx镜像
        expose:  
                - 80                          # 端口80

haproxy:
        image: haproxy                        # 高可用haproxy镜像
        volumes:
                - ./haproxy:/usr/local/etc/haproxy # haproxy镜像中配置文件所在的目录
        links:
                - apache
                - nginx                        # 容器间的互联
        ports:
                - "8080:80"                    # 物理机对外端口8080,容器端口是80
        expose:
                - 80

这里写图片描述
haproxy镜像中配置文件所在的目录:
这里写图片描述

cd web/
vim index.html     # 编辑apache的默认发布目录
hello jay

3.编辑proxy高可用的配置文件

mkdir haproxy
cd haproxy/
vim haproxy.cfg    # 编辑haproxy的配置文件
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

这里写图片描述
4.下载docker-compose工具:

docker-compose-Linux-x86_64-1.22.0
对docker-compose工具执行权限
chmod +x docker-compose-Linux-x86_64-1.22.0
创建软连接,方便版本更新
ln -s docker-compose-Linux-x86_64-1.22.0 docker-compose

5.利用docker-compose打开服务,在浏览器中验证高可用

docker-compose -v
ctrl+c停止服务
docker-compose

这里写图片描述
两个后端服务器均在线:
这里写图片描述
停止一台后端服务器:
这里写图片描述

猜你喜欢

转载自blog.csdn.net/jay_youth/article/details/81982931