Docker基礎概念、建立映像檔與下載實作
Docker 的基礎是 Linux 容器(LXC)等技術。
容器是在作業系統層面上實作虛擬化,直接使用本地主機的作業系統,而傳統方式則是在硬體層面實作。
容器除了執行其中應用外,基本不消耗額外的系統資源,使得應用的效能很高,同時系統資源消耗更少。傳統虛擬機方式執行 10 個不同的應用就要啟動 10 個虛擬機,而 Docker 只需要啟動 10 個隔離的應用即可。
在O SX系統下,docker daemon(container) 的執行位置是在Linux VM下(docker-machine),而VM完全是在RAM下運作。因此在container映射的埠應為docker-machine的ip而非本地端的80。
$docker port <container name>
//80/tcp -> 0.0.0.0:49157 表,container port 80映設至VM(docker-machine)之49157。因此如果在網頁端執行localhost:49157
是不會有東西的,必須執行$ docker-machine ip <machine name>
的ip (如192.168.99.100:49157)
Docker三元素:
- image 映像檔
- container 容器
- repository 倉庫 (儲存映像檔的場所)
映像檔:
- 唯讀模板,可包含一個完整的作業系統環境(ubuntu),裡面僅安裝Apache及使用者自訂的應用程式。
- 用來建立容器
容器:
- 容器是從映像檔建立執行的「實例」
- 容器可是一個簡易版的Linux環境,和映像檔的差別是容器啟動後是建立一層寫層作為最上層
docker pull registry.hub.docker.com/ubuntu:12.04
命令,即從註冊服務器 registry.hub.docker.com
中的 ubuntu
倉庫來下載標記為 12.04
的映像檔。
docker run -t -i ubuntu:14.04 /bin/bash
即可隨時使用該映像檔了,例如建立一個容器,讓其中執行 bash。
docker images
顯示已有的映像檔
docker run -d -P --name web nginx
run指令只有打開容器並結束。 -d
是讓容器在run後繼續在背景執行,而 -P
是接收容器埠到本機, --name
後面給容器一個命名(此例為web)。
docker ps
查看目前容器狀態
以Dockerfile建立映像檔:
- 進入VM後,先建立一個空的資料夾,內部放入Dockerfile及其相依套件之.sh檔,接著cd至該目錄後,輸入指令
docker build -t "<repositoryName>:<tag>" .
-t
為標記此映像檔的信息(給使用者),.
為目前所在路徑,即Dockerfile的路徑。
上傳映像檔上傳hub:
- 一旦image建好後,可用
docker images
查看。接著可以更改docker tag 7d9495d03763 <account>/<repositoryName>:<tag>
接著再看docker images
會發現有兩個同樣images id。docker login --username <user name> --email <mail>
後輸入密碼,登入成功輸入docker push <repositoryName>
就成功了!docker rmi -f <image id>
-f
強制刪除映像檔指令docker run <repositoryName>
等同於 docker pull and run