📢 Webサイト閉鎖と移転のお知らせ
このWebサイトは2026年9月に閉鎖いたします。
新しい記事は移転先で追加しております。(旧サイトでは記事を追加しておりません)
| (同じ利用者による、間の25版が非表示) | |||
| 24行目: | 24行目: | ||
https://download.docker.com/linux/static/stable/x86_64/<br> | https://download.docker.com/linux/static/stable/x86_64/<br> | ||
(stable以外のedgeやtestは好みで選択する)<br> | (stable以外のedgeやtestは好みで選択する)<br> | ||
wget https://download.docker.com/linux/static/stable/x86_64/docker- | wget https://download.docker.com/linux/static/stable/x86_64/docker-<バージョン>.tgz | ||
tar | tar xf docker-<バージョン>.tgz | ||
sudo cp docker/* /usr/local/bin | sudo cp docker-<バージョン>/* /usr/local/bin | ||
<br> | <br> | ||
正常にインストールできたか確認する。<br> | 正常にインストールできたか確認する。<br> | ||
| 52行目: | 52行目: | ||
ただし、リポジトリに含まれるDocker CEの更新が遅い場合があるので注意すること。<br> | ただし、リポジトリに含まれるDocker CEの更新が遅い場合があるので注意すること。<br> | ||
<br> | <br> | ||
===== | ===== RHELの場合 ===== | ||
まず、Docker CEをインストールするために、依存関係のライブラリをインストールする。<br> | まず、Docker CEをインストールするために、依存関係のライブラリをインストールする。<br> | ||
sudo | sudo dnf install yum-utils device-mapper-persistent-data lvm2 | ||
<br> | <br> | ||
続いて、Docker CEをインストールする。<br> | 続いて、Docker CEをインストールする。<br> | ||
sudo | sudo dnf install docker-ce | ||
<br> | <br> | ||
<u> | <u>※注意</u><br> | ||
<u> | <u>Docker CEの最新バージョンを使用する場合は、標準設定では無効になっているリポジトリを有効にする必要がある。</u><br> | ||
sudo yum-config-manager --enable docker-ce-edge | sudo yum-config-manager --enable docker-ce-edge | ||
sudo yum-config-manager --enable docker-ce-test | sudo yum-config-manager --enable docker-ce-test | ||
| 81行目: | 81行目: | ||
ファイル作成後、リポジトリの更新とdockerのインストールを行う。<br> | ファイル作成後、リポジトリの更新とdockerのインストールを行う。<br> | ||
sudo zypper --gpg-auto-import-keys refresh | sudo zypper --gpg-auto-import-keys refresh | ||
sudo zypper install docker docker-compose | sudo zypper install docker docker-compose yast2-docker | ||
<br> | <br> | ||
または、SLEの場合は、以下の手順を行うこともできる。<br> | または、SLEの場合は、以下の手順を行うこともできる。<br> | ||
| 92行目: | 92行目: | ||
#: または | #: または | ||
#: <code>sudo SUSEConnect -p sle-module-containers/15/x86_64 ''</code> | #: <code>sudo SUSEConnect -p sle-module-containers/15/x86_64 ''</code> | ||
<br><br> | |||
== Docker Rootlessのインストール == | |||
==== Docker Rootless (ルートレスモード) とは ==== | |||
Docker Rootless (ルートレスモード)は、非スーパーユーザとしてDockerデーモンを実行することができる。<br> | |||
ルートレスモードでは、一般ユーザとしてDockerデーモンとコンテナを実行して、デーモンとコンテナランタイムの潜在的な脆弱性を軽減することができる。<br> | |||
<br> | |||
ルートレスモードは、前提条件さえ満たしていれば、Dockerデーモンのインストール中であってもroot権限を必要としない。<br> | |||
<br> | |||
Docker-Rootlessの詳細を知りたい場合は、[https://docs.docker.com/engine/security/rootless/ Docker-Rootlessの公式ドキュメント]を参照すること。<br> | |||
<br> | |||
==== どのように動作するか ==== | |||
ルートレスモードは、Dockerデーモンとコンテナをユーザネーム空間内で実行する。<br> | |||
これは、userns-remapモードとよく似ているが、<br> | |||
userns-remapモードではデーモン自体がスーパーユーザ権限で実行されるのに対して、ルートレスモードではデーモンとコンテナの両方が一般ユーザ権限として実行される。<br> | |||
<br> | |||
ルートレスモードでは、SETUIDビットやファイル機能を持つバイナリを使用しない。<br> | |||
ただし、newuidmapとnewgidmapは、ユーザ名前空間で複数のUID/GIDを使用できるようにするために必要である。<br> | |||
<br> | |||
==== 前提条件 ==== | |||
ホストにnewuidmapとnewgidmapをインストールする必要がある。<br> | |||
これらのコマンドは、ほぼ全てのLinuxディストリビューションのuidmapパッケージで提供されている。<br> | |||
<br> | |||
/etc/subuidおよび/etc/subgidには、ユーザの下位UID / GIDが少なくとも65536個含まれていなければならない。<br> | |||
# 実行ユーザIDの確認 | |||
id -u | |||
# 実行ユーザ名の確認 | |||
whoami | |||
# 実行ユーザのSubUIDの確認 | |||
grep ^$(whoami): /etc/subuid | |||
# 実行ユーザのSubGIDの確認 | |||
grep ^$(whoami): /etc/subgid | |||
<br> | |||
また、fuse-overlayfsパッケージのインストールを推奨する。<br> | |||
# RHEL | |||
sudo dnf install fuse-overlayfs iptables | |||
# SUSE | |||
sudo zypper install fuse-overlayfs | |||
sudo modprobe ip_tables iptable_mangle iptable_nat iptable_filter | |||
<br> | |||
==== 制限事項 ==== | |||
* 以下のストレージドライバのみがサポートされている。 | |||
*: overlay2 (Linuxカーネル 5.11以降) | |||
*: fuse-overlayfs (Linuxカーネル 4.18以降、かつ、fuse-overlayfsがインストールされている場合のみ) | |||
*: btrfs (Linuxカーネル4.18以降で動作している、または、~/.local/share/dockerがuser_subvol_rm_allowedマウントオプションでマウントされている場合のみ) | |||
*: vfs | |||
*: <br> | |||
* Cgroupは、cgroup v2とsystemdで実行している場合のみサポートされる。 | |||
*: <br> | |||
* 以下の機能はサポートされない。 | |||
*: AppArmor | |||
*: チェックポイント | |||
*: オーバーレイネットワーク | |||
*: SCTPポートの公開 | |||
*: <br> | |||
* <code>ping</code>コマンドを使用する場合は、pingパケットのルーティングを参照すること。 | |||
* 特権TCP / UDPポート (1024番以下のポート) を公開する場合は、特権ポートの公開を参照すること。 | |||
* <code>docker inspect</code>コマンドで表示されるIPアドレスは、RootlessKitのネットワーク名前空間内に名前空間が存在する。<br>これは、IPアドレスがネットワーク名前空間にnsenterせずにホストから到達できないことを意味する。 | |||
* ホストのネットワーク (<code>docker run --net=<ホスト名></code>) も、RootlessKitの名前空間内に存在する。 | |||
* Dockerの"data-root"としてのNFSマウントはサポートされない。<br>この制限は、ルートレスモード特有のものではない。 | |||
<br> | |||
==== Docker Rootlessのインストール ==== | |||
===== パッケージ管理システムからインストール ===== | |||
# SUSE | |||
sudo zypper install docker-rootless-extras | |||
<br> | |||
===== バイナリファイルをダウンロードしてインストール ===== | |||
まず、[https://download.docker.com/linux/static/stable/x86_64/ Docker Rootlessの公式Webサイト]にアクセスして、Docker-Rootlessの実行バイナリをダウンロードする。<br> | |||
ダウンロードしたファイルを解凍する。<br> | |||
tar xf docker-rootless-extras-<バージョン>.tgz | |||
mv docker-rootless-extras-<バージョン> <任意のインストールディレクトリ> | |||
<br> | |||
次に、[https://download.docker.com/linux/static/stable/x86_64/ Dockerの公式Webサイト]にアクセスして、Dockerの実行バイナリをダウンロードする。<br> | |||
ダウンロードしたファイルを解凍する。<br> | |||
tar xf docker-<バージョン>.tgz | |||
mv docker-<バージョン>/* <Docker-Rootlessが存在するディレクトリ> | |||
<br> | |||
最後に、<u>~/.profileファイル等に、環境変数<code>PATH</code>を追記する。</u><br> | |||
vi ~/.profile | |||
<br> | |||
<syntaxhighlight lang="sh"> | |||
# ~/.profileファイル | |||
export PATH="<Docker-Rootlessのインストールディレクトリ>:$PATH" | |||
</syntaxhighlight> | |||
<br> | |||
==== Docker Rootlessの初期設定 ==== | |||
まず、一般ユーザとして、Docker Rootlessデーモンを設定する。<br> | |||
dockerd-rootless-setuptool.sh install | |||
<br> | |||
次に、~/.profileファイル等に、環境変数<code>PATH</code>および<code>DOCKER_HOST</code>を追記する。<br> | |||
<syntaxhighlight lang="bash"> | |||
# ~/.profileファイル | |||
export PATH=<Docker Rootlessのインストールディレクトリ>:$PATH | |||
export DOCKER_HOST=unix:///run/user/1000/docker.sock | |||
</syntaxhighlight> | |||
<br> | |||
==== Docker Rootlessのアンインストール ==== | |||
まず、Dockerデーモンのsystemdサービスを削除する場合、以下に示すコマンドを実行する。<br> | |||
dockerd-rootless-setuptool.sh uninstall | |||
<br> | |||
次に、~/.bashrcファイル内の環境変数<code>PATH</code>と<code>DOCKER_HOST</code>が追記されている場合は、設定を削除する。<br> | |||
<br> | |||
Docker Rootlessのデータディレクトリを削除する場合は、以下に示すコマンドを実行する。<br> | |||
rootlesskit rm -rf ~/.local/share/docker | |||
<br> | |||
もし、パッケージ管理システムからdocker-ce-rootless-extrasパッケージをインストールしている場合は削除する。<br> | |||
sudo zypper remove docker-ce-rootless-extras | |||
<br> | |||
最後に、Docker Rootlessの実行バイナリを削除する。<br> | |||
cd ~/bin | |||
rm -f containerd containerd-shim containerd-shim-runc-v2 ctr \ | |||
docker docker-init docker-proxy dockerd dockerd-rootless-setuptool.sh dockerd-rootless.sh \ | |||
rootlesskit rootlesskit-docker-proxy runc vpnkit | |||
<br> | |||
==== Docker Rootlessの実行 ==== | |||
Systemdサービスユニットは、~/.config/systemd/user/docker.serviceとしてインストールされる。<br> | |||
<br> | |||
Docker Rootlessを起動する。<br> | |||
systemctl --user start docker | |||
<br> | |||
システム起動時にDocker Rootlessデーモンを起動する場合は、Systemdサービスユニットとlingeringを有効にする。<br> | |||
systemctl --user enable docker | |||
sudo loginctl enable-linger $(whoami) | |||
<br> | |||
<u>※注意</u><br> | |||
<u>Docker Rootlessをシステム全体(/etc/systemd/system/docker.service)として起動することは、User=ディレクティブを使用してもサポートされていないことに注意する。</u><br> | |||
<br> | |||
クライアントにおいて、ソケットパス、または、CLIコンテキストのいずれかを明示的に指定する必要がある。<br> | |||
export DOCKER_HOST=unix://$XDG_RUNTIME_DIR/docker.sock | |||
docker run -d -p 8080:80 nginx | |||
<br> | |||
クライアントにおいて、CLIコンテキストを指定する。<br> | |||
docker context use rootless | |||
docker run -d -p 8080:80 nginx | |||
<br> | |||
==== 特権ポートの公開 ==== | |||
ホスト側において、特権ポート (1024番ポート未満) を公開する場合、 Docker Rootless実行バイナリに対して<code>CAP_NET_BIND_SERVICE</code>を設定する。<br> | |||
sudo setcap cap_net_bind_service=ep <Docker Rootless実行バイナリ> | |||
<br> | |||
/etc/sysctl.confファイル、または、/etc/sysctl.dディレクトリ内のファイルにおいて、非特権ポートの開始ポート番号を指定する。<br> | |||
この設定を行うことにより、システム上で使用可能な非特権ポートの範囲を制御できる。<br> | |||
また、ポート番号を上げることにより、特定のセキュリティポリシーに従い、一般ユーザーが使用できるポートの範囲を制限することができる。<br> | |||
# 非特権ポートの開始ポート番号は0番ポート以降となる | |||
# つまり、全てのポートが非特権ポートとなる | |||
net.ipv4.ip_unprivileged_port_start=0 | |||
<br> | |||
設定を反映する。<br> | |||
sudo sysctl -p または sudo sysctl --system | |||
<br> | |||
==== 注意 ==== | |||
===== DockerとDocker Rootlessの共存 ===== | |||
システム全体のDockerデーモンが既に起動している場合は、無効にする必要がある。<br> | |||
sudo systemctl stop docker.service docker.socket | |||
sudo systemctl disable docker.service docker.socket | |||
<br> | |||
===== ディレクトリパス ===== | |||
Docker Rootlessソケットのパスは、$XDG_RUNTIME_DIR/docker.sockに設定されている。<br> | |||
(環境変数<code>XDG_RUNTIME_DIR</code>は、通常、/run/user/$UIDディレクトリに設定されている)<br> | |||
<br> | |||
データディレクトリは、~/.local/share/dockerに設定されている。<br> | |||
また、データディレクトリはNFS上であってはならない。<br> | |||
<br> | |||
デーモン設定ディレクトリは、~/.config/dockerディレクトリに設定されている。<br> | |||
このディレクトリは、クライアントが使用する~/.dockerとは異なることに注意する。<br> | |||
<br> | |||
===== Docker RootlessとPodmanの共存 ===== | |||
Docker Rootlessのコマンドを実行する前に、環境変数<code>DOCKER_HOST</code>を設定する。<br> | |||
# Docker Rootlessのソケットパスは、$XDG_RUNTIME_DIR/docker.sockである | |||
export DOCKER_HOST="unix://$XDG_RUNTIME_DIR/docker.sock" | |||
# Dockerコマンドの実行 | |||
docker ...略 | |||
<br> | |||
==== Docker Compose ==== | |||
===== Docker Composeとは ===== | |||
Docker Composeとは、複数のコンテナを定義し実行するDockerアプリケーションのためのツールである。<br> | |||
YAMLファイルを使用してDockerコンテナの起動やコンテナ起動時の設定等を行うことができる。<br> | |||
<br> | |||
Docker Composeのメリットを以下に示す。<br> | |||
* 複数のDockerfileを同時に起動することができる。 | |||
* 実行コマンドによる環境の違いを気にせずに済む。(ポートやバージョン等) | |||
* ブリッジネットワークが自動で生成されるため、コンテナ同士の通信が可能となる。 | |||
* インフラ構成の可視化やバージョン管理が完結する。 | |||
<br> | |||
===== Docker Composeのインストール ===== | |||
[https://github.com/docker/compose Docker ComposeのGithub]にアクセスして、Docker Composeの実行バイナリをダウンロードする。<br> | |||
ダウンロードしたファイルに実行権限を付与する。<br> | |||
chmod u+x docker-compose-linux-<アーキテクチャ名> | |||
<br> | |||
Docker CompposeをDocker Rootlessのインストールディレクトリに配置する。<br> | |||
mv docker-compose-linux-<アーキテクチャ名> docker-compose | |||
mv docker-compose <Docker Rootlessのインストールディレクトリ> | |||
<br> | |||
~/.profileファイル等に環境変数<code>PATH</code>を追記する。<br> | |||
vi ~/.profile | |||
<br> | |||
<syntaxhighlight lang="sh"> | |||
# ~/.profileファイル | |||
export PATH="<Docker Composeのインストールディレクトリ>:$PATH" | |||
</syntaxhighlight> | |||
<br> | |||
Docker Composeのインストールが正常に完了しているかどうかを確認する。<br> | |||
docker-compose version | |||
<br> | |||
.ymlファイルに対して<code>docker-compose up -d</code>コマンドを実行する時、以下に示すようなエラーは出力される場合がある<br> | |||
これは、Docker Composeがdocker.sockファイルを見つけられない場合に発生する。<br> | |||
WARNING:root:could not open file '/etc/apt/sources.list.d/mongodb-org-5.0.list' | |||
<br> | |||
この時、~/.profileファイル等に環境変数<code>DOCKER_HOST</code>を設定する必要がある。<br> | |||
<syntaxhighlight lang="sh"> | |||
# ~/.profileファイル | |||
export DOCKER_HOST="unix:///run/user/$UID/docker.sock" | |||
</syntaxhighlight> | |||
<br> | |||
<br><br> | <br><br> | ||
| 145行目: | 375行目: | ||
== 設定 == | == 設定 == | ||
==== 接続方法の設定 ==== | |||
変数<code>DOCKER_HOST</code>は、DockerクライアントにDockerデーモンへの接続方法を指示するためのものである。<br> | |||
変数<code>DOCKER_HOST</code>を設定する場合、<code>docker</code>コマンドを実行するたびに、ローカルホスト上のソケットではなくHTTP APIを使用する。<br> | |||
未設定の場合は、HTTP APIは無効となる。<br> | |||
<br> | |||
例えば、変数<code>DOCKER_HOST</code>を<code>tcp://localhost:2375</code>に設定する時、ローカルホスト上のHTTP APIを監視できるが、<br> | |||
通常は、<code>tcp://0.0.0.0:2375</code>と設定して、リモートサーバ上のAPIを監視する。(この時、ファイアウォールを適切に設定すること)<br> | |||
<br> | <br> | ||
* 方法 1 | |||
*# ~/.profileファイル等に、変数<code>DOCKER_HOST</code>の設定を追記する。<br> | |||
*#: <code>vi ~/.profile</code> | |||
*#: <br> | |||
*#: <code>export DOCKER_HOST='tcp://localhost:2375'</code> | |||
*: <br> | |||
* 方法 2 | |||
*# Dockerデーモンの設定ファイルをバックアップする。 | |||
*#: <code>sudo cp /usr/lib/systemd/system/docker.service /usr/lib/systemd/system/docker_org.service</code> | |||
*#: <br> | |||
*# Dockerデーモンの設定ファイルにある<code>execstart</code>項目を、以下のように編集する。 | |||
*#: <code>sudo vi /usr/lib/systemd/system/docker.service</code> | |||
*#: <br> | |||
*#: # 編集前 | |||
*#: <code>ExecStart=/usr/bin/dockerd --add-runtime oci=/usr/sbin/docker-runc $DOCKER_NETWORK_OPTIONS $DOCKER_OPTS</code> | |||
*#: <br> | |||
*#: # 編集後 | |||
*#: <code>ExecStart=/usr/bin/dockerd --add-runtime oci=/usr/sbin/docker-runc $DOCKER_NETWORK_OPTIONS $DOCKER_OPTS <span style="color:#C00000;">-H fd:// -H tcp://localhost:2375</span></code> | |||
*#: <br> | |||
*# Dockerデーモンの設定を有効化する。 | |||
*#: <code>sudo systemctl daemon-reload</code> | |||
<br> | <br> | ||
==== Dockerイメージおよびコンテナの保存先 ==== | |||
Dockerのイメージおよびコンテナの保存先は、初期設定では、/var/lib/dockerディレクトリに保存される。<br> | |||
もし、保存先を変更する場合は、以下の手順を実施する。<br> | もし、保存先を変更する場合は、以下の手順を実施する。<br> | ||
* /etc/docker/daemon.jsonファイルが存在する場合 | * /etc/docker/daemon.jsonファイルが存在する場合 | ||
| 156行目: | 412行目: | ||
*#: <code>sudo vi /etc/docker/daemon.json</code> | *#: <code>sudo vi /etc/docker/daemon.json</code> | ||
*#: <br> | *#: <br> | ||
*#: <code>/etc/docker/daemon.jsonファイル</code> | |||
*#: <code>{</code> | *#: <code>{</code> | ||
*#: <code> "data-root": "< | *#: <code> # ...略</code> | ||
*#: <code> ...略</code> | *#: <code> "data-root": "<Dockerイメージおよびコンテナの保存先のフルパス>",</code> | ||
*#: <code> # ...略</code> | |||
*#: <code>}</code> | *#: <code>}</code> | ||
*: <br> | |||
* /etc/docker/daemon.jsonファイルが存在しない場合 | * /etc/docker/daemon.jsonファイルが存在しない場合 | ||
*# Dockerデーモンの設定ファイルをバックアップする。 | *# Dockerデーモンの設定ファイルをバックアップする。 | ||
| 175行目: | 434行目: | ||
*# Dockerデーモンの設定を有効化する。 | *# Dockerデーモンの設定を有効化する。 | ||
*#: <code>sudo systemctl daemon-reload</code> | *#: <code>sudo systemctl daemon-reload</code> | ||
<br><br> | <br><br> | ||
| 375行目: | 486行目: | ||
<br><br> | <br><br> | ||
== | == Docker Compose == | ||
==== | ==== Docker Hubの登録 ==== | ||
# [https://hub.docker.com/ Docker Hub]にアクセスして、新規登録またはサインインする。<br> | |||
# サインイン後、右上にあるアバターを選択して、[My Account]を選択する。 | |||
# [Security]タブを選択して、[New Access Token]を選択する。 | |||
# 任意のトークンの説明を入力する。<br>これは、トークンのユースケースまたは目的を示すものを入力する。 | |||
# アクセス権限を設定する。<br><br>アクセス権限は、リポジトリに制限を設定するスコープである。<br>例えば、読み取りおよび書き込み権限の場合、自動化パイプラインでイメージを構築して、それをリポジトリにプッシュできる。<br><u>ただし、リポジトリを削除することはできない。</u> | |||
# [Generate]を選択して、画面に表示されるトークンをコピーして保存する。<br>この画面を閉じた後は、トークンを取得できなくなることに注意する。 | |||
<br> | <br> | ||
Docker Hubに登録する。<br> | |||
docker login -u <Docker Hubのユーザ名> または docker login --username <Docker Hubのユーザ名> # 直後にパスワードを入力する | |||
# | |||
<br> | <br> | ||
正常に登録される場合、~/.docker/config.jsonファイルが自動的に生成される。<br> | |||
<br> | <br> | ||
詳細を知りたい場合は、[https://docs.docker.com/security/for-developers/access-tokens/ Dockerの公式Webサイト]を参照すること。<br> | |||
: | |||
<br> | |||
<br><br> | <br><br> | ||
| 493行目: | 508行目: | ||
chmod 755 dockerfile docker-compose.yml | chmod 755 dockerfile docker-compose.yml | ||
<br> | <br> | ||
==== | ==== Systemdエラー ==== | ||
openSUSEコンテナをDockerコンテナとして動作する時、以下のようなエラーが出力されてsystemdが起動できない。<br> | openSUSEコンテナをDockerコンテナとして動作する時、以下のようなエラーが出力されてsystemdが起動できない。<br> | ||
Failed to connect to bus: No such file or directory. | Failed to connect to bus: No such file or directory. | ||
| 539行目: | 554行目: | ||
openSUSEコンテナにおいて、systemctlコマンドが実行できるかどうかを確認するには、以下のコマンドを実行する。<br> | openSUSEコンテナにおいて、systemctlコマンドが実行できるかどうかを確認するには、以下のコマンドを実行する。<br> | ||
systemctl list-units | systemctl list-units | ||
<br> | |||
==== Systemdサービスのサポート ==== | |||
[https://registry.opensuse.org/cgi-bin/cooverview openSUSEコンテナリポジトリ]で公開されているコンテナイメージは、containers-systemdパッケージがインストールされている。<br> | |||
例えば、Systemdサービスを使用してNginXコンテナを設定して、自動的に起動するためのSystemdサービスファイルとSysconfigファイルが含まれている。<br> | |||
<br><br> | <br><br> | ||
__FORCETOC__ | __FORCETOC__ | ||
[[カテゴリ: | [[カテゴリ:RHEL]][[カテゴリ:SUSE]][[カテゴリ:Raspberry_Pi]][[カテゴリ:PinePhone]][[カテゴリ:Web]][[カテゴリ:コンテナ]] | ||