docker常用操作---手冊看這就夠了
引:
附上官方docker架構圖:
client客戶端:操作——>傳送請求命令
Dockerdeamon:Docker引擎,解析客戶端傳送的命令
images:映象,一些特殊的檔案疊加而成。映象(Image)就是一堆只讀層(read-only layer)的統一視角。映象是建立容器的基石【。。。。最簡單理解docker映象相當於虛擬機器映象(作業系統iso檔案)】
contains:docker容器是由docker映象建立的執行例項。。。容器是一堆讀寫層(read-write layer)的統一視角。。容器(container)的定義和映象(image)幾乎一模一樣,也是一堆層的統一視角,唯一區別在於容器的最上面那一層是可讀可寫的。。。【最簡單理解docker容器相當於用映象建立好的虛擬機器本身 】
執行態容器(running container):一個可讀寫的統一檔案系統 加上 隔離的程序空間和包含其中的程序
registy:映象倉庫, docker hub 中的映象,可拉取下來使用
容器 = 映象 + 讀寫層 -------(筆者不推薦使用最簡單理解,除非確實對於docker映象和容器無法領會概念,且使用過VMware等虛擬機器軟體,可以簡單將虛擬機器和docker兩種虛擬化技術進行類比,其實概念不完全相同) 理解Docker原理,關鍵一點是理解docker 的統一檔案系統 , 理解容器和映象推薦連結: http://dockone.io/article/783
一、docker引擎服務啟停、重啟
# 開啟
systemctl start docker
# 重啟
systemctl restart docker
# 停止
systemctl stop docker
# 檢視狀態
systemctl status docker
附:配置docker映象加速器, https://yeasy.gitbook.io/docker_practice/install/mirror
注意配置完映象加速器需要重啟:
sudo systemctl daemon-reload sudo systemctl restart docker
二、docker映象相關命令
# 列出映象, (該命令中映象大小為,解壓後的大小) docker images # 拉取映象, 尖括號中為引數,映象名稱,本例中拉取python3.6映象 docker pull<python:3.6> # 檢視倉庫中是否有某映象 docker search # 刪除映象(注意刪除容器為rm, 刪除映象為rmi), 可刪除多個 docker rmi <映象名稱或者id> <映象名稱或者映象id> ...
三、docker容器相關命令
# 建立容器 (run相當於create + start) docker run [options] image [command] [arg...] #例: docker run -it --name=c1 centos /bin/bash # -i : 互動式容器 (前臺執行) # -d:守護式容器,(後臺執行) # -t : 分配一個tty終端,來操作容器 # --name: 指定容器名稱, 唯一、不能重複 # 檢視正在執行中的容器 docker ps # 檢視所有容器 docker ps -a docker ps -l (檢視最後一次執行的容器) # 登入進入容器中 docker exec -it <容器名稱或id> /bin/bash # 停止容器 docker stop <容器名稱或id> # 啟動容器 docker start <容器名稱/id> <容器名稱/id> # 重啟 docker restart <容器名稱或id> # 檢視容器詳細資訊,, 此inspect命令後可加 format引數進行格式化輸出和篩選輸出 docker inspect <容器名稱或id> # 刪除容器 docker rm <容器名稱/ id> docker rm `docker ps -a -q` # 檢視容器日誌 docker logs <容器名稱或id> # 檔案拷貝,, 拷貝入容器中,和從容器中拷貝出來均可 docker cp <需要拷貝的檔案/目錄> <容器名稱: 容器目錄> docker cp <容器名稱: 容器目錄> <需要拷貝的檔案/目錄> # 目錄掛載: 建立容器時,可將宿主機和容器的目錄進行對映,這樣就可以通過修改宿主機的檔案去影響容器 # 例如啟動一個centos容器,宿主機的/test目錄掛載到centos容器的/soft目錄: docker run -itd -v /test:/soft centos /bin/bash
四、製作Docker映象
方法:1、docker commit構建
2、docker build + Dockerfile檔案
1、利用容器製作映象
#1、 利用容器製作映象(或者說利用基礎映象之後安裝需要的包做成容器,再匯出這個容器做成映象) docker commit [options] container [image_name:tag] # 映象打包 # 映象打包 docker save -o <輸出路徑> <映象名稱> #eg: docker save -o /root/my_images/python.tar mypython # 匯入打包好的映象 docker load -i <打包好的映象的路徑> ## 容器打包與匯入打包好的容器 # 容器打包:export ,匯入包好的容器:import docker export -o /root/my_container/python.tar my_python docker import python.tar my_python:least
2、docker build構建映象,使用Dockfile
2-1:DSL語法,
FROM 基礎映象
MAINTAINER 維護者資訊
RUN 安裝軟體
ADD 拷貝檔案及解壓工作
WORKDIR cd切換工作目錄
VOLUME 目錄掛載
EXPOSE 埠對映
CMD 指定執行的命令
ENV 設定環境變數
#eg: # 基於映象基礎 FROM python:3.7 # 設定程式碼資料夾工作目錄 /app WORKDIR /app # 複製當前程式碼檔案到容器中 /app ADD . /app # 安裝所需的包 RUN pip install -r requirements.txt # Run app.py when the container launches CMD ["python", "app.py"]
2-2:根據Dockerfile生成容器,
#用docker build生成容器,使用rm刪除中間產生的臨時容器, 注意最後一定加".", 表示當前目錄 docker build -t <contains_name> --rm=true .
五、Docker網路管理
5.1 預設網路
# 檢視docker預設網路 docker network ls
docker中預設的三種網路為bridge、host、none, 其中容器建立時預設的為bridge方式,該方式經過配置,可與宿主機和外網通訊。
(若在docker叢集下,docker還提供了docker_gwbridge和ingress兩種預設網路),
# 若需檢視某個容器的網路配置,可用 docker inspect <contains name/id>
# 檢視使用bridge網路驅動的容器, 可用
docker network inspect bridge
5.2 自定義網路
# 例:建立一個基於bridge驅動的網路: my_net docker network create --driver bridge my_net
# 例:使用pytyon映象建立容器test_network時,指定網路為自定義的網路my_net
docker run -itd --name=test_network --network=my_net python
# 為容器my_contain另外新增一種預設的bridge網路管理方式,
docker network connect bridge my_contain
# 斷開my_contain容器的bridge網路
docker network disconnect bridge my_contain
# 移除自定義網路my_net, 移除成功後會返回網路的名稱
docker network rm my_net
5.2 容器間的網路通訊
參考: https://www.huaweicloud.com/articles/9933f12e2049a03b02d1b4791e2b3f39.html