nakochi’s log

freeeのエンジニア。たまにモデル。

dockerってなに?。

dockerについて

メリット

  • コード化されたファイルを共有することで、どこでも誰でも同じ環境が作れる。
  • 作成した環境を配布しやすい。
  • スクラップ&ビルドが容易にできる。 例えば、開発環境(Windows上)では動いていたけどLinuxで動かなかった、といったケースも、開発工程からDockerを活用していくことで防ぎやすくなります。そして、開発工程の中で使っていた環境をそのまま本番環境に持っていくことも可能なため、環境差分が少なく、環境による問題を減らすことができる。

レイヤー

docker image build [Opt] [filename] [dir]

コマンドを打った時に、それぞれのLayerが作成される。 layerとは各ステップ実行後変更があったファイルをまとめたもの。

Dockerは各stepで変更があったファイル群のみをLayerとして保存する。

コンテナ起動時にDocker imageの中のLayerを積み上げてファイルシステムを構築するので差分があるところのみを再構築していく。

基本的に下記のコマンドの組み合わせ

  • ベースになるイメージを指定 (FROM)
  • イメージのメタ情報の指定(LABEL)
  • アプリケーションの実行に必要なライブラリやツールのインストール (RUN)
  • ローカルにあるファイルを追加 (ADD/COPY)
  • 実行ユーザーの指定 (USER)
  • コンテナ実行時の実行ディレクトリ(WORKDIR)
  • 公開ポートの指定(EXPOSE)
  • コンテナ実行時のコマンドの指定 (CMD/ENTRYPOINT)

タグ

参考

$ docker image tag SOURCE[:Tag] TARGET[:Tag]

大事なこと

認証情報を埋め込んだDocker imageを共有するとインシデントになるのでimageには認証情報を埋め込まない

参考文献

Docker、ボリューム(Volume)について真面目に調べた DockerfileのCMDとENTRYPOINTを改めて解説する

未だ何もわからない。