Docker 操作
未使用過請先看 Docker 簡介,本篇純粹指令速查 & 基本操作。
已經會基本操作,可嘗試 Dockerfile 實戰
操作
Dockerfile
http://www.evanlin.com/til-2016-03-12/
Docker basics
https://docs.docker.com/engine/getstarted/
已經會基本操作,可嘗試 Dockerfile 實戰
操作
- 檢查 docker 資訊
- 下載 image
- 列出 local Image
- run 容器
- exit 容器
- 列出 容器ID 清單
- Commit 容器
- 返回容器
- 刪除容器
- 刪除 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
- 顯示 root@容器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
- 執行
- docker start containerID
- 進入
- docker exec -i -t containerID command
- docker attach containerID
- 離開(detach),先 ctrl+p, 再 ctrl+q
- 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
- 先安裝 docker-compose
- pt-get -y install python-pip
- pip install docker-compose
- 撰寫 *.yml
- 不要用 tab 鍵排版,會報錯誤
- 重開機後自動重啟,加上 restart: always
- 注意,關聯的 links 服務都必須各自加上
- 執行 docker-compose up -d 服務1 服務2 服務3...
- compose 指令
- build
- 如果有"異動",才重編 image
- 產新版 image 後,舊版會以 <none> 形態存在
- up 建立並啟動 "所有" 服務
- 獨立 up 特定服務 up -d xxx
- start 啟動存在的服務
- stop 停止服務
- restart 重啟存在的服務
- down 停止並刪除正在執行的"所有"服務
- exec 對特定服務下指令
- 要進入 bash 可下 exec ContainerID bash
- 使用特定身份進入 --user=xxxx
- run Run a one-off command
- pull 抓映像檔
- kill Kill containers
- logs View output from containers
- port Print the public port for a port binding
- ps List containers
- rm Remove stopped containers
- scale Set number of containers for a servie
- 調整參數、資料等
- 停止該服務或 down 所有服務
- 重新 build 修改的服務
- up -d 服務
- volume 資料不會因為 rm 就消失,所以 yml 若有調整如 db 初始帳密,須將真正的 db 砍掉才會有異動
- /usr/local/bin/docker-entrypoint.sh
- 開機自動啟動指定 container
- 方法一:使用開機啟動程式(link)
- ex.upstart, systemd or supervisor
- 以 ubuntu upstart 為例子,進入 /etc/init
- nano xxx.conf
- 使用 docker 的範例,修改 container 名稱
- 重開機即可
- 方法二:docker run 帶 --restart=always
- 方法三:docker-compose 的 compose.yml 文件增加 restart: always 參數
http://www.evanlin.com/til-2016-03-12/
Docker basics
https://docs.docker.com/engine/getstarted/
Docker 操作
Reviewed by Wild
on
12/09/2014 04:10:00 下午
Rating:
沒有留言:
沒有Google帳號也可發表意見唷!