kubernetes(四)之Docker存儲卷

docker存儲卷

數據卷

  • 爲何須要數據卷(存儲卷) php

    • docker鏡像由多個只讀層疊加而成,啓動容器時,docker會加載只讀鏡像層,並在鏡像層添加一個讀寫層
    • 若是運行中的容器修改了現有的一個已經存在的文件,那麼該文件將會從讀寫層下面的只讀層複製到讀寫層,該文件的只讀版本仍然存在,只是已經被讀寫層中該文件的副本所隱藏,這就是COW(寫時複製)機制
      kubernetes(四)之Docker存儲卷html

    • 關閉並重啓容器,其數據不受影響,可是刪除容器,則其更改將會所有丟失
    • 存在的問題:
      • 存儲與聯合文件系統中,不易於宿主機訪問
      • 容器鍵數據共享不便
      • 刪除容器其數據會丟失

  • 什麼是卷
    • 卷是容器上的一個或者多個目錄,此類目錄能夠繞過聯合文件系統,與宿主機上的某個目錄能夠綁定(關聯)

設置隨機卷

[root@centos7-node1 ~]# docker run --name mybbox5 -it -v /mydata --rm busybox /bin/sh     #指定容器卷,容器中不存在則自動建立
/ # cd /mydata/

[root@centos7-node1 ~]# docker inspect mybbox5   # 另起窗口查看掛載
  "Mounts": [
            {
                "Type": "volume",
                "Name": "a39b4a68fc51d83900093f35b05b4e29085b2d45d1fa9a19f63f75130dbf1d0c",
                "Source": "/data/docker/volumes/a39b4a68fc51d83900093f35b05b4e29085b2d45d1fa9a19f63f75130dbf1d0c/_data",
                "Destination": "/mydata",
                "Driver": "local",
                "Mode": "",
                "RW": true,
                "Propagation": ""
            }
        ],

綁定掛載卷

  • 綁定本地指定目錄到容器的卷
  • 特色:
    • 刪除容器以後本地目錄不會被刪除,數據還在
    • 能夠脫離容器的生命週期而存在
    • 如有NFS存儲的話,數據也能夠脫離本機而存在
    • 能夠實現容器間數據的共享

kubernetes(四)之Docker存儲卷

[root@centos7-node1 ~]# mkdir /data/volumes/v1 -p
[root@centos7-node1 v1]# echo "hello" > /data/volumes/v1/my.txt
[root@centos7-node1 ~]# docker run --name mybox -it -v /data/volumes/v1:/mydata busybox /bin/sh 
[root@centos7-node1 ~]# docker rm mybox
mybox
[root@centos7-node1 ~]# ls /data/volumes/v1/
my.txt

容器間數據共享的案例node

[root@centos7-node1 ~]# docker run --name box6 -it -d -v /data/volumes/v1:/mydata busybox /bin/sh 
[root@centos7-node1 ~]# docker run --name box7 -it --rm --volumes-from box6 busybox

inspect數據顯示mysql

[root@centos7-node1 v1]# docker inspect box7    #查看容器,找出對應字段
[root@centos7-node1 v1]# docker inspect -f {{.Mounts}} box6    #.Mounts是頂級字段
[root@centos7-node1 v1]# docker inspect -f {{.NetworkSettings.Networks.bridge}} box7     #多級字段之間用.鏈接

實戰

  • 容器化部署wordpressnginx

    • php+http
    • nginx 配置文件本地存儲
    • mysql
    • 網頁數據和mysql數據存儲到本地
    • mysql須要在啓動時傳入-e MYSQL_ROOTPASSWORD=hello
  • 思路
    • 這三個應用的容器在同一網絡層
    • 配置文件和數據文件須要和本地使用綁定卷存儲
[root@centos7-node1 ~]# mkdir /data/volumes/mysql
[root@centos7-node1 ~]# docker pull mysql:5.5
[root@centos7-node1 ~]# docker run --name db -d -v /data/volumes/mysql:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=qwer1234 mysql:5.5
[root@centos7-node1 ~]# docker exec -it db /bin/bash      #進入數據庫,建立用戶以及數據庫
root@38b54e3d76cf:/# mysql -uroot -p
mysql> create database wordpress charset utf8;
mysql> grant all on wordpress.* to 'wordpress'@'127.0.0.1' identified by 'wpss2020';

[root@centos7-node1 ~]# docker pull php:5.6-fpm
[root@centos7-node1 ~]# docker pull nginx:1.18-alpine 
[root@centos7-node1 ~]#mkdir /data/volumes/nginx_conf -p   #nginx配置文件目錄
[root@centos7-node1 ~]# cat /data/volumes/nginx_conf/nginx_php.conf    #定義好Nginx-php配置文件
server {
    listen       80;
    server_name  localhost;

    location / {
        root   /www/wordpress;
        index  index.php;
    }

    error_page   500 502 503 504  /50x.html;
    location = /50x.html {
        root   /usr/share/nginx/html;
    }

    location ~ \.php$ {
        fastcgi_pass   php:9000;
        fastcgi_index  index.php;
        fastcgi_param  SCRIPT_FILENAME  /www/wordpress/$fastcgi_script_name;
        include        fastcgi_params;
    }
}
[root@centos7-node1 ~]# docker run --name php-fpm -d -v /data/volumes/web:/www  php:5.6-fpm    #啓動php
[root@centos7-node1 ~]# docker run --name nginx_php -d -p 80:80 -v /data/volumes/nginx_conf:/etc/nginx/conf.d  --volumes-from php-fpm --link php-fpm:php nginx:1.18-alpine     #啓動nginx

[root@centos7-node1 ~]#  cd /data/volumes/web && wget https://wordpress.org/latest.zip
root@centos7-node1 web]# unzip wordpress-5.4.1.zip 
[root@centos7-node1 ~]# docker exec nginx_php nginx -s reload
相關文章
相關標籤/搜索