banner
云野阁

云野阁

闲云野鹤,八方逍遥

docker知識梳理

容器設置開機自啟#

容器創建時未指定 --restart=always , 可通過 update 命令設置

docker update --restart=always 容器ID

容器關閉自啟動#

docker update --restart=no 容器ID

獲取容器 / 鏡像的元數據#

docker inspect id

容器網絡#

創建容器網絡

#docker network create --subnet 子網範圍 --ip-range 子網內可用的IP地址範圍 Docker網絡名
docker network create --subnet 172.20.0.0/16 --ip-range 172.20.1.102/29 zabbix-net

刪除創建的容器網絡#

#查看容器網絡
docker network ls
#刪除容器網絡
docker network rm 容器id

查看 docker 所有容器 ip#

 docker inspect --format='{{.Name}} - {{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' $(docker ps -aq)

查看所有容器的名字#

#查看所有容器名字
docker ps -a --format {{.Names}}

docker 生成鏡像(無目錄映射)#

docker commit id/容器名 鏡像名

# 生成帶有提交信息與作者的鏡像
docker commit -m "提交信息" -a "作者" id/容器名 鏡像名
#查看提交信息與作者
 docker inspect --format '提交信息:{{.Comment}},  作者:{{.Author}}' 鏡像名

對有目錄 / 文件映射的容器的處理

針對映射了宿主機的文件 / 目錄的容器,在打包成鏡像時,映射文件 / 目錄並不會被打包進去。

針對這種情況提供兩種解決方案:

1. 先生成鏡像文件,再用新生成的鏡像創建一個容器,將原來的映射目錄 / 文件拷貝進容器後再打包,最後就會形成一個帶有源目錄鏡像文件。

docker cp 要拷貝的文件或目錄 容器ID或容器名稱:要拷貝到的容器內部位置

2. 對外提供鏡像時,把映射文件一起提供出去。當運行鏡像時,指定映射關係。

導出鏡像為壓縮包#

docker save -o /home/鏡像名.tar 鏡像名:latest

將鏡像名.tar 導入為鏡像#

# 導入方法一
docker load --input /home/skj.tar
# 導入方法二
$ docker load -i /home/skj.tar
# 導入方法三
$ docker load < /home/skj.tar

運行 docker compose 文件,創建相關容器#

docker compose -f docker-compose-XXXXXXX.yml up -d

創建 docker compose 文件時,要使用已經存在的網絡,書寫腳本網絡內容的命令如下:

networks:
  網絡名稱:
    external: true

Docker 命令補全#

 curl -L https://raw.githubusercontent.com/docker/composcompose > /etc/bash_completion.d/docker-compose
 #重新登錄
 bash

Docker 一鍵安裝#

Docker 鏡像源

  "registry-mirrors": [
    "https://registry.docker-cn.com",
    "http://hub-mirror.c.163.com",
    "https://dockerhub.azk8s.cn",
    "https://mirror.ccs.tencentyun.com",
    "https://registry.cn-hangzhou.aliyuncs.com",
    "https://docker.mirrors.ustc.edu.cn",
    "https://docker.m.daocloud.io",
    "https://noohub.ru",
    "https://huecker.io",
    "https://dockerhub.timeweb.cloud"
  ]

方式一:centos#

#使用官方腳本自動安裝,默認安裝最新版
curl -fsSL https://get.docker.com | bash -s docker --mirror Aliyun

systemctl start docker
systemctl enable docker

#設置存儲庫安裝
sudo yum install -y yum-utils
#官方源
sudo yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
#阿里源(推薦)
yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
sudo yum install -y docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin

方式二:openEuler 22.03 (LTS-SP2) 非管理員#

#!/bin/bash
#############描述#############
:<<!
安裝Docker CE,設置開機自啟
修改docker存儲路徑
!
#############描述#############
echo "[docker-ce-stable]
name=Docker CE Stable - $basearch
baseurl=https://repo.huaweicloud.com/docker-ce/linux/centos/7/$basearch/stable
enabled=1
gpgcheck=1
gpgkey=https://repo.huaweicloud.com/docker-ce/linux/centos/gpg

