Docker完全に理解した
2022年01月07日 金曜日
CONTENTS
Docker完全に理解した?
【エンジニア用語解説】
「完全に理解した」
製品を利用をするためのチュートリアルを完了できたという意味。「なにもわからない」
製品が本質的に抱える問題に直面するほど熟知が進んだという意味。「チョットデキル」
同じ製品を自分でも1から作れるという意味。または開発者本人。— 伊藤 祐策(パソコンの大先生) (@ito_yusaku) September 20, 2018
ということで、Docker完全に理解したので、自分なりの「これからDockerでコンテナを始める時のポイント」をいくつかご紹介したいと思います。
申し遅れましたが、九州支社技術部(九州・中四国事業部)所属のy-morimotoと申します。
自作パソコン好きをこじらせてIIJに入社し、ハードウェア選定を生きがいに日々業務に邁進しております。
最近は、Dockerと運命の出会いを果たし、その便利さに大変感銘を受けまして、これからコンテナを始められる方の糧になればと思い、本記事を寄稿させて頂きます。
ポイント1.いきなりDockerfileを作らない
いきりな作ろうとすると、おそらく何度もビルド待ちする事になって、ウンザリする事まちがいありません。
では、どうするかですが、
- 「docker run -it almalinux:8」等でベースコンテナ起動する
- コマンド入力で構築作業をトライアンドエラーして手順をまとめる
- 出来上がった手順を元にDockerfileを作る
こうする事で、今までと同じコマンド入力で構築作業が出来るので、とてもコンテナ化がはかどるハズです。
また、この時にトライアンドエラーで致命的な失敗をしても、もう一度「docker run -it almalinux:8」とするだけで、すぐに初期状態からやり直せるのは、コンテナだからこその嬉しいポイントです。
あとは、うまくいった所で「docker commit」すれば、その時点でコンテナイメージ化できるので、そこからさらにトライアンドエラーするといった事もできます。
ポイント2.複数ホスト利用時はDocker Swarmをとりあえず有効にする
複数ホスト時は、Docker Swarmのオーバーレイネットワーク機能が非常に便利です。
既存のネットワーク環境をあまり気にせずに、お隣のサーバのコンテナと独立したネットワークで通信できるのは、非常に使い勝手が良いです。
なお、Docker Swarmのメイン機能である「docker stack deploy」については、最初は使わなくて良いと思っています。
最初は「docker run」で次に「docker compose」最後に「docker stack deploy」と段階を踏むのが良いでしょう。
ただ、その先に待つのは「なにもわからない」かもしれませんが…。
ポイント3.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.試験用のコマンドは別コンテナに分けられる
試験用のコマンドが使いたい場合、コンテナにあらかじめ含めておく形をとりがちですが、含めなくても済むケースがあります。
例えば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の方が簡単で、環境依存にも悩まされずに済む場合が多いのでオススメです。
具体的な手順は、Ciffelia様のページ(Docker Compose v2が正式リリースされたのでインストールしてみる)などが参考になるかと思います。
なお、WEB検索するとdocker-composeコマンドをあの手この手で頑張ってインストールする方法がよくひっかかりますが、いにしえの方法です。
ポイント6.リモートのDocker操作は「-H ssh://host」オプションや「docker context (ssh://host)」を使う
目的のホストにSSH接続したうえで、dockerコマンド実行する必要はありません。
dockerコマンドに「-H ssh://host」をオプションにつけて実行すれば、そのホストに対して操作することができます。
毎回オプションを入力するのが面倒ならaliasに登録してしまうのも良いです。
また、クライアントPCはdocker-ce-cliのみインストールしておいて、Dockerサービスは全てサーバというスタイルも可能です。
なお、SSH経由のDocker操作は、事前にDockerホストへSSH鍵認証にてパスワード無しで接続できるようにする必要があるのと、ログインアカウントでdockerコマンドが使えるようにdockerグループに追加しておく必要があるので、その点は注意が必要です。
あとは、どこか踏み台サーバ経由になる場合も、裏は単なるSSH接続なので「.ssh/config」でよしなにProxyCommandを設定すればOKです。
とりあえずこのくらいで
といった感じで、他にも沢山あったような気がしますが、とりあえずこのあたりで…。
これからDockerを触ってみようと考えている方は、よかったら是非お試しください。