はじめに
未経験で入社した会社で開発環境構築でDockerを使用していたのですが、コンテナの扱い方で疑問点が発生したのでクリアにしていきます。
自分が参画したチームは先輩も同期も未経験から入社して1年未満のエンジニアで構成されたチームでしたので、Dockerについて誰も詳しくない状態でした。
今回は、Dockerを学び始めた方や経験が浅い方の参考になれば幸いです。
本記事は主にコンテナの扱いの話で、コンテナの起動方法やコマンドについては解説してません。
今回の疑問点は何か
コンテナを起動したのに使ってないのではないか問題
Dockerを使用したプロジェクトの環境構築で、コンテナを起動したのにローカルのファイルを開いてコードを触っていたので、これってコンテナ内のコードを触るのが正しいんじゃなかったっけ?って思いました。
コンテナ内で作業した方がいいのか?
自分のチームでは、よく「Rubyのバージョンを誰々さんのと同じにすれば動くかも!」「あ、このコードはなんかバージョンの関係で動かなくなる人もいるから書かないでね」って会話があったりしました。
コンテナ内で作業することで、チームメンバー間の環境差異を排除し、開発効率を向上させることができます。環境の一貫性を保つこで、「自分のマシンでは動作する」という問題を避けることができます。
コンテナを利用しない場合、このメリットを活かせなくなるのでコンテナ内で作業した方がいいでしょう。
自分のローカルのコードで作業はコンテナもしくはDockerを利用していると言えるのか?
コンテナを起動しているものの、ローカルで直接コードを編集する行為は、Dockerの一部としてのコンテナ技術を完全に利用しているとは言えないかもしれません。
しかし、以下の点ではある程度Dockerを利用していると言えます。
ボリュームマウント:
コンテナ内の特定のディレクトリとローカルのディレクトリがマウントされている場合、ローカルでの変更がコンテナ内にも反映されるので、この点でコンテナ技術を利用しています。
サービスとの連携:
もしコンテナがいくつかのサービス(データベースやAPIサーバーなど)をホストしていて、ローカルで編集したコードがそれらのサービスと連携する形で動作するのであれば、コンテナ技術を利用していると言えます。
(例えば、ウェブアプリケーションのコードがデータベースコンテナにクエリを送信する場合、これはサービス間の連携です。)
ただし、コンテナ技術の最大の利点の一つである「環境一貫性」は、ローカル環境でのコード編集では完全には享受できなくなります。これは、コードの編集自体はローカルの環境(異なるライブラリやツールのバージョン等)に影響される可能性があるためです。
したがって、Dockerを利用している」と言えるかもしれませんが、メリットをフルに享受しているわけではないと言えます。
まとめ
ただ動作すればいいだけならコンテナに接続しなくてもいいのかも?しれませんが、環境差異をなくせるメリットは強力だと思いますので、基本的にはコンテナ内での作業がいいのかなと思います。
環境構築がスムーズに行うことができて、その後の開発業務で環境について困りごとが減るのはメリットがでかいと思います。
本記事ではコンテナで作業するメリットについてしか記載していないのですが、他にもDockerやコンテナのメリットはあるので、ちゃんと理解した上で扱いたいですね。