Docker 持久化數據有兩種方式:html
數據卷相關的命令:python
docker volume create <volume name> # 新建數據卷 docker volume ls # 列出全部數據卷 docker volume inspect <volume name> # 查看數據卷信息 docker volume rm <volume name> # 刪除數據卷 docker volume prune # 清除全部未掛載的數據卷
數據卷/文件夾的掛載命令:linux
# 1. 掛載數據卷 docker run -d -P \ --name web \ # -v my-vol:/wepapp \ --mount source=my-vol,target=/webapp \ training/webapp \ python app.py # 2. 掛載宿主機的文件夾 docker run -d -P \ --name web \ # -v /src/webapp:/opt/webapp:ro \ --mount type=bind,source=/src/webapp,target=/opt/webapp,readonly \ training/webapp \ python app.py # P.S. 之前是使用 -v 參數,如今推薦使用 --mount
使用端口映射 -p <宿主機端口>:<容器端口>
(該參數可重複屢次使用),或者 -P
將容器 EXPOSE
出來的端口隨機映射到宿主機。git
比較方便的方案,是將容器加入自定義的 Docker 網絡以實現多容器互聯。github
docker network create --driver=bridge <net name> # 新建自定義網絡,使用 bridge 模式
docker run --network=<net name> --name <container name> ...
將容器添加到該自定義網絡而後在其中一個容器中 ping <container name>
,該名稱會直接被解析到對應的容器 ip。這樣,容器之間就能以容器名稱爲 hostname 互聯。web
docker container inspect
可獲知容器在 docker0 上的 ip 地址,容器之間能夠經過該 ip 通訊。
若是容器較多,推薦使用 docker-compose 進行編排。docker
從 Docker 對這種鏈接方式的支持來看,顯然是很不推薦用戶這麼幹的。shell
可是對我的用戶而言,從容器訪問宿主機,我以爲仍是個挺常見的需求。安全
可用方法以下:網絡
--network=host
,容器與宿主機共用網絡
ip addr show docker0
查看宿主機在網橋 docker0
上的 ip 地址(linux 下通常爲 172.17.0.1
),容器可經過該 ip 訪問宿主機。
docker0
上可能具備不一樣的 ip,須要運行時手動配置。host.docker.internal
訪問宿主機了。一個系統上的 docker 容器,默認狀況下是沒法修改系統的公共內核參數的。這是一種隔離機制。
若是某個容器抽風把系統參數改得一團糟,那全部容器都會崩潰,沒有人會但願碰到這種狀況。
可是有的時候,咱們確實須要在容器內修改整個系統的某些參數。好比在測試系統的時候,咱們系統直接修改整個系統的時間,而後查看咱們的應用可否應對這種問題。
爲了知足這種需求,Docker 提供了一組參數用來給容器設置額外的權限。
Docker 容器的隔離是基於 Linux 的 Capability 機制實現的, Linux 的Capability 機制容許你將超級用戶相關的高級權限劃分紅爲不一樣的小單元. 目前 Docker 容器默認只用到瞭如下的 Capability:
CHOWN, DAC_OVERRIDE, FSETID, FOWNER, MKNOD, NET_RAW, SETGID, SETUID, SETFCAP, SETPCAP, NET_BIND_SERVICE, SYS_CHROOT, KILL, AUDIT_WRITE
使用 --cap-add, --cap-drop 能夠添加或禁用特定的權限。
而要修改系統時間須要有 SYS_TIME 權限,因此咱們在運行容器時須要添加參數 --cap-add SYS_TIME
。
而後在容器裏運行 date --set "time-string"
,就能修改掉整個系統的時間。
P.S.
--privileged
參數也能夠達到開放權限的做用, 與--cap-add
的區別就是,--privileged
是將全部權限給容器,這至關危險!
用於編排多個容器,管理容器集羣之間的協做關係。
國內安裝鏡像:docker: install-compose
docker-compose up
:
-d
模式(detached,分離模式)下運行。與默認行爲的差異在與,命令結束後,容器組中的容器仍然會繼續運行。docker-compose start
: 啓動終止的容器組。docker-compose 大部分命令都和 docker 徹底相似。只是它是集羣版本。
docker-compose.yml
模板