Docker 操作

未使用過請先看 Docker 簡介,本篇純粹指令速查 & 基本操作。
已經會基本操作,可嘗試 Dockerfile 實戰

操作

  1. 檢查 docker 資訊
  2. 下載 image
  3. 列出 local Image
  4. run 容器
  5. exit 容器
  6. 列出 容器ID 清單
  7. Commit 容器
  8. 返回容器
  9. 刪除容器
  10. 刪除 Image


  • 檢查 docker 資訊
    • docker info
安裝(link)
  • 查詢OS版本
    •  lsb_release -a
  • 出現 open_vm_tools ... error,需移除現有的程式,在執行
    • vmware-uninstall-tools.pl
  • 升級
    • 新增 gpg key
      • apt-key adv --keyserver hkp://p80.pool.sks-keyservers.net:80 --recv-keys 58118E89F3A912897C070ADBF76221572C52609D
    • 編輯下載路徑
      • vim /etc/apt/sources.list.d/docker.list
      • 清空資料改成
        deb https://apt.dockerproject.org/repo ubuntu-trusty main
    • apt-get update
    • 刪除舊版
      • apt-get purge lxc-docker*
      • apt-get purge docker-engine
    • 安裝新版
      • apt-get install docker-engine
Mac安裝(link)

  • Mac OS 必須在 10.10.3 Yosemite 版含以上 或 2010 以後有 Intel's MMU virtualization 的硬體
  • 很簡單安裝,需求 4GB 空間,若剛裝完大約只耗 1GB
  • 可調整 CPU、Memory、Share folder
  • 常駐在工作列,很輕盈

Image
  • 下載
    • docker pull ubuntu
  • 建立
    • container commit 後生成 
  • Build
    • docker build -t="user/appname:version" path
      • dockerfile 的檔名第一字須為大寫 "Dockerfile" 
      • -t 標籤,也可以說自定義名稱,user/appname 顯示在 REPO 欄位,version 顯示在 TAG 欄位
  • 刪除
    • docker rmi image_name
    • 如果有 container 在使用,必須先砍掉 conatiner
    • 同個 repo 會有不同 tag,輸入完 repo 名稱後用"TAB鍵"顯示其他 tag 並刪除
    • 有 <none> 清不掉請用
      • rmi $(docker images -f "dangling=true" -q)
      • 或  rmi $(docker images | grep "^<none>" | awk "{print $3}")
  • 清單
    • docker images 
  • 匯出
    • docker save image_name > /tmp/xxx.tar
  • 匯入
    • docker load < /tmp/xxx.tar

容器/服務
  • 建立 (link)
    • docker run -t -i ubuntu:14.04 /bin/bash
      • -t 在容器中建立了一個終端機
      • -i 建立與容器標準輸入(STDIN)的互動連結
      • --name 幫容器命名
      • -d 在背景持續執行( daemon)
      • 在這個container裡面執行/bin/bash,讓使用者可以跑bash shell
      • 顯示  [email protected]容器ID: 代表成功
      • -P 使用預設(or 隨機)指定對外 port
      • -p 手動指定對應 port
        • -p ip:hostPort:containerPort
        • -p hostPort:containerPort
        • -p ip::containerPort #隨機指定對外port
        • 指定多個:-p 配對1 -p 配對2 ...
      • --restart 自動重啟
        • =no 不重啟
        • =on-failure[:max-retries] 當有錯誤時,重試 n 次
        • =always 永遠啟動
        • =unless-stopped 除非下 stop,否則永遠啟動
  • 清單
    • docker ps -a
  • 看個容器狀態 (CPU、Mem、Net IO、Block IO、Pids...)
    • docker stats
  • 執行
    1. docker start containerID
  • 進入
    1. docker exec -i -t containerID command
    2. docker attach containerID
      1. 離開(detach),先 ctrl+p, 再 ctrl+q
      2. exit 關閉,會直接停止 container
  • 停止
    • docker stop containerID
  • 刪除
    • docker rm containerID
    • 刪除全部 docker rm $(docker ps -a)
  • 儲存
    • docker commit -m '敘述' -a "作者" containerID [new image name]
    • 執行後,該 containerID 內操作的動作,會直接存入對應的 image 中
    • 如果加上 new image name,就會另外產生一個 image
  • 查看各種參數
    • docker inspect containerID或imageID
    • 查詢 IP: | grep IPAddress
  • 看 Log
    • docker logs containerID
  • 離開
    • exit
