2019年9月29日 星期日

Docker筆記

最近工作上用到Docker買了些書還跟同事參加K8s的研討會,回來後就投入把目前開發環境從windows server轉移到ubuntu+docker的模式,也踩了不少坑




一、架構
底層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:/#

沒有留言:

張貼留言