[docker-ce-stable-debuginfo]
name=Docker CE Stable - Debuginfo $basearch
baseurl=https://repo.huaweicloud.com/docker-ce/linux/centos/7/debug-$basearch/stable
enabled=0
gpgcheck=1
gpgkey=https://repo.huaweicloud.com/docker-ce/linux/centos/gpg

[docker-ce-stable-source]
name=Docker CE Stable - Sources
baseurl=https://repo.huaweicloud.com/docker-ce/linux/centos/7/source/stable
enabled=0
gpgcheck=1
gpgkey=https://repo.huaweicloud.com/docker-ce/linux/centos/gpg

[docker-ce-test]
name=Docker CE Test - $basearch
baseurl=https://repo.huaweicloud.com/docker-ce/linux/centos/7/$basearch/test
enabled=0
gpgcheck=1
gpgkey=https://repo.huaweicloud.com/docker-ce/linux/centos/gpg

[docker-ce-test-debuginfo]
name=Docker CE Test - Debuginfo $basearch
baseurl=https://repo.huaweicloud.com/docker-ce/linux/centos/7/debug-$basearch/test
enabled=0
gpgcheck=1
gpgkey=https://repo.huaweicloud.com/docker-ce/linux/centos/gpg

[docker-ce-test-source]
name=Docker CE Test - Sources
baseurl=https://repo.huaweicloud.com/docker-ce/linux/centos/7/source/test
enabled=0
gpgcheck=1
gpgkey=https://repo.huaweicloud.com/docker-ce/linux/centos/gpg

[docker-ce-nightly]
name=Docker CE Nightly - $basearch
baseurl=https://repo.huaweicloud.com/docker-ce/linux/centos/7/$basearch/nightly
enabled=0
gpgcheck=1
gpgkey=https://repo.huaweicloud.com/docker-ce/linux/centos/gpg

[docker-ce-nightly-debuginfo]
name=Docker CE Nightly - Debuginfo $basearch
baseurl=https://repo.huaweicloud.com/docker-ce/linux/centos/7/debug-$basearch/nightly
enabled=0
gpgcheck=1
gpgkey=https://repo.huaweicloud.com/docker-ce/linux/centos/gpg

[docker-ce-nightly-source]
name=Docker CE Nightly - Sources
baseurl=https://repo.huaweicloud.com/docker-ce/linux/centos/7/source/nightly
enabled=0
gpgcheck=1
gpgkey=https://repo.huaweicloud.com/docker-ce/linux/centos/gpg
" > /etc/yum.repos.d/docker-ce.repo

yum install container-selinux
yum install -y docker-ce docker-ce-cli containerd.io docker-compose-plugin --nogpgcheck --nobest
#啟動docker並設置開機自啟
systemctl start docker
systemctl enable docker
#查看版本
docker -v
docker compose version
echo "***********************
docker 安裝成功
***********************"

mkdir -p /data/dockerData
#/data/docker為存儲新路徑
echo '
{
  "data-root": "/data/dockerData"
}' > /etc/docker/daemon.json
systemctl restart docker
echo "docker的存儲位置改為/data/dockerData"

方式三:openEuler 22.03 (LTS-SP2) 管理員#

#!/bin/bash
#############描述#############
:<<!
安裝Docker CE,設置開機自啟
修改docker存儲路徑
!
#############描述#############

#配置Docker CE的yum存儲庫
echo "[docker-ce-stable]
name=Docker CE Stable - \$basearch
baseurl=https://download.docker.com/linux/centos/7/\$basearch/stable
enabled=1
gpgcheck=1
gpgkey=https://download.docker.com/linux/centos/gpg
" > /etc/yum.repos.d/docker-ce.repo

yum install container-selinux
yum install -y docker-ce docker-ce-cli containerd.io docker-compose-plugin --nogpgcheck --nobest
#啟動docker並設置開機自啟
systemctl start docker
systemctl enable docker
#查看版本
docker -v
docker compose version
echo "***********************
docker 安裝成功
***********************"