Volume(資料卷)
  • 建立(link)
    • docker run {volume 指令} -ti ubuntu:14.04 /bin/bash 
      • 建立自己的容器卷:-v 容器內路徑
      • 共用本機的資料夾:-v /本機絕對路徑:/容器內絕對路徑
      • 多個 volume: -v path1 -v path2 -v path3
      • 使用其他容器的 volume:--volumes-from 容器名稱
        • 使用指定資料卷容器不需要 start 該 container
        • 資料卷容器可以是 folder or db ... 
      • 容器內唯讀:後面接 :ro
      • ***建立完的資料卷 status 都是 Exited
    • 表列所有
      • docker volume ls
      • 清除孤立的 volume
        • docker volume rm $(docker volume ls -qf dangling=true)
    • 查詢
      •  docker inspect -f {{.Volumes}} containerID
    • 刪除
      • docker rm -v containerID
    網路配置
    • 查詢 bridge
      • brctl show
        • 可在 /etc/network/interfaces 增加 bridage,並於 /etc/default/docker 對應,可讓所有 container 對外暴露 & 與其他主機內 container 互相連結(link)


    Dockerfile
    • 撰寫 (link)
    • Fat container
      • 將所有服務裝在同一個 conatiner 內
    • 1 container 1 service
        1. 先安裝 docker-compose
          1. pt-get -y install python-pip
          2. pip install docker-compose
        2. 撰寫 *.yml
          1. 不要用 tab 鍵排版,會報錯誤
          2. 重開機後自動重啟,加上 restart: always
            1. 注意,關聯的 links 服務都必須各自加上
        3. 執行 docker-compose up -d 服務1 服務2 服務3...
        4. compose 指令
          1. build 
            • 如果有"異動",才重編 image
            • 產新版 image 後,舊版會以 <none> 形態存在
          2. up 建立並啟動 "所有" 服務
            1. 獨立 up 特定服務 up -d xxx
          3. start 啟動存在的服務
          4. stop 停止服務
          5. restart   重啟存在的服務
          6. down 停止並刪除正在執行的"所有"服務
          7. exec 對特定服務下指令
            1. 要進入 bash 可下 exec ContainerID bash
            2. 使用特定身份進入 --user=xxxx
          8. run       Run a one-off command
          9. pull 抓映像檔
          10. kill      Kill containers
          11. logs    View output from containers
          12. port    Print the public port for a port binding
          13. ps       List containers
          14. rm      Remove stopped containers
          15. scale   Set number of containers for a servie
        5. 調整參數、資料等
          1. 停止該服務或 down 所有服務
          2. 重新 build 修改的服務
          3. up -d 服務
        6. volume 資料不會因為 rm 就消失,所以 yml 若有調整如 db 初始帳密,須將真正的 db 砍掉才會有異動
        7.  /usr/local/bin/docker-entrypoint.sh
      其他
      • 開機自動啟動指定 container
        1. 方法一:使用開機啟動程式(link)
          1. ex.upstart, systemd or supervisor 
          2. 以 ubuntu upstart 為例子,進入 /etc/init
          3. nano xxx.conf
          4. 使用 docker 的範例,修改 container 名稱
          5. 重開機即可
        2. 方法二:docker run 帶 --restart=always
        3. 方法三:docker-compose 的 compose.yml 文件增加 restart: always 參數
      Service 規劃 & Deploy
      http://www.evanlin.com/til-2016-03-12/



      Docker basics
      https://docs.docker.com/engine/getstarted/
      Docker 操作 Docker 操作 Reviewed by Wild on 12/09/2014 04:10:00 下午 Rating: 5

      沒有留言:

      沒有Google帳號也可發表意見唷!

      技術提供:Blogger.