Docker完全に理解した

2022年01月07日 金曜日


【この記事を書いた人】
y-morimoto

九州支社技術部(九州・中四国事業部)所属。自作パソコン好きで、ハードウェア選定の仕事を与えると喜ぶ。最近は何でもコンテナにしたい教に入信し、コンテナ化の機会を虎視眈々と狙っている。

「Docker完全に理解した」のイメージ

Docker完全に理解した?

ということで、Docker完全に理解したので、自分なりの「これからDockerでコンテナ始める時のポイント」をいくつかご紹介したいと思います。

申し遅れましたが、九州支社技術部(九州・中四国事業部)所属のy-morimotoと申します。
自作パソコン好きをこじらせてIIJに入社し、ハードウェア選定を生きがいに日々業務に邁進しております。
最近は、Dockerと運命の出会いを果たし、その便利さに大変感銘を受けまして、これからコンテナを始められる方の糧になればと思い、本記事を寄稿させて頂きます。

ポイント1.いきなりDockerfileを作らない

Dockerfile to Image to Container

いきりな作ろうとすると、おそらく何度もビルド待ちする事になって、ウンザリする事まちがいありません。

では、どうするかですが、

  1. 「docker run -it almalinux:8」等でベースコンテナ起動する
  2. コマンド入力で構築作業をトライアンドエラーして手順をまとめる
  3. 出来上がった手順を元にDockerfileを作る

こうする事で、今までと同じコマンド入力で構築作業が出来るので、とてもコンテナ化がはかどるハズです。

また、この時にトライアンドエラーで致命的な失敗をしても、もう一度「docker run -it almalinux:8」とするだけで、すぐに初期状態からやり直せるのは、コンテナだからこその嬉しいポイントです。
あとは、うまくいった所で「docker commit」すれば、その時点でコンテナイメージ化できるので、そこからさらにトライアンドエラーするといった事もできます。

ポイント2.複数ホスト利用時はDocker Swarmをとりあえず有効にする

swarm

複数ホスト時は、Docker Swarmのオーバーレイネットワーク機能が非常に便利です。

既存のネットワーク環境をあまり気にせずに、お隣のサーバのコンテナと独立したネットワークで通信できるのは、非常に使い勝手が良いです。

なお、Docker Swarmのメイン機能である「docker stack deploy」については、最初は使わなくて良いと思っています。
最初は「docker run」で次に「docker compose」最後に「docker stack deploy」と段階を踏むのが良いでしょう。
ただ、その先に待つのは「なにもわからない」かもしれませんが…。

ポイント3.k8s環境を作ろうとしない

k8s

まずはシンプルに始めるが吉です。

環境の準備でつまずいて、肝心の快適なコンテナライフを始められないのでは本末転倒です。
DockerのインストールとSwarmの有効化だけなら、非常にお手軽に始められます。

例えばインストールしたてのAlmaLinux 8であれば

$ dnf install -y yum-utils
$ yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
$ dnf install -y docker-ce
$ systemctl start docker

でDockerのインストールと起動は完了し、どこか1つのホストで「docker swarm init」それ以外のホストで「docker swarm join」すればSwarmの構築も完了します。

ポイント4.試験用のコマンドは別コンテナに分けられる

test

試験用のコマンドが使いたい場合、コンテナにあらかじめ含めておく形をとりがちですが、含めなくても済むケースがあります。

例えばtcpdumpしたい際に、対象のコンテナ(仮にrun-box)があったとすると、それにtcpdumpコマンドを含めておかないと「docker exec run-box tcpdump」は実行できません。
しかし、tcpdumpコマンドが使えるコンテナイメージ(仮にdbgtool)を別途準備して「docker run net container:run-box dbgtool tcpdump」とする事で、run-boxコンテナにtcpdumpコマンドが含まれて無くても、dbgtoolイメージから起動したコンテナでrun-boxのtcpdump調査ができます。

また、試験用のコマンドの追加が必要になった際もdbgtoolコンテナイメージに追加すれば良いので、run-boxコンテナは一切触れずに済むのも嬉しい点です。

ポイント5.Docker Composeはpluginでインストールする

plugin

pluginの方が簡単で、環境依存にも悩まされずに済む場合が多いのでオススメです。

具体的な手順は、Ciffelia様のページ(Docker Compose v2が正式リリースされたのでインストールしてみる)などが参考になるかと思います。

なお、WEB検索するとdocker-composeコマンドをあの手この手で頑張ってインストールする方法がよくひっかかりますが、いにしえの方法です。

ポイント6.リモートのDocker操作は「-H ssh://host」オプションや「docker context (ssh://host)」を使う

remote control

目的のホストにSSH接続したうえで、dockerコマンド実行する必要はありません。

dockerコマンドに「-H ssh://host」をオプションにつけて実行すれば、そのホストに対して操作することができます。
毎回オプションを入力するのが面倒ならaliasに登録してしまうのも良いです。

また、クライアントPCはdocker-ce-cliのみインストールしておいて、Dockerサービスは全てサーバというスタイルも可能です。

なお、SSH経由のDocker操作は、事前にDockerホストへSSH鍵認証にてパスワード無しで接続できるようにする必要があるのと、ログインアカウントでdockerコマンドが使えるようにdockerグループに追加しておく必要があるので、その点は注意が必要です。
あとは、どこか踏み台サーバ経由になる場合も、裏は単なるSSH接続なので「.ssh/config」でよしなにProxyCommandを設定すればOKです。

とりあえずこのくらいで

といった感じで、他にも沢山あったような気がしますが、とりあえずこのあたりで…。
これからDockerを触ってみようと考えている方は、よかったら是非お試しください。

y-morimoto

2022年01月07日 金曜日

九州支社技術部(九州・中四国事業部)所属。自作パソコン好きで、ハードウェア選定の仕事を与えると喜ぶ。最近は何でもコンテナにしたい教に入信し、コンテナ化の機会を虎視眈々と狙っている。

Related
関連記事