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}}' イメージ名

ディレクトリ / ファイルマッピングのあるコンテナの処理

ホストのファイル / ディレクトリをマッピングしたコンテナの場合、イメージにパッケージ化する際に、マッピングされたファイル / ディレクトリはパッケージに含まれません。

この場合、2 つの解決策を提供します:

  1. まずイメージファイルを生成し、新しく生成したイメージでコンテナを作成し、元のマッピングディレクトリ / ファイルをコンテナにコピーしてからパッケージ化します。最終的にソースディレクトリを含むイメージファイルが生成されます。
docker cp コピーするファイルまたはディレクトリ コンテナIDまたはコンテナ名:コピー先のコンテナ内部位置
  1. 外部にイメージを提供する際に、マッピングファイルも一緒に提供します。イメージを実行する際に、マッピング関係を指定します。

イメージを圧縮パッケージとしてエクスポート#

docker save -o /home/イメージ名.tar イメージ名:latest

イメージ名.tar をイメージとしてインポート#

# インポート方法1
docker load --input /home/skj.tar
# インポート方法2
$ docker load -i /home/skj.tar
# インポート方法3
$ 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"
  ]

方法 1: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

方法 2: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に変更"

方法 3: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に変更"

方法 4: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 コンテナプロセス

再度起動し、成功!

方法 5: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公式イメージを取得するスクリプト#

方法 1:

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  イメージ名

方法 2:

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
読み込み中...
文章は、創作者によって署名され、ブロックチェーンに安全に保存されています。