mkdir -p /data/dockerData
#/data/docker為存儲新路徑
echo '
{
  "data-root": "/data/dockerData"
}' > /etc/docker/daemon.json
systemctl restart docker
echo "docker的存儲位置改為/data/dockerData"

方式四:openEuler 20.03 (LTS) x86#

#安裝openEuler鏡像源
wget -O /etc/yum.repos.d/openEulerOS.repo https://repo.huaweicloud.com/repository/conf/openeuler_x86_64.repo
#安裝依賴軟件源
wget -O /etc/yum.repos.d/CentOS-Base.repo https://repo.huaweicloud.com/repository/conf/CentOS-7-reg.repo 
#
sed -i 's/\$releasever/7/g' /etc/yum.repos.d/CentOS-Base.repo
yum clean all
yum makecache

docker 容器出現無法重啟,報錯內容如下#

Error response from daemon: Cannot restart container 66dd752e0bd4: id already in use

解決方法:

#查看容器ID
docker ps -a
#查看容器進程
ps -aux | grep 容器ID
#殺掉進程
kill -9 容器進程

再次啟動,成功!

方式五:openEuler 22.03#

yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
sed -i 's/\$releasever/7/g' /etc/yum.repos.d/docker-ce.repo

docker 容器內出現無法使用安裝鏡像源的問題,如下圖#

1711208367091-1-1711208371676-4

在 /etc/docker/daemon.json 文件中配置 DNS 即可解決

vi /etc/docker/daemon.json
{
 "dns": ["8.8.8.8", "114.114.114.114"]
 }

拉取gcr.io , k8s.gcr.io , registry.k8s.io , quay.io, ghcr.io官方鏡像腳本#

方式一:

wget https://raw.githubusercontent.com/anjia0532/gcr.io_mirror/master/pull-k8s-image.sh chmod +x pull-k8s-image.sh

vi pull-images.sh
###########################################3
#!/bin/sh

k8s_img=$1
mirror_img=$(echo ${k8s_img}|
        sed 's/quay\.io/anjia0532\/quay/g;s/ghcr\.io/anjia0532\/ghcr/g;s/registry\.k8s\.io/anjia0532\/google-containers/g;s/k8s\.gcr\.io/anjia0532\/google-containers/g;s/gcr\.io/anjia0532/g;s/\//\./g;s/ /\n/g;s/anjia0532\./anjia0532\//g' |
        uniq)

if [ -x "$(command -v docker)" ]; then
  sudo docker pull ${mirror_img}
  sudo docker tag ${mirror_img} ${k8s_img}
  exit 0
fi

if [ -x "$(command -v ctr)" ]; then
  sudo ctr -n k8s.io image pull docker.io/${mirror_img}
  sudo ctr -n k8s.io image tag docker.io/${mirror_img} ${k8s_img}
  exit 0
fi

echo "command not found:docker or ctr"
###############################################
chmod +x pull-images.sh
#執行格式
./pull-images.sh  鏡像名

方式二:

https://dockerproxy.com/

docker 的 iptables 策略#

#顯示DOCKER-USER的鏈中的規則信息
iptables -nL DOCKER-USER
# 在主機10.10.3.117執行如下命令:(ens192 為本機網卡,以實際為準)
#禁止所有IP訪問docker的80端口
iptables -I DOCKER-USER -i ens192 -p tcp --dport 80 -j DROP
#只允許10.10.3.122訪問docker的80端口
iptables -I DOCKER-USER -i ens192 -s 10.10.3.122 -p tcp --dport 80 -j ACCEPT
#刪除DOCKER-USER的鏈中的默認規則
iptables -D DOCKER-USER -j RETURN
#保存DOCKER-USER策略
service iptables save
#設置iptables開機自啟,使策略永久生效
systemctl enable iptables.service
#或者
/etc/rc.d/init.d/iptables save
載入中......
此文章數據所有權由區塊鏈加密技術和智能合約保障僅歸創作者所有。