在這個章節,我們將進入容器內部一探究竟。
在以前,要連線進入一個雲端或是隔離環境內,我們常常使用 ssh 的方式來建立安全的通道,但在 Docker 中我們不需要這麼做,就可以輕鬆連線到容器內部。
透過下方的指令,終端機將會進入另一個終端機:
$ docker container run --interactive --tty nginx bash
root@d33940b87e66:/#
終端機理論上會呈現一個可以輸入的模式,我們可以輸入一些基本的 Linux 指令來驗證一下:
root@d33940b87e66:/# ls
bin boot dev docker-entrypoint.d docker-entrypoint.sh etc home lib lib64 media mnt opt proc root run sbin srv sys tmp usr var
接著先離開容器內部,回來解釋一下這段指令做了些什麼:
root@d33940b87e66:/# exit
interactive
首先是 --interactive
,我們透過閱讀 Docker 官方文件得到下面的答案:
Keep STDIN open even if not attached
簡單來說就是保持輸入模式,也可以理解成和容器之間保持可以互動的狀況,要如何驗證呢?就是我們故意不輸入 --interactive
的參數,看看會發生什麼事情。
$ docker container run --tty nginx bash
在你還沒輸入任何 Linux 指令前,看起來應該是很正常,那我們試著來輸入指令吧!
root@d33940b87e66:/# ls
# 接著他就完全停住了
離開的方式就直接關掉終端機就可以了,所以我們在這裡證明了,如果不加入 --interactive
這個參數,即使我們能夠輸入指令,也沒辦法和容器互動。
tty
接著是 --tty
這個參數,透過閱讀 Docker 官方文件得到的答案是:
Allocate a pseudo-TTY
翻成中文就是分配一個虛擬的 TTY,而這個 TTY 代表甚麼呢?
這就是一個有歷史淵源的故事了,在上古時代,一台電腦是要透過多用戶進行操作的,畢竟當時的電腦很貴,要操作的事情也很繁瑣,而多個用戶自然就需要多台打字機對著電腦進行輸入。
而 tty 正是英文 Teletypewriter 的縮寫,但其實在現代,終端機和打字機的界線已經模糊不清,可以想像,終端機就是 tty,反之亦然。
具有實驗精神的我們,也可以透過故意不使用 --tty
的參數來看看會發生什麼事情?
$ docker container run --interactive nginx bash
# 這邊看起來雖然像是不能動,但還是能夠輸入指令
ls
bin
boot
dev
docker-entrypoint.d
docker-entrypoint.sh
輸入 exit
也可以正常離開,但很明顯的感受到這根本不像是一個正常的終端機,回傳的資訊也是一行一行,根本沒辦法好好閱讀,所以有沒有一個好的終端機視窗也是很重要的!
結語
今天藉由 --interactive
以及 --tty
的幫助,進入了容器的內部,也分別解釋了這兩個指令帶來的影響。
明天將會介紹容器的初始指令,也是決定容器何時進入停止狀態的關鍵。