1. 程式人生 > 其它 >docker常用操作---手冊看這就夠了

docker常用操作---手冊看這就夠了

引:

附上官方docker架構圖:

client客戶端:操作——>傳送請求命令

DockerdeamonDocker引擎,解析客戶端傳送的命令

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