docker run參數:
--name 標記可以為容器自定義命名
-v 掛載數據卷
--volumes-from 掛載容器的數據卷
--link 參數可以讓容器之間安全的進行交互
1 數據卷 -v 容器目錄 或 -v 本地目錄:容器目錄
數據卷是一個可供一個或多個容器使用的特殊目錄,它繞過 UFS,可以提供很多有用的特性:
數據卷可以在容器之間共享和重用
對數據卷的修改會立馬生效
對數據卷的更新,不會影響鏡像
卷會一直存在,直到沒有容器使用
*數據卷的使用,類似於 Linux 下對目錄或文件進行 mount。
docker run 命令使用 -v 標記來創建一個數據卷並掛載到容器里。
在一次 run 中多次使用可以掛載多個數據卷。
--創建一個數據卷(到容器的 /webapp 目錄)
$ sudo docker run -d -P --name web -v /webapp training/webapp python app.py
--指定掛載一個本地主機的目錄到容器中去
$ sudo docker run -d -P --name web -v /src/webapp:/opt/webapp training/webapp python app.py
上面的命令加載主機的 /src/webapp 目錄到容器的 /opt/webapp 目錄
(本地目錄的路徑必須是絕對路徑)
1.2 數據卷容器 --volumes-from 容器名稱
數據卷容器,其實就是一個正常的容器,專門用來提供數據卷供其它容器掛載的。
首先,創建一個命名的數據卷容器 dbdata:
$ sudo docker run -d -v /dbdata --name dbdata training/postgres echo Data-only container for postgres
然后,在其他容器中使用 --volumes-from 來掛載 dbdata 容器中的數據卷。
$ sudo docker run -d --volumes-from dbdata --name db1 training/postgres
$ sudo docker run -d --volumes-from dbdata --name db2 training/postgres
--volumes-from 會繼承被掛載容器中的數據卷
$ sudo docker run -d --name db3 --volumes-from db1 training/postgres
**注意!!:使用 --volumes-from 參數所掛載數據卷的容器自己並不需要保持在運行狀態。
**注意!!:如果刪除了掛載的容器(包括 dbdata、db1 和 db2),數據卷並不會被自動刪除。
如果要刪除一個數據卷,必須在刪除最后一個還掛載着它的容器時使用 docker rm -v 命令來指定同時刪除關聯的容器
1.3 備份、恢復、遷移數據卷
備份
從本地主機掛載當前到容器的 /backup 目錄,使用了 tar 命令來將 dbdata 卷備份為本地的 /backup/backup.tar
$ sudo docker run --volumes-from dbdata -v $(pwd):/backup ubuntu tar cvf /backup/backup.tar /dbdata
恢復
如果要恢復數據到一個容器,首先創建一個帶有數據卷的容器 dbdata2。
然后創建另一個容器,掛載 dbdata2 的容器,並使用 untar 解壓備份文件到掛載的容器卷中。
$ sudo docker run -v /dbdata --name dbdata2 ubuntu /bin/bash
$ sudo docker run --volumes-from dbdata2 -v $(pwd):/backup busybox tar xvf /backup/backup.tar
2 網絡
docker run參數:
-p IP:host_port:container_port 或 -p IP::port
配置網絡訪問域名(ip)和端口轉發容器端口
監聽主機的指定域名端口轉發到容器的端口
3 容器互聯
使用 --name 標記可以為容器自定義命名
使用 --link 參數可以讓容器之間安全的進行交互
先創建一個新的數據庫容器
$ sudo docker run -d --name db training/postgres
然后創建一個新的 web 容器,並將它連接到 db 容器
$ sudo docker run -d -P --name web --link db:db training/webapp python app.py
此時,db 容器和 web 容器建立互聯關系。
--link 參數的格式為 --link name:alias,其中 name 是要鏈接的容器的名稱,alias 是這個連接的別名。
Docker 通過 2 種方式為容器公開連接信息:
-環境變量
-更新 /etc/hosts 文件
使用 env 命令來查看 web 容器的環境變量
$ sudo docker run --rm --name web2 --link db:db training/webapp env
. . .
DB_NAME=/web2/db
DB_PORT=tcp://172.17.0.5:5432
DB_PORT_5000_TCP=tcp://172.17.0.5:5432
DB_PORT_5000_TCP_PROTO=tcp
DB_PORT_5000_TCP_PORT=5432
DB_PORT_5000_TCP_ADDR=172.17.0.5
. . .
其中 DB_ 開頭的環境變量是供 web 容器連接 db 容器使用,前綴采用大寫的連接別名。
除了環境變量,Docker 還添加 host 信息到父容器的 /etc/hosts 的文件。下面是父容器 web 的 hosts 文件
$ sudo docker run -t -i --rm --link db:db training/webapp /bin/bash
root@aed84ee21bde:/opt/webapp# cat /etc/hosts
172.17.0.7 aed84ee21bde
. . .
172.17.0.5 db
這里有 2 個 hosts,第一個是 web 容器,web 容器用 id 作為他的主機名,第二個是 db 容器的 ip 和主機名。
可以在 web 容器中安裝 ping 命令來測試跟db容器的連通。
root@aed84ee21bde:/opt/webapp# ping db
PING db (172.17.0.5): 48 data bytes
56 bytes from 172.17.0.5: icmp_seq=0 ttl=64 time=0.267 ms
用 ping 來測試db容器,它會解析成 172.17.0.5
(ping命令默認未安裝 使用命令dnf install iputils 安裝)