
「dockerから逃げるな!」
VirtualBoxで十分だろうという思考停止をようやく解除するときが来ました。
dockerを試しに使ってみたので、備忘録として残していきます。
※ちなみに知識についてはすっ飛ばして、実用の部分のみ見ていきます。
docker環境の構築 ~コンテナを作成する前まで~
ダウンロード

「https://www.docker.com/ja-jp/」にアクセスします。

今回はWindows環境で使うので、Windows版を選択します。
インストール

インストーラーを起動し、画面に沿って進めていきます。

インストール完了しました。
起動

「同意する」を選択すると、サブスクリプションサービス契約、Dockerデータ処理契約、およびデータプライバシーポリシーに同意したことになります。
従業員数250名以上、または年間売上1,000万ドル以上の企業でDocker Desktopを商用利用するには、有料サブスクリプション(Pro、Team、またはBusiness)が必要です。サブスクリプションの詳細を見る
ということですが個人使用では関係がないので「Accept」で先に進みます。

アカウントの紐づけは面倒ならSkipで飛ばします。

アンケートもSkipできます。

無事使える状態になりました。
これ以降、コンテナを操作する際はdocker desktopを起動させた状態で作業します。
リソースの保存先
インストーラーの中でインストール先の指定がなかったので、
「Cドライブを圧迫するかも?」と思いました。 ※VirtualBoxで苦労したし。。。
コンテナを本格的に使いだす前に、設定を済ませた方が良いと思うので、
必要に応じてリソースの保存先を変更します。

設定画面に移動します。

赤枠の箇所がリソースの保存先になるので、ここを都合がいいドライブやパスに変更します。

変更したら「Apply & restart」で反映します。

時間がかかるかもと警告されますが、「Yes,move it」で実行します。
※インストール直後であれば何秒もかからないと思います。
docker環境の構築 ~コンテナ周りの作成~
ここからは「Docker Desktop」を起動した状態で、「PowerShell」を使って作業します。
カスタムネットワークの構築
WindowsのホストPCとコンテナ、コンテナとコンテナ間をIPで通信させるようにしたかったので、
カスタムネットワーク環境として構築します。
※ホストPCと同じネットワークにつなぐのは、やや抵抗があったのでカスタムネットワークとして分離しています。意味はないかもしれません。。。
#コンテナは「192.168.10.xxx/24」にし、ネットワーク名は「container-network」で作成します
docker network create --driver bridge --subnet 192.168.10.0/24 --gateway 192.168.10.1 container-network
コンテナの構築
#コンテナは「almalinux」を使うことにし、コンテナイメージをDLします
docker pull almalinux:latest
#コンテナを初期化します
docker run -dit --name alma1 --network container-network --ip 192.168.10.101 almalinux:latest bash
#コンテナ名 :alma1
#使用するカスタムネットワーク :container-network
#IP :192.168.10.101
使うコンテナのDL⇒起動⇒確認とやっていきます。
コンテナ、カスタムネットワークやIPは適当なもので行います。
コンテナを起動しターミナルへ移行
#コンテナの起動
docker start alma1
#ターミナルへ移行 標準入力を受け付け(-i)、ターミナルへ移行(-t)
docker exec -it alma1 bash
execを行ったタイミングでターミナルがコンテナ側に移行します。
コンテナターミナルの終了(脱出)
exit
「PowerShell」のターミナルに戻ります。
その他操作など
dockerネットワークの一覧表示
docker network ls
NETWORK ID NAME DRIVER SCOPE
18ba33844ae5 bridge bridge local
710d298f6318 container-network bridge local
e51210ad0810 host host local
c7b526e43416 none null local
※カスタムネットワークが正しく作れているかの確認などに
コンテナの削除
docker rm [コンテナ名]
カスタムネットワークの削除
docker network rm [カスタムネットワーク名]
提供されているコンテナの確認
上記の手順ではAlmalinuxを使いましたが、もちろん他にもいろんなコンテナがあります。
どんなコンテナがあるのかは、「https://hub.docker.com/」で確認ができます。

「https://hub.docker.com/」にアクセスし、左のメニューからコンテナ一覧画面に移動します。
※コンテナの中身が信用しきれない場合、
ひとまず”Official Image”で公式イメージとされているもので試すのが良いかと思います。

コンテナ一覧ページでどんなコンテナイメージが提供されているか確認ができます。
コンテナの検索
試しに欲しいコンテナイメージが存在するか確認してみます。

almalinuxのコンテナイメージがないかを検索しています。
それでいて"official”のもので絞り込みをしています。

”official”を選択すると検索が行われ、無事almalinuxがヒットしました。

詳細画面に移動するとコンテナのタグが確認できます。
ここのタグは下記のようにコンテナイメージを取得するコマンドで使います。
docker pull [コンテナ名]:[タグ名]
さらに「Tags」タブの先ではそのコマンドまで記載があるので、コピペで行けます。

トラブルシューティング
docker network lsがエラーする
PS C:\Users\xxxxx> docker network ls
error during connect: Get "http://%2F%2F.%2Fpipe%2FdockerDesktopLinuxEngine/v1.48/networks": open //./pipe/dockerDesktopLinuxEngine: The system cannot find the file specified.
Docker Desktopが起動してないと思うので、起動してから実行すれば解決するはず
docker execでエラーする
PS C:\Users\xxxxx> docker exec -it [コンテナ名] bash
OCI runtime exec failed: exec failed: unable to start container process: exec: "bash": executable file not found in $PATH: unknown
コンテナ内に末尾の"bash"にあたるコマンドが存在していないため、
bashが使えるようにコンテナ内で調整するか、存在するコマンドを指定すればOK
VirtualBoxの仮想ゲストが起動しなくなる
どちらも仮想環境構築で使うツールなのか、
dockerを入れてから久々にVirtualboxを使おうとしたら、仮想ゲストが起動しなくなりました。。。
dockerが影響しているかどうかははっきりしないんですが、
前にも発生した下記が起こっていたようです、VirtualBoxを再インストールして解決しました。
まとめ
「いまさらdockerって10年遅いんじゃない?」と思われるかもしれません。
その通り、、、返す言葉もございません。。。
知っている知識だけでなんとかしようと思ってしまうのが悪い癖で、
技術が硬直化しているのは間違いないと実感しています。
そこでちょっとずつ、現在のWeb開発トレンドに追いつけるよう頑張っています。
VirtualBoxがあればいらないんじゃないかと思ってましたが、
使ってみると手軽に環境構築ができて感心しました。
今回使ったのはWindowsなので、用途がVirtualBoxと大差ないんですが、
これをLinux上で動かしたり、Gitとの連携をしたりすることで真価が発揮できるだろうと思いますので、そのあたりも今後試していきたいです。