Docker數據卷和Docker系統管理(一)

一. 建立和掛載數據卷

1. 建立數據卷

(1)執行下列命令,建立一個名爲my-data的數據卷

[root@c720120 ~]# docker volume create my-data
my-datahtml

 

(2)檢查(1)步建立卷的詳細信息

[root@c720120 ~]# docker volume inspect my-data
[
     {
         "CreatedAt": "2018-05-28T16:27:39+08:00",
         "Driver": "local",
         "Labels": {},
         "Mountpoint": "/var/lib/docker/volumes/my-data/_data",
         "Name": "my-data",
         "Options": {},
         "Scope": "local"
     }
]nginx

 

2. 掛載數據卷

(1)在docker container run 命令中指定-v 選項進行掛載

[root@c720120 ~]# docker container run --name test -it \
> -v my-data:/data alpine /bin/shweb

 

(2)在容器中建立一些數據文件

/ # cd /data
docker

/data # echo "some data" > data.txt
/data # echo "some more data" > data2.txt
/data # exit
ubuntu

 

(3)進行剛纔第一步檢查的卷所在的Docker主機上的位置,查看文件是否存在。

[root@c720120 _data]# ls -l
total 8
-rw-r--r-- 1 root root 15 Jun  5 23:10 data2.txt
-rw-r--r-- 1 root root 10 Jun  5 23:10 data.txtcentos

 

(4)在Docker主機上,進行建立文件。

[root@c720120 _data]# echo "This file we create on the host" > host-data.txtbash

 

(5)而後進入到容器,看是否看到Docker主機建立的文件。

[root@c720120 _data]# docker container run --name test2 -it -v my-data:/app/data centos:7 /bin/bash
[root@11bfd5e29032 /]# cd /app/data/
[root@11bfd5e29032 data]# ls -l
total 12
-rw-r--r-- 1 root root 10 Jun  5 15:10 data.txt
-rw-r--r-- 1 root root 15 Jun  5 15:10 data2.txt
-rw-r--r-- 1 root root 32 Jun  5 15:13 host-data.txt
app


3. 移除卷

(1)嘗試移除咱們在第1步所建立的卷,發現報錯,這是因爲該卷正在使用

[root@c720120 _data]# docker volume rm my-data
Error response from daemon: unable to remove volume: remove my-data: volume is in use - [11bfd5e29032ce16d6c3282adaa613f726a5f15bdf141bc583d9dc049d191ff4]curl

 

(2)咱們能夠使用-f或--force選項強行刪除正在使用中的容器。而後再刪除卷

[root@c720120 ~]# docker container rm –f $(docker container ls -aq)測試

[root@c720120 ~]# docker volume rm my-data

 

 

二. 在容器之間共享數據

1. 建立一個容器

(1)建立一個名爲writer的容器

[root@c720120 ~]# docker container run -it --name writer \
> -v share-data:/data \
> alpine /bin/sh
/ #

 

(2)在第(1)步建立的容器中寫入數據,好進行測試。

/ #  echo "I can create a file" > /data/sample.txt

 

(3)退出容器,而後執行下面命令,建立一個名字爲reader的容器

[root@c720120 ~]# docker container run -it --name reader \
> -v share-data:/app/data:ro \
> ubuntu:17.04 /bin/bash
Unable to find image 'ubuntu:17.04' locally

 

(4)嘗試讀取咱們第(2)步建立的文件

root@f29815cfea52:/# ls -l /app/data/
total 4
-rw-r--r-- 1 root root 20 Jun  5 15:23 sample.txt

 

(5)而後嘗試建立一個新的文件

root@f29815cfea52:/# echo "Try to break read/only" > /app/data/data.txt
bash: /app/data/data.txt: Read-only file system

能夠看到,當嘗試建立新的文件時候,提示是隻讀的,不容許建立。這是因爲咱們在掛載的時候指定的ro。

 

(6)移除全部的容器後,移除卷

[root@c720120 ~]# docker container rm -f $(docker container ls -aq)

[root@c720120 ~]# docker volume rm ${docker volume ls -q)


三. 使用主機卷

1. 案例

(1)掛載當前目錄 下的/src到容器的/app/src目錄下

[root@c720120 ~]# docker container run --rm -it \
>      -v $(pwd)/src:/app/src \
>      alpine:latest /bin/sh

 

2. 案例2

(1)建立~/my-weba文件夾,並切換到該文件夾

[root@c720120 ~]# mkdir ~/my-web && cd ~/my-web

 

(2)建立一個簡單的web主頁

[root@c720120 my-web]#  echo "<h1>Personal Website</h1>" > index.html 

 

(3)建立Dockerfile文件

[root@c720120 my-web]# cat Dockerfile
FROM nginx:alpine
COPY . /usr/share/nginx/html

 

(4)鏡像構建

[root@c720120 my-web]# docker image build -t my-website:1.0 .
Sending build context to Docker daemon  3.072kB
Step 1/2 : FROM nginx:alpine
  ---> ebe2c7c61055
Step 2/2 : COPY . /usr/share/nginx/html
  ---> 51e46f702575
Successfully built 51e46f702575
Successfully tagged my-website:1.0

 

(5)建立容器,名字爲My-site

[root@c720120 my-web]# docker container run -d \
> -p 8080:80 --name my-site \
> my-website:1.0
75f0e41c3759f33eba3f8c7a8a597823c67e9c8849661fd4bcd554bd27d57166


(6)訪問docker host上的8080端口,結果以下:

[root@c720120 my-web]# curl localhost:8080
<h1>Personal Website</h1>

 

(7)而後從新編輯index.html文件,內容以下:

[root@c720120 my-web]# cat index.html
<h1>Personal Website</h1>
<p>This is some text</p>

 

(8)當咱們再次訪問docker host 8080端口時,發現內容沒有更新。

[root@c720120 my-web]# curl localhost:8080
<h1>Personal Website</h1>

 

(9) 刪除my-site容器,從新構建鏡像,從新建立容器。

[root@c720120 my-web]# docker container rm -f my-site
my-site
[root@c720120 my-web]# docker image build -t my-website:1.0 .
Sending build context to Docker daemon  3.072kB
Step 1/2 : FROM nginx:alpine
  ---> ebe2c7c61055
Step 2/2 : COPY . /usr/share/nginx/html
  ---> 26a2c3c3133d
Successfully built 26a2c3c3133d
Successfully tagged my-website:1.0
[root@c720120 my-web]# docker container run -d \
> -p 8080:80 --name my-site \
> my-website:1.0
86b54e1097eef0b91921f068913fa52978311f3399348794bb4be26109e100cd

 

(10) 再次的訪問docker host的8080端口,查看主頁內容。

[root@c720120 my-web]# curl localhost:8080
<h1>Personal Website</h1>
<p>This is some text</p>

總結:能夠想象下,若是網站改變一點點的內容,就要從新構建鏡像和部署容器,是至關的麻煩的。此時,能夠用下面的解決方法。

 

(11)移除容器,直接掛載docker  host卷。

[root@c720120 my-web]# docker container rm -f my-site
my-site

[root@c720120 my-web]# docker container run -d \
> -v $(pwd):/usr/share/nginx/html \
> -p 8080:80 --name my-site \
> my-website:1.0
557b896ff138395489dfa2cf327366fe6e8d17baf72eb0d09bbeade4ee5eee5b

(12)此時,若是咱們在本機的卷中修改東西,能夠當即生效的。

相關文章
相關標籤/搜索