docker 簡易教學
Installation
MAC
- 安裝
以前安裝時需要安裝docker和boot2docker,但現在只要到官網下載DOCKER COMMUNITY EDITION (CE)就可以了。
boot2docker是MAC下輕量的Linux VM,專門用來執行docker daemon
然後以前使用都會用kitematic這個GUI的操作介面,現在docker官方也已經整進去了,我們可以直接透過docker的應用程式下載kitematic(在上方工具列的選項裡)
安裝詳細流程可以參考如何在 macOS 上安裝 Docker CE,寫得非常清楚。
ubuntu
Ubuntu的安裝方式也跟以前不一樣了,可參考官網的作法,Get Docker CE for Ubuntu
Windows
Windows的安裝教學連結在此,值得注意的是只有Windows10才有支援Hyper-V,如果是其他版本就必須要安裝使用Virtualbox的Docker Toolbox來取代了。
常用指令
可以用一張圖職階概括大部分常用docker的指令,圖片來自Docker —— 從入門到實踐 附錄一:命令查詢
images
尋找images
1
docker search XXX
把images抓下來
1
docker pull XXX
看目前有哪些images
1
docker images
刪除某images
1
docker rmi XXX
container
看目前有哪些container正在跑
1
docker ps
看包括所有停止的container
1
docker ps -a
讓某個container開始/停止
1
docker start/stop XXX
刪除某container
1
docker rm XXX
看某個container資訊
1
docker inspect XXX
RUN
執行部分其實可以加上很多參數:
-d
: 代表以daemon執行(背景執行)-p port:port
: 代表port映射,例如-p 8080:80
就是把 port 8080 對應到image的 port 80-v dir:dir
: 代表映射目錄,例如-v /home/share:/var/www:rw
就是把/home/share對應到image的/var/www,且權限為rw。路徑需要為絕對路徑。--rm
:當有container存在時自動移除-i
:互動模式-t
:允許TTY-w path
:設定進入container的工作路徑-e key=value
:帶入環境變數跑images
1
2docker run --rm -i -t -p 8080:80 nginx
docker run -i -t ubuntu /bin/bash背景執行
1
docker run -d -p 8080:80 -v shared_dir:/var/www:rw nginx
COMMIT
看有甚麼改變
1
docker diff XXX
提交成新的images
1
docker commit -m="註解" -a="author" XXX repo_name
看歷史
1
docker history XXX
Dockerfile
我們也可以用Dockerfile產生image,可參考使用Dockerfile建置
下面是個範例
1 | # base image |
建立image
1 | docker build -t repo_name:tag_name . |
範例
看完command可能還是不清楚怎麼用,這邊用安裝nginx的docker image來說明
取得image
首先我們先搜尋nginx
1 | $ docker search nginx |
我們先抓officical的images
1 | $ docker pull nginx |
現在local端就有nginx的image了
1 | $ docker images |
運行container
開始運行container,並且讓port 8080對應到nginx container的port 80,工作路徑為/home,然後執行bash
1 | docker run --rm -i -t -p 8080:80 -w /home nginx bash |
我們也可以選擇背景執行,並且把shared_dir對應到/var/www
1 | docker run -d -p 8080:80 -v shared_dir:/var/www:rw nginx |
一定有人會問這樣的情況下怎麼控制bash呢?我們可以用exec command
1 | docker exec -i -t 78fc bash |
操作運行中的container
看一下當前有的container
1 | $ docker ps -a |
我們可以隨時中斷或啟動該container
1 | docker stop e2cf9ea13bb4 |
提交改變成為新的image
看看該container有什麼改變
1 | $ docker diff e2cf9ea13bb4 |
commit我們所做的改變變成新的image
1 | $ docker commit -m "New nginx" -a "evshary" e2cf new_nginx |
可以從history看我們所做改變歷史
1 | $ docker history new_nginx |
刪除container/images
玩膩了,可以刪除images,記得要先刪掉container才行刪images喔
1 | $ docker rm e2cf9ea13bb4 |