基礎概念
開發環境deepin linux 15.11。安裝docker之後,執行指令:
sudo usermod -aG docker $USER_NAME
讓docker和目前使用者在一個組中,可以每次不用執行sudo指令了。
三個核心的概念:
- 鏡像:類似虛拟機的鏡像,一個隻讀模闆。比如linux鏡像等
- 容器:輕量級的沙箱,基于容器建立的一個運作執行個體
- 倉庫:docker存放鏡像檔案的場所
容器是鏡像的一個運作時的狀态,鏡像是靜态的,容器是動态的。
docker的很多思想參考了git和github,可以 對比着來了解
Docker鏡像
docker容器運作時,需要從本地擷取對應的鏡像檔案。若果沒有,則去預設倉庫下載下傳。我們可以自定義倉庫的位置。
docker擷取對應的鏡像檔案:
image
是鏡像的名字,
NAME
是在遠端倉庫中鏡像的名字,
TAG
是對應的标簽,類似git上的tag。不指定tag會預設拉去
latest
版本,在服務端不建議這麼做。更加詳細的
pull
指令可以參考有關的手冊。
使用
images
指令可以檢視對應的
docker
資訊。一個執行個體:
docker pull zookeeper
docker images
之後終端顯示:
-
:鏡像所在倉庫REPOSITORY
-
:對應的TAG
号,類似git中的TAG
tag
-
:鏡像的唯一标志,就像我們git每次送出都會有對應的一個編IMAGE ID
-
:鏡像的最後更新時間CREATED
-
:鏡像的大小SIZE
我們可以使用
tag
指令給我們本地的鏡像打一個
tag
,比如:
docker tag zookeeper:latest myzookeeper;latest
使用
inspect
檢視詳細的資訊,比如:
docker inspect zookeeper:latest
docker鏡像由多個層組成,可以使用
history
指令檢視層的資訊,比如:
docker history zookeeper:lastest
使用
search
指令搜尋鏡像,比如:
docker search zookeeper
具體參數參考手冊
使用
rmi
或者
image rm
指令删除鏡像,比如:
docker rmi zookeeper:latest
docker image rm zookeeper:latest
後者
tag
号可以替換成
id
号
使用
prune
指令清理遺留的臨時鏡像檔案,比如:
docker prune
基于已有的容器建立,基本的指令格式是:
比如,執行指令:
docker [container] commit -m "create container example" -a "erick" zookeeper:latest myZookeeper:0.1
也可以使用模闆檔案導入鏡像,比如:
cat ubuntu-18.04-x86_64-minimal.tar.gz | docker import - ubuntu:18.04
使用Dockerfile可以基于某個父鏡像建立新鏡像。比如:
FROM debian:stretch-slim
LABEL version="1.0" maintainer="docker user <[email protected]>"
RUN apt-get update && \
apt-get install -y python3 && \
apt-get clean &&
rm -rf /var/lib/apt/lists/*
可以使用
save
和
load
指令導出和加載鏡像。
docker save -o ubuntu_18.04.tar ubuntu:18.04 # 導出鏡像
docker load -i ubuntu_18.04.tar # 加載鏡像到本地的docker
docker loac < ubuntu_18.04.tar # 同上
可以使用
docker push
指令上傳到指定倉庫,具體可以參考手冊。
總結
docker的鏡像是一個靜态的檔案,而且有不同的版本,這就類似于git的不同版本那樣,docker的鏡像是docker的基礎,需要理清基本概念。