Docker Container 對於Docker而言應該算是最常遇到而且最重要的部分之一,所以在這篇文章中,將著眼在Container的操作以及相關的指令說明,例如:docker run、docker exec。首先,先來複習一下:
- Container是由Image所建立而來,是一個基於Image之上的可讀寫層
- 一個Image可以建立無限多個Container
- 每個Container之前都是各別獨立的
推薦閱讀:Docker – 新手入門,快速安裝與基本指令介紹
docker run & docker exec 用法
接下來將就一些常用到的Container操作指令進行說明:
1. 建立 Container
先來複習一下如何啟動Container,這在上一篇文章中已經有介紹過,
docker run image_name 或
docker run image_id
請注意,如果執行的Container操作不是持續性的,那麼在Container執行完該執行的指令後就會結束,處於
2. docker run 常用參數
–name
替Container取一個別名,由於這個別名是自訂的,因此是一個可用來區分Container的好方法,例如當同一個Image啟動多個Container時,這個指令就特別有用,以下範例就是將Container指定一個名稱「demo」
docker run --name demo tomcat
-i
Keep STDIN open even if not attached,讓標準輸入維持在打開的狀態,通常會和
-t
Allocate a pseudo-tty,替Container配置一個虛擬的終端機,通常會和
[demo@localhost ~]$ docker run -it busybox
/ # ls
bin dev etc home proc root run sys tmp usr var
/ #
-d
讓Container進入背景執行
docker run -d nginx
-p
利用
docker run -p 8080:80 tomcat
-v
掛載目錄,其格式為
docker run -v /host/v1:/container/v2 nginx
PS:關於這個參數,其實還有蠻多的變化,這在後續的文章中若有機會再介紹,目前先以最常見的用法為主
–rm
Automatically remove the container when it exits. 意思是說Container執行結束之後會自動被移除,因此Container的Status就不會處在「Exited」的狀態。大家可以自己做個實驗,當有加入
docker run --rm hello-world
3. 常見的 docker exec 用法
執行Container內指令
docker exec eede6d35b47d /bin/ping localhost
進入Container
[demo@localhost ~]$ docker exec -it 4103ef793ded bash (進入Container)
bash-4.4# ls (進入後可以觀察到 # 字號前的字已有不同,接著就可以直接在Container中執行指令)
bin dev etc home lib media mnt (以下略)
bash-4.4# exit (輸入exit離開Container 或 熱鍵ctrl+d)
exit
[demo@localhost ~]$
4. docker stop & docker start
通常第一次建立Container時,我們會執行
docker stop 用來停止Container,Container狀態會變更為「Exited (0)」,最簡單的範例就是直接在stop後面加Container Id或Container Name即可,例如:docker stop 4103ef793ded - 如果想要重新啟動Container,透過
docker start 指令即可達成,start後面一樣可接Container Id或Container Name,例如:docker start 4103ef793ded ,而Container的狀態會恢復成「Up」
5. 小技巧
簡化Container ID的輸入
在使用Container ID時,可以不用全部都打出來,只要可以讓系統識別就行了,例如下面的指令會把Container ID由「eede6d35b47d」簡化為「eede」
docker exec eede /bin/ping localhost
暫離/恢復Container
如果我們已經進入Container中,要暫時跳離Container內部環境回到Host中,那麼可以直接按
[demo@localhost ~]$ docker attach mybash
bash-4.4# (< ==直接進Container中的bash)
docker start直接進Container
重新啟動Container時,可以加直接加
docker start -ia demobash
start、attach、exec進入Container,再離開後的狀態差別
由前面的範例說明,可以知道要進入Container中的bash,可以使用start、attach、exec任一個指令都可以,但進入Container後若執行
Docker run 與 Docker exec 有何不同?
在使用Docker指令時,有些動作是可以用
延伸閱讀:
.Docker – 新手入門,快速安裝與基本指令介紹
.Docker – Dockerfile 指令教學,含範例解說
.Docker Compose – 安裝教學、指令用法及官方範例說明