37_常用命令

鸟叔书發表於2024-03-13

常用命令

  1. 啟動常用命令
啟動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
  1. 映象常用命令
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) 刪除全部

  1. 容器命令
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
  1. 聯合檔案系統
映象載入原理
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.
  1. 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]]
二、 映象倉庫
  1. 阿里雲映象倉庫
登陸
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:[映象版本號]

  1. 搭建自己的映象倉庫
# 拉取映象
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
  1. 快速繼承其他容器的卷 --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