一、架構
底層Host使用ubuntu 18.04 LTS,Docker使用手動安裝的而不是發行版內附的版本
安裝步驟可參考
https://docs.docker.com/install/linux/docker-ce/ubuntu/
懶人一鍵安裝
curl -fsSL get.docker.com | sh
Docker組件分成五個部分
1. docker 命令 CLI Client
2. dockerd 服務 (背景服務,接收client要求預設使用unix-socket也可改成tcp讓遠端直接呼叫)
3. containerd 容器的運行時 (Runtime) API介面
4. containerd-slim 容器的運行時父程序(當containerd掛掉的時候runc不會跟著結束)
5. runc 容器的運行時
一般執行docker run | start | pull | exec ....命令使用的是CLI Client,將命令發送到dockerd,dockerd在依照命令執行相對應的動作,如果要啟動容器則在將命令傳給containerd這個服務
最後由containerd實際執行容器操作,三者的腳色是獨立的
例如遠端操作容器時可以直接對dockerd做操作而不需要透過docker cli命令
二、容器與映像
容器是指一個映像的實例(不管是否執行中)
映像是容器的實體(可以理解成一個硬碟紀錄,如Ghost的備份)
映像擋可使用 docker search 命令來搜尋,並使用docker pull命令來下載映像,預設下載last這個tag也可使用「:」來指定要使用的Tag,例如 docker pull php:7.2.23
P.S Tag名稱還無法使用docker命令查詢
啟動容器可使用docker run命令,會建立並啟動容器,可用docker ps命令查詢目前執行中的容器,容器停止則使用docker stop命令,容器停止後並不會刪除如果再次使用docker run則會再次建立一個新的容器,如果是要啟動既有的容器則使用docker start命令
可以使用docker ps -a來查看所有已經建立的容器(包含停止狀態)
要刪除容器可使用docker rm命令
三、容器啟動
容器啟動後會執行進入點(ENTRYPOINT)或CMD命令,如果進入點或CMD命令執行後就結束容器也就跟著結束了,例如執行php7.2.23,這個容器的進入點是php -a這個命令,執行結果如下
root@nansen-ubuntu1904:/# docker run php:7.2.23
Interactive shell
root@nansen-ubuntu1904:/#
因為容器裡的stdin與stdout並未attach到host上所以php執行後就停止了
如果加上 -it 參數則可以attach到host上的終端機
root@nansen-ubuntu1904:/# docker run -it php:7.2.23
Interactive shell
php > echo('hello');
hello
php > exit
root@nansen-ubuntu1904:/#
attach不限於要在執行時指定,可以在容器已執行之後要進入管理容器時使用
root@nansen-ubuntu1904:/# docker start phpshell
phpshell
root@nansen-ubuntu1904:/# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
b1769d2b3f31 php:7.2.23 "docker-php-entrypoi…" 4 minutes ago Up 4 seconds phpshell
root@nansen-ubuntu1904:/# docker exec -it phpshell /bin/bash
root@b1769d2b3f31:/# php -v
PHP 7.2.23 (cli) (built: Sep 26 2019 23:22:56) ( NTS )
Copyright (c) 1997-2018 The PHP Group
Zend Engine v3.2.0, Copyright (c) 1998-2018 Zend Technologies
root@b1769d2b3f31:/#
沒有留言:
張貼留言