2022年4月現在、Dockerとの付き合い方が未だによくわからない件

もちろん仕事でDockerは使っています。
主に後輩や若い子主導で採用することが多いのですが、いまいち付き合い方がわからない。
私が抱えている仕事やシステムによるものかとも思っているのですが、まぁDockerのことをあまり勉強していないためかなとも思っています。

# とある日の会社の私のPC

同時起動していたプロセスを思い出してみました。
立ち上げすぎ。
基本的に一度立ち上げるとよっぽどのことがない限り消さないという性分です。

## 開発環境

- 案件A（VM A1とVM A2は、本番では設置場所が異なり、互いに連携している）
    - VM A1
        - VirtualBox + Vagrant + chef
        - CentOS 7 + Apache + PHP 7.0 + MySQL 5.7
        - VirtualHost 4つ
    - VM A2
        - VirtualBox + Vagrant + chef
        - CentOS 6 + Apache + PHP 7.0 + MySQL 5.7
        - VirtualHost 4つ
- 案件B（Docker on Linuxで構築）
    - VM B1
        - VirtualBox + Vagrant + Ansible + Docker
        - Apache + PHP 7.2 + MySQL 5.7
        - VirtualHost 1つ
- 案件C（Docker on Linuxで構築）
    - VM C1
        - VirtualBox + Vagrant + Ansible + Docker
        - Nginx + PHP 8 + MySQL 8
        - システム2つを起動するコンテナを切り替えながら開発

## ウェブブラウザ

ブラウザはFirefox、Chrome2つ、Vivaldi。
基本的に見た目が異なっていれば操作ミスを減らせるだろうという考えでブラウザ自体を使い分けています。
EdgeとOperaも入れています。
あと時々IEも使っています。

- Chromeは案件ごとにウィンドウを分けて、主、案件A用、案件C用、人材採用系用、個別アカウントが発行されている案件B用。
    - メッセンジャー用のタブが7つ。使い分けている。閉じるのめんどくさいので、タブは増える一方。定期的に整理しています。
    - というより、会社はChatworkだけど、クライアントによってSlackだったり、Teamsだったり、使用されるツールやアカウントを指定されるので使い分けるのがかなり面倒なのと、通知が超絶鬱陶しいのでChatwork以外の通知はすべて切っています。（ネットワークやってると右下に色々表示していたりするので）
- Firefoxは主に会社業務用。
- Vivaldiはプライベートアカウント用。

別の会社に行った先輩はGmailだけでタブが数十個、ラベルやグループごとに分けていると言っていました。

## それ以外

- PhpStormのウィンドウが最大で6つ。
- Visual Studio Codeのウィンドウが1～2つ。
- Gitツールのウィンドウが最大で5つ。
- エクスプローラは無数。
- 案件ごとのメモ用のテキストエディタ（Gvim、サクラエディタ）のウィンドウが3～6つ。
- Office関連のウィンドウがそれなり。
- メーラー。
- ファイル転送ソフト。
- 差分チェックツール。
- SSHやシェル、ターミナルウィンドウがいっぱい。
- たまにAndroid Studioが起動することがある不思議。

## 補足

PC移行が面倒なのと、これ以上の仕事を効率化して更に仕事ができると思われると嫌なので、あえて移行していません。
つまり言い訳のためです。

使っているPCはWindows 10。筐体は2016年もの。メモリは24GBぐらいだったかな。HDD。
動作はもっさりしていますが、不便とは思っていません。

これが限界ということにしています。
よっぽど言われない限りはこれで行きます。
物理的な制限は重要だと思っています。

# Dockerとの付き合い方がわからない件

Dockerの記事を見ているとMacやWindows上に直接コンテナを立ち上げているものを見ますが、まずこの仕事環境でDockerとどう付き合ったらいいのかわからないというのがあります。
VMでLinuxを構築し、その上にDockerをインストールして、そこでコンテナを起動するという対応を後輩がしたので、それを踏襲しているのですが、これが正攻法なんでしょうか。

特に歴史あるシステムの保守や追加開発をしている案件Aとかは、システムの設定ファイルをVirtualHost名に依存して構築しているというのもあって、Dockerに移行できるか？という疑問もあります。

確かに割りと新しい案件CとかはCI/CDでデプロイする仕組みがあったりして、デプロイが楽だったりはします。

他社から引き継いだ？ような案件Bとかだと、そもそもMacで開発すること前提でいろいろなものが組まれていたり、私のような複数の案件を横断的に開発しているような人間にはすぐに構築できない感じになっていたりするので、結局問題解決のコストが極端に下がった感じがしないというのがあります。
じゃあMacを使います、というわけにはいかない社内の事情もあります。

# Dockerを使うメリット・デメリット

とはいってもDockerを使うメリットはあります。
指定したコンテナを使えばある程度整った環境がすぐに手に入ります。
これは長年Vagrantでのセットアップに苦労して来た私にとってはメリットとなります。
特にChefやAnsibleで古い環境をセットアップするとすでにリポジトリが消されていたりするので、辛かったりします。

逆にDockerを使うことのデメリットは、そういった苦労の末に手に入れた環境であることを、新人さんとかにわかってもらえないことかと思います。
それに環境をセットアップするということに疎くなってしまうというのもあるかもしれません。
ソースコードをコンパイルしてインストールしたり、依存関係があったりして、それを解決しなければいけなかったり。
歴史あるシステムをメンテナンスや解析するときほど、その時の問題解決のノウハウが役に立ったりすると思います。

あとはDockerも完璧ではないということです。
以前RustのプログラムをDockerコンテナでコンパイルして、別の環境で動かしたところ、必要なモジュールがないということで実行時エラーとなり、別の環境にコンパイル環境を作って、結局Dockerを使わなかったということもあります。
また、ちょっとしたパラメータ変更をしてもDockerだとコンテナをstop/start、あるいはbuildからやり直さないといけないと、いけないというのがあります。
やりたいのはパラメータを少しづつ変えながらapachectl restartを繰り返したいだけだったりするのに。

単純に私が、環境はOSがあって～という考えから脱却できないというのもあるのかも。

# 結局Dockerを使うのか

使っていくことになると思いますが、使い方を工夫しないと使い物にならないというのが現状です。
あと、私が声を大にして言いたいのはMacとかWindowsとかに依存するような構築はしないでほしいということです。
Linuxに依存するのはまぁいいでしょう。
VMで用意することができますからね。