Docker:常用命令 與 掛載目錄

weixin_34320159發表於2018-02-07

Docker 服務常用命令

  1. 設定 Docker 服務自動啟動
sudo systemctl enable docker.service
  1. 啟動 Docker 服務
sudo systemctl start docker.service
  1. 關閉 Docker 服務
sudo systemctl stop docker.service
  1. 檢視 Docker 服務狀態
sudo systemctl status docker.service

Docker 映象常用命令

  1. 搜尋映象:可使用 docker search 命令搜尋存放在 Docker Hub 中的映象,顯示的資訊包括:
屬性 描述
NAME 映象倉庫名稱
DESCRIPTION 映象倉庫描述
STARS 映象倉庫收藏數
OFFICAL 是否官方庫
AUTOMATED 是否自動構建的映象倉庫
docker search java
  1. 下載映象:通過 docker pull 命令從 Docker Registry 上下載映象
docker pull java
docker pull reg.itmuch.com/java:7   //指定下載映象的標籤以及 Docker Registry
  1. 列出映象,顯示的資訊包括:
屬性 描述
REPOSITORY 映象所屬倉庫名
TAG 映象標籤,預設是 latest,表示最新
IMAGE ID 映象ID
CREATED 映象建立時間
SIZE 映象大小
docker images
  1. 刪除本地映象
docker rmi hello-world      #刪除指定名稱映象
docker rmi -f $(docker images)      #刪除所有映象

Docker 容器常用命令

  1. 通過 docker run 新建並啟動容器,還可以附加一些常用選項
    • -d:表示後臺執行
    • -P:隨機埠對映
    • -v:指定掛載目錄
    • -it:建立一個互動式的容器
    • -p:指定埠對映,ip 表示主機 IP、hostPort 表示宿主主機埠、containerPort 表示容器埠,有以下四種格式:
      • ip:hostPort:containerPort
      • ip:containerPort
      • hostPort:containerPort
      • containerPort
    • -network:指定網路模式,該選項有以下可選引數
      • -network=bridge:預設選項,表示連線到預設的網橋
      • -network=host:容器使用的宿主機器的網路
      • -network=container:NAME_or_ID:告訴 Docker 讓新建的容器使用已有的容器網路配置
      • -network=none:不配置容器網路,使用者可自定義網路配置
  • 下面命令會讓終端列印 Hello World 字樣,跟在本地直接執行 /bin/echo 'Hello World' 一樣
docker run java /bin/echo 'Hello World'
  • 啟動一個 Nginx 容器(預設Nginx配置為80埠),指定宿主機埠(這裡指定埠為91),當訪問 http://Docker宿主機IP:91/ 時會對映到容器80埠中,即可看到 Nginx 主頁
docker run -d -p 91:80 nginx

docker run 命令在建立容器時,會檢查本地是否存在指定映象,如果不存在則從 Docker Hub 下載並啟動

  1. 列出容器
  • 使用 docker ps 命令即可列出執行中的容器,顯示的資訊包括:
屬性 描述
CONTAINER_ID 容器ID
IMAGE 映象名稱
COMMAND 啟動容器時執行的命令
CREATED 容器建立的時間
STATUS 容器執行的狀態,UP 表示執行中,Exited 已停止
PORTS 容器對外埠號
NAMES 容器名稱,預設由 Docker 自動生成,也可使用 docker run --name 選項指定
docker ps
docker ps -a #顯示容器,包含停止的容器
  1. 停止容器
  • 使用 docker stop 命令停止容器,784fd3b294d7 為容器 ID,也可使用容器名稱來停止容器
docker stop 784fd3b294d7
  • 強制停止容器
docker kill 784fd3b294d7
  1. 啟動停止的容器
  • 通過 docker run 命令即可新建並啟動一個容器,對於已停止的容器,可使用 docker start 命令來啟動
docker start 784fd3b294d7
  1. 重啟容器
  • 可使用 docker restart 命令來重啟容器
docker restart
  1. 進入容器
  • 某些場景下,可能需要進入執行中的容器
    • 使用 docker attach 命令進入容器(已過時),當多個視窗同時 attach 到同一個容器時所有視窗都會同步顯示,同理阻塞的時候其它視窗也無法操作
    docker attach 784fd3b294d7
    
    • 使用 exec 命令進入容器(推薦)
    docker exec -i -t 784fd3b294d7 /bin/bash
    
    • 使用 exit 退出容器
      • 若使用 attach 方式進入容器,執行 exit 容器也會被關閉
      • 若使用 exec 方式進入容器,執行 exit 容器不會被關閉
    exit
    
  • 獲得 PID 後,就可以使用 nsenter 命令進入容器了
nsenter --target "$PID" --mount --uts --ipc --net --pid
  1. 刪除容器
  • 使用 docker rm 命令刪除指定容器,該命令只能刪除停止執行的容器
docker rm 784fd3b294d7
  • 如果需要刪除正在執行的容器,可使用 -f
docker rm -f $(docker ps -a -q)
  1. 資料拷貝
  • docker cp 命令用於容器與主機之間的資料拷貝
    • 將主機 /www/runoob 目錄拷貝到容器 96f7f14e99ab 的 /www 目錄下
    docker cp /www/runoob 96f7f14e99ab:/www/
    
    • 將容器 96f7f14e99ab 的 /www 目錄拷貝到主機的 /tmp 目錄中
    docker cp 96f7f14e99ab:/www /tmp/
    
  1. 獲取容器/映象的後設資料
  • 通過 docker inspect 來獲取後設資料,包含掛載目錄資訊等
docker inspect linyuantongxue/docker-demo:0.0.1

Docker 掛載目錄

  • 掛載目錄後映象內就可以共享宿主機裡的檔案
  • 通過 run -v 引數指定掛載目錄(格式:宿主機目錄:映象內掛載目錄),如果宿主機目錄不存在則建立
  • Centos7 中本地掛載的目錄在容器中沒有執行許可權,通過 --privileged=true 給容器加特權
  • 下面以 centos 映象為例:
    1. 通過 Centos 映象執行一個容器,並設定掛載目錄
    docker run -it -v /home/linyuan/Downloads/data:/data centos
    
    1. 此時可看到宿主機上 /home/linyuan/Downloads 資料夾下多出了 /data 目錄
    2. 因為通過 -it 引數,已進入容器內部,通過 ls -a 命令檢視資料夾,可看見多出 /data 目錄,通過 cd 命令進入資料夾下並新建檔案 touch a.txt
    3. 可看見宿主機 /data 目錄也會存在該檔案

相關文章