実務経験者がざっくり教えるDocker入門|hashito
https://zenn.dev/hashito/books/b71929edd95ea2deb8a7 #zenn

こんな感じのBookになりました。

最初に

このドキュメントはいくつかのDockerイメージを作成してきた作者の備忘録であり、実際に実務で利用し悩んだ部分をまとめたものです。
間違っている部分があればコメントやTwitterなどで指摘いただければ嬉しく思います。

Dockerって?

Docker(ドッカー[2])は、コンテナ仮想化を用いてアプリケーションを開発・配置・実行するためのオープンソースソフトウェアあるいはオープンプラットフォームである[3]。
Dockerはコンテナ仮想化を用いたOSレベルの仮想化(英語版)によりアプリケーションを開発・実行環境から隔離し、アプリケーションの素早い提供を可能にする。かつその環境自体をアプリケーションと同じようにコード(イメージ)として管理可能にする[4]。Dockerを開発・テスト・デプロイに用いることで「コードを書く」と「コードが製品として実行される」間の時間的ギャップを大きく短縮できる[5]。
(Wikipedia:Dockerから)

記載されている通りなのですが、一番重要なのが「環境自体をアプリケーションと同じようにコードとして管理可能とする」という部分だと思っています。
プログラムは環境に大きく依存します。この環境を再現したり構築するのに多くの時間が必要になりますが、これをコード化して管理できるということです。

詰まりやすい概念

Dockerでは1プロセスを推奨します。

Dockerを単純な仮想環境だと思って入門したり、Linuxの知識が少ないまま入門するとここで悩んでしまいます。

基本的にDocker内の仮想環境では1環境に1プロセスが基本です。
ですのでDockerでは「SystemD」などの管理環境や「Crontab」など他のプロセスを利用した方法は標準的ではありません。
ところが、単純に利用したいソフトの名前だけで探すとLinuxでの利用方法が出てくるため悩んでしまいます。(特に最初の頃は違いが分からないため苦戦します…)

基本的に貴方が起動したいソフトしか起動させないを心がけてください。

Dockerには何も入っていません

最初に驚くのがsudoなどの標準的なコマンドもインストールされていない事です。
基本的にソフトウェアは何も入っていないと思ってください。
最初の頃は色々と入れて実際のLinuxに近づけて試すと思いますが、なれてくると本当に必要なものが理解できてくると思います。

少しでも軽くするため、少ないソフトで環境を構築できるように心がけましょう。

DockerFile?

DockerFileとはコード化された実行環境です。
単純なテキストファイルの中に、実行するべきOSや必要なソフトウェア、環境変数やFileなどを記載します。
これを構築(build)することによりソフトウェアの実行環境を完全に再現します。

何が便利か?

マルチクラウド

Dockerイメージを使った運用に移行する事により、AWS/GCP/Azureなどのクラウド環境への依存性を大きく減らす事ができます。
例えばAPIをAWS Lambdaで実装していて、これをGCP Cloud FunctionsやAzure Functionsへ移行する場合、結構厄介です。
引数の取り扱いや依存するモジュールやデプロイ方法が異なります。
しかし、Docker ImageにしておくとKubernetesなどで簡単に移行が可能です。

ドキュメントより動くコードを

業務を引き継ぐ場合にも便利です。
ドキュメントで構築方法をどれだけ丁寧に残していたとしても、引き継ぐ場合にかなり問題になります。ドキュメントに抜けがある場合もですが、それ自体を読んで理解する必要があります。

マイクロサービス

環境を小分けにできるため、ソフトウェアを小さく構築することが出来ます。
「ファイルを右から左に移動するだけのプログラム」や「要求をキューに入れるだけのプログラム」プログラムを改修する場合はこれらのプログラムを少しだけ修正すれば問題を解決できるようになります。
また、CPU/メモリなどのリソースも各コンテナ毎に細かく決めることも出来ますし、問題が起きた場合の復旧なども簡単です(Kubernetesなどを利用すれば)

(続き)実務経験者がざっくり教えるDocker入門|hashito
https://zenn.dev/hashito/books/b71929edd95ea2deb8a7 #zenn