常用命令
- 啟動常用命令
啟動docker: systemctl start docker
停止docker: systemctl stop docker
重啟docker: systemctl restart docker
檢視docker狀態: systemctl status docker
開機啟動: systemctl enable docker
檢視docker概要資訊: docker info
檢視docker總體幫助文件: docker --help
檢視docker命令幫助文件: docker 具體命令 --help
- 映象常用命令
docker images 列出本地主機上的映象
引數:
[ -a ] 含歷史映像層
[ -q ] 只顯示映象ID
docker search IMAGE_NAME 搜尋映象
引數:
[ --limit number ]
docker pull IMAGE_NAME[:TAG] 拉取映象
docker system df 檢視映象/容器/資料卷所佔的空間
docker rmi [-f 強制] IMAGE_NAME/IMAGE_ID 刪除單個映象
docker rmi -f $(docker images -qa) 刪除全部
- 容器命令
docker run [OPTIONS] IMAGE [COMMAND] [ARG...]
OPTIONS:
--name="容器名字"
-d 後臺執行容器
-i 以互動模式執行容器
-t 為容器重新分配一個偽輸入終端
-P 隨機埠對映 大寫P
-p HOST_PORT:CONTAINER_PORT 指定埠對映 小寫p
-v HOST_DIR:CONTAINER_DIR 對映目錄到容器
IMAGE:
IMAGE:TAG
COMMAND:
/bin/bash 在容器執行的命令
docker ps 列出當前所有正在執行的容器
引數:
-a 全部
-l 最近建立
-n 最近n個
-q 只顯示ID
docker start CONTAINER_NAME/CONTAINER_ID 啟動停止的容器
docker restart CONTAINER_NAME/CONTAINER_ID 重啟容器
docker stop CONTAINER_NAME/CONTAINER_ID 停止容器
docker kill CONTAINER_NAME/CONTAINER_ID 強制停止容器
docker rm CONTAINER_ID 刪除單個容器
docker rm -f $(docker ps -qa) 刪除全部容器
docker logs CONTAINER_ID 容器日誌
docker top CONTAINER_ID 容器內執行的程序
docker inspect CONTAINER_ID 檢視容器配置
docker exec -it CONTAINER_ID /bin/bash 互動式進入正在執行的容器, exit不會導致容器停止
docker attach CONTAINER_ID 進入正在執行的容器, exit會導致容器停止
一般用-d後臺啟動的程式, 再用exec進入對應容器例項
docker cp CONTAINER_ID:CONTAINER_DIR/FILE HOST_DIR/ 複製容器檔案到宿主機
docker export CONTAINER_ID > FILE.tar.gz 匯出快照
cat FILE.tar.gz | docker import - CONTAINER_NAME:TAG 匯入快照
docker save -o FILE.tar.gz CONTAINER_NAME:TAG 匯出映象
docker save CONTAINER_NAME:TAG > FILE.tar.gz 匯出映象
docker load -i FILE.tar.gz 匯入映象
docker load < FILE.tar.gz 匯入映象
export 和 save的區別:
docker load命令匯入映象庫儲存檔案到本地映象庫;
docker import命令匯入一個容器快照到本地映象庫.
容器快照將會丟棄所有的歷史記錄和後設資料資訊,
而映象儲存檔案將儲存完整記錄, 體積也會更大.
Docker環境資訊 info、version
映象倉庫命令 login、logout、pull、push、search
映象管理 build、images、import、load、rmi、save、tag、commit
容器生命週期管理 create、exec、kill、pause、restart、rm、run、start、stop、unpause
容器運維操作 attach、export、inspect、port、ps、rename、stats、top、wait、cp、diff、update
容器資源管理 volume、network
系統資訊日誌 events、history、logs
- 聯合檔案系統
映象載入原理
docker的映象實際上由一層一層的檔案系統組成, 這種層級的檔案系統就是 UnionFS.
UnionFS
聯合檔案系統.Union檔案系統(UnionFS)是一種分層、輕量級並且高效能的檔案系統,
它支援對檔案系統的修改作為一次提交來一層層的疊加, 同時可以將不同目錄掛載到同一個
虛擬檔案系統下(unite several directories into a single virtual filesystem).
Union 檔案系統是 Docker 映象的基礎.映象可以透過分層來進行繼承,
基於基礎映象(沒有父映象), 可以製作各種具體的應用映象.
特性:一次同時載入多個檔案系統, 但從外面看起來, 只能看到一個檔案系統,
聯合載入會把各層檔案系統疊加起來, 這樣最終的檔案系統會包含所有底層的檔案和目錄
bootfs
boot file system.主要包含bootloader和kernel, bootloader主要是引導載入kernel,
Linux剛啟動時會載入bootfs檔案系統, 在Docker映象的最底層是bootfs.
這一層與我們典型的Linux/Unix系統是一樣的, 包含boot載入器和核心.
當boot載入完成之後整個核心就都在記憶體中了, 此時記憶體的使用權已由bootfs轉交給核心,
此時系統也會解除安裝bootfs.
rootfs
root file system.在bootfs之上.包含的就是典型 Linux 系統中的 /dev, /proc, /bin,
/etc 等標準目錄和檔案.rootfs就是各種不同的作業系統發行版, 比如Ubuntu, Centos等等.
對於一個精簡的OS, rootfs可以很小, 只需要包括最基本的命令、工具和程式庫就可以了,
因為底層直接用Host的kernel, 自己只需要提供 rootfs 就行了.
由此可見對於不同的linux發行版, bootfs基本是一致的, rootfs會有差別,
因此不同的發行版可以公用bootfs.
- Commit 建立自定義映象
docker commit [OPTIONS] CONTAINER_ID NEW_IMAGE:[TAG]
OPTIONS:
-m="附加說明資訊"
-a="作者"
docker commit -m "add vim" -a="zk" f8c8c578d3c1 zk/ubuntu:1.0
docker commit [OPTIONS] CONTAINER_ID [REPOSITORY[:TAG]]
二、 映象倉庫
- 阿里雲映象倉庫
登陸
docker login --username=XXX registry.cn-hangzhou.aliyuncs.com
拉取
docker pull registry.cn-hangzhou.aliyuncs. com/ns-2023/lib-2023:[映象版本號]
推送
docker tag [ImageId] registry.cn-hangzhou.aliyuncs.com/ns-2023/lib-2023:[映象版本號]
docker push registry.cn-hangzhou.aliyuncs.com/ns-2023/lib-2023:[映象版本號]
- 搭建自己的映象倉庫
# 拉取映象
docker pull registry
# 啟動registry容器
docker run -d -p 5000:5000 -v /registry:/tmp/registry[:rw/ro 讀寫掛載/只讀掛載] --privileged=true registry
# 將改動的容器轉為映象
docker commit -m="add vim" -a="zk" 4d69fa4a6400 mycentos:1.0
# 檢視本地私有倉庫
curl -XGET http://127.0.0.1:5000/v2/_catalog
# 配置檔案新增 insecure-registries 支援http
cat /etc/docker/daemon.json
{
"registry-mirrors":[
"https://bhtknto5.mirror.aliyuncs.com",
"https://yo3sdl2l.mirror.aliyuncs.com",
"https://blkjc4x3.mirror.aliyuncs.com",
"https://gfmnzvu1.mirror.aliyuncs.com",
"https://yxzrazem.mirror.aliyuncs.com",
"http://hub-mirror.c.163.com",
"https://registry.docker-cn.com",
"http://hub-mirror.c.163.com",
"https://docker.mirrors.ustc.edu.cn"
],
"insecure-registries": ["127.0.0.1:5000"]
}
# 推送
docker tag mycentos:1.0 127.0.0.1:5000/mycentos:1.0
docker push 127.0.0.1:5000/mycentos:1.0
# 檢視
curl -XGET http://127.0.0.1:5000/v2/_catalog
{"repositories":["mycentos"]}
# 拉取
docker pull 127.0.0.1:5000/mycentos:1.0
- 快速繼承其他容器的卷 --volumes-from CONTAINER_ID/CONTAINER_NAME
docker run -it --privileged=true --name centos1 -v /root/zk:/tmp/zk centos:7 /bin/bash
docker run -it --rm --privileged=true --name centos2 --volumes-from centos1 centos:7 /bin/bash
# 進入容器 centos 檢視 /tmp/zk