1. docker鏡像(image)
鏡像是建立docker容器的基礎,docker鏡像類似于虛拟機鏡像,可以将它了解為一個面向docker引擎的隻讀子產品,包含檔案系統。
建立鏡像有兩種方法:
(1) 基于已有鏡像的容器建立。主要是利用docker commit指令。
(2) 基于dockerfile建立。
首先按照dockerfile的格式,編寫好dockerfile檔案,之後通過docker build指令來建立鏡像。docker build會讀取制定的dockerfile,由docker伺服器來建立鏡像。
2. docker容器(container)
容器是從鏡像建立的應用運作執行個體,容器之間是互相隔離、互不可見的。可以把容器看做一個簡易版的linux系統環境(包括root權限、程序空間、使用者空間和網絡空間等),以及運作在這個環境上的應用打包而成的應用盒子。
鏡像自身是自讀的,容器從鏡像啟動的時候,docker會在鏡像的最上層建立一個可寫檔案層,鏡像本身保持不變。
可以利用docker create指令建立一個容器,建立後的的容器處于停止狀态,可以使用docker start指令來啟動它。也可以運作docker run指令來直接從鏡像啟動運作一個容器。docker run = docker creat + docker start。
當利用docker run建立并啟動一個容器時,docker在背景的标準操作包括:
(1)檢查本地是否存在指定的鏡像,不存在就從公有倉庫下載下傳。
(2)利用鏡像建立并啟動一個容器。
(3)配置設定一個檔案系統,并在隻讀的鏡像層外面挂載一層可讀寫層。
(4)從主控端配置的網橋接口中橋接一個虛拟的接口到容器中。
(5)從位址池中配置一個IP位址給容器。
(6)執行使用者指定的應用程式。
(7)執行完畢後容器終止。
基于鏡像建立一個容器并啟動
docker run --help
docker run [OPTIONS] IMAGE [COMMAND] [ARG...]
-d: detach Run container in background and print container ID 表示以“守護模式”執行
-i: interactive Keep STDIN open even if not attached 表示以“互動模式”運作容器
-t: tty Allocate a pseudo-TTY 表示容器啟動後會進入其指令行(配置設定僞終端)
-t選項讓Docker配置設定一個僞終端(pseudo-tty)并綁定到容器的标準輸入上,-i則讓容器的标準輸入保持打開(如在Linux終端輸入指令操作)
-e: 設定變量值
IMAGE:可以通過“鏡像名”或“鏡像 ID”來啟動容器。
檢視正在運作的容器
docker ps
檢視所有容器
docker ps –a
進入容器
docker attach CONTAINER-ID/NAMES
docker inspect --format "{{ .State.Pid }}" <container-id>
nsenter --target $PID --mount --uts --ipc --net --pid
docker inspect --format "{{ .State.Pid }}" f83944c8b9e8
nsenter --target 11738 --mount --uts --ipc --net --pid

以守護程序運作容器
Ctrl-P + Ctrl-Q 可退出并使容器繼續運作
停止容器
docker stop 容器名/ID
删除容器
docker rm 容器名/ID
檢視容器詳細資訊
docker inspect容器名/ID
3.docker倉庫(Repository)
Docker私有倉庫搭建和使用
上傳鏡像檔案到私有倉庫
安裝Docker後,可用通過官方提供的registry鏡像來搭建一套本地私有倉庫環境。
下載下傳registry鏡像:
docker pull registry
基于私有倉庫鏡像運作容器:(上傳鏡像操作是要保證該容器為運作狀态)
docker run -d -p 5000:5000 [--privileged=true] -v /opt/data/registry:/tmp/registry registry
通路私有倉庫:
curl http://192.168.8.236:5000/v2/_catalog
修改鏡像的tag (加上IP和端點,否則無法上傳到私有倉庫)
docker tag <image id/image name> <host-ip>:5000/div_image_name
上傳鏡像
docker push 127.0.0.1:5000/div_image_name
注:當tag使用内網IP時,需要配置docker服務registry證書;否則報如下錯誤:
編輯 /etc/systemd/system/multi-user.target.wants/docker.service 中的ExecStart= 的結尾,加入 --insecure-registry=192.168.99.100:5000,将 192.168.99.100:5000 替換成你的 registry 位址。如果有很多 registry,可以設定多組。或者如果虛拟機的 IP 總是變化,也可以使用 CIDR 的形式,比如 --insecure-registry=192.168.99.0/24。
systemctl daemon-reload
systemctl restart docker
檢視私有倉庫:
從私有倉庫下載下傳鏡像檔案
登陸另外一台Docker用戶端
編輯 /etc/systemd/system/multi-user.target.wants/docker.service 中的ExecStart= 的結尾,加入--selinux-enabled --insecure-registry=192.168.99.100:5000,将 192.168.99.100:5000 替換成你的 registry 位址。
systemctl daemon-reload
systemctl restart docker
docker pull 192.168.8.236:5000/mysql5.7