docker技術總結

jpxiao發表於2024-07-17

一、docker部署安裝

1. 設定金鑰、增加軟體源

curl -fsSL https://mirrors.aliyun.com/docker-ce/linux/ubuntu/gpg | sudo apt-key add -

sudo add-apt-repository \
"deb [arch=amd64] https://mirrors.aliyun.com/docker-ce/linux/ubuntu \
$(lsb_release -cs) \
stable"

2. 安裝docker引擎

sudo apt-get install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin

docker安裝如果出現網路問題無法訪問docker.com,可以參考 https://www.cnblogs.com/FFFirer/p/18247403 解決

3. 配置docker映象源,映象加速,映象源出現變動後可參考這個

https://github.com/cmliu/CF-Workers-docker.io/issues/8

或者使用阿里雲的映象加速配置,參考

https://help.aliyun.com/zh/acr/user-guide/accelerate-the-pulls-of-docker-official-images

sudo mkdir -p /etc/docker

sudo tee /etc/docker/daemon.json <<EOF
{
    "registry-mirrors": [
        "https://hub.uuuadc.top",
        "https://docker.anyhub.us.kg",
        "https://dockerhub.jobcher.com",
        "https://dockerhub.icu",
        "https://docker.ckyl.me",
        "https://docker.awsl9527.cn"
    ]
}
EOF

4. 重啟docker

sudo systemctl daemon-reload
sudo systemctl restart docker

二、image、container相關的docker命令使用

1. image相關包括映象下載、啟動、修改配置、映象儲存、釋出等操作

# 檢索
docker search [image name]
# 下載。最新版本tag latest
docker pull [name]:[tag]
# 映象陳列
docker images
# 映象刪除
docker rmi [name]:[tag]
# 映象儲存成指定檔名,並放到當前目錄
docker save -o filename.tar [image name]:[tag]
# 映象從檔案處載入,要cd到當前路徑
docker load -i filename.tar
# 源映象重新取指定的名稱:標籤
docker tag [source image]:[source tag] [target image]:[tag]

2. container相關包含容器執行、啟動、檢視、停止、重啟,進入容器內操作、刪除等

# 執行,後臺執行,設定容器名,設定埠對映 主機埠:容器埠,執行成功,會返回一個id
docker run -d --name myname -p port:port [image name]:[tag]
# 停止
docker stop [container id]
# 檢視所有容器
docker ps -a
# 重啟
docker restart [id]
# 啟動
docker start [id]
# 檢視狀態
docker stats [id]
# 進入容器,互動模式
docker exec -it [id] bash
# 檢視容器日誌
docker logs [id]
# 刪除容器,-f可以強制刪除
docker rm -f [id]
# 將容器儲存成映象:版本
docker commit [container name] [image name]:[tag]
# 檢視容器細節
docker container inspect [id]

其中,啟動容器,可以設定引數,引數可以由映象提供方給出,

三、docker儲存配置

容器內部資料管理不容易,且容器銷燬後資料即丟失,所以使用掛載、對映方式儲存容易丟失的資料。

1. 透過目錄掛載形式:以外部機器的目錄和容器目錄做一個關聯關係配置,在啟動容器時,使用引數-v配置,可以有多組。

但此時容器內目錄的內容,以外界目錄為準。也就是說初始階段,外界目錄如果是空的或者還未建立,容器對應目錄也是空的。

而外界對應目錄只要有變化,新增、刪除、修改檔案,容器內目錄也會有對應變化。容器內有變動,外部也會有變動。

容器如果刪除了,外部資料夾還是在的。這樣容器如果重新建立,就可以依據外面資料夾的資料,作相應設定。

docker run -d -p port:port -v [local path]/app/dir:[container path]/usr/dir -v [local path2]:[container path2] [image name]:[tag]

2. 卷對映:如果在初始階段,檔案對映要以容器內為準,再把容器內資料夾對應內容對映到外面目錄(建立空目錄),則使用卷對映方式。使用引數-v配置,可以有多組。

可以看出配置卷,可以理解為只設定了一個資料夾名,這個卷(資料夾)放在主機位置/var/lib/docker/volumes/<volume name>,卷記憶體儲容器內檔案,初始過程,如果卷剛建立出來則以容器內檔案為準,如果卷已經存在則以卷內檔案為準。卷名是不能重複的。在首次啟動容器時,將容器中的資料複製到卷中,可以避免被卷覆蓋。

在外部,修改卷內檔案,容器內也被修改,容器裡面修改同理。

容器被刪除了,卷還是會存在的。

docker run -d -p port:port -v [volume name]:[container path]/path/dir [image name]:[tag]
# 檢視卷
docker volume ls
# 建立卷
docker volume create [volume name]
# 檢視卷詳情
docker volume inspect [volume name]

四、docker網路配置

docker網路,docker每啟動一個容器,都會分配唯一ip,可以使用容器ip+容器埠互相訪問。

建立自定義網路,配置網路,可以讓容器之間是互通的,可以直接訪問,透過容器名訪問。

# 建立網路
docker network create [name]
# 檢視
docker network ls
# 執行容器時,配置網路
docker run -d -p port:port --network [net name] [container name]:[tag]
# 進入容器內,透過容器名:埠訪問
curl http://[container name]:[port]

相關文章