🚀 ニフティ’s Notion

Docker

Docker

Dockerとは
image block
  • Docker社が開発している、コンテナ型の仮想環境を作成、配布、実行するためのプラットフォーム( https://www.docker.com/why-docker
    • 仮想環境によりWindowsの中でLinuxを動かせる
      • (Hyper-V 上で動く Linux の上でコンテナを作成している)
      • サービスのサーバーはLinuxが一般的。開発環境と本番環境の環境差異を軽減するのに役に立つ
  • DockerfileやDockerイメージなどを利用してコンテナを作成・管理する
Dockerを使う利点
  • docker コマンドでコンテナの作成や削除などを簡単に行える
    • コンテナを入れ替えることで開発環境を簡単に動かせる
      • ゲームのカセット(ソフト)みたいなイメージ
  • 構築環境をコードで管理できる
    • どこでもだれでも同じ環境が作れる
    • 作成した環境を配布しやすい
  • 冪等性が保証されていてスクラップ&ビルドが容易にできる
    • 冪等性:何度やっても同じように動くこと
      • 冪等である:何度起動しても同じ地点から同じアイテムをもってスタートする
      • 冪等でない:起動したらアイテムがなかったり場所が違ったりする
Dockerを構成する要素
image block
https://docs.docker.jp/engine/introduction/understanding-docker.html
Docker クライアント
  • Docker(デーモン)を操作するのに利用する
  • ユーザからの docker コマンドを受け付けると、Dockerデーモンと通信し、応答を返す
  • クライアントとデーモンは同じシステム上でも実行できる。リモート上のデーモンに接続することも可能
Docker Host

Docker デーモン(daemon)

  • ホスト上で動く
  • コンテナを起動したり管理する
  • デーモンとは
    • 裏方で仕事が来るのを待ち構えているプログラム
      • ftpd,sshd,httpdの末尾dはdaemonのd
      • mailer-daemonが有名。存在しないメアドに送信したら「そんなメアドないよ」と教えてくれるもの
    • 悪魔( demon )じゃないではなく守護神( daemon )の意

コンテナ

  • アプリケーションと実行環境本体
  • 実行・停止・削除など様々な操作ができる

イメージ

  • コンテナを作成するために使われる、読み込み専用のテンプレート
  • イメージからコンテナを作る、またコンテナからイメージを作ることもできる

レジストリ
  • イメージを保存・管理するリポジトリ
  • 既存のイメージをPULLしてローカル環境で使ったり、自分のイメージをPUSHして共有したりする

    Docker Hub

    https://hub.docker.com/

    • Docker公式のDockerレジストリ
    • 代表的なミドルウェアはすでにイメージ化されているのでそのまま使える。自分用にカスタマイズすることも可能
      • 例えばCentOSのイメージをベースとしてそこにPythonを入れて自分の開発環境イメージを作ったりなど
    • フリーソフトをインストールするのと同じでちゃんと中身を確認してから使いましょう
      • 非公式なimageをrunすると悪意あるプログラムが動くかもしれない。Dockerfileはちゃんと確認しましょう
    ECR Publicについて

    https://docs.aws.amazon.com/ja_jp/AmazonECR/latest/public/public-repositories.html

    AWSで用意されているコンテナレジストリの一種で、Docker Hubと同様にパブリックアクセスが可能なツール

    Docker Hub同様のパブリックなコンテナイメージリポジトリとしてECR Publicがある

    制限

    • AWSアカウントユーザはパブリックリポジトリ用に 50 GB/月のストレージを常時無料で利用可能
    • 匿名で (AWS アカウントを使用せずに) 毎月 500 GB のデータを無料でパブリックリポジトリからインターネットに転送可能
    • AWS アカウントにサインアップするか、既存の AWS アカウントで Amazon ECR に認証すると、毎月 5 TB のデータをパブリックリポジトリからインターネットに無料で転送可能
    • パブリックリポジトリから任意の AWS リージョンの AWS コンピューティングリソースにデータを転送する際には、コスト無しで無制限の帯域幅を得ることができます。

    https://aws.amazon.com/jp/ecr/pricing/

    Docker Hub におけるダウンロード率制限とは

    https://matsuand.github.io/docs.docker.jp.onthefly/docker-hub/download-rate-limit/

    ユーザーの種類 pull rate limit
    非認証ユーザ 100 pull / 6 hour
    無料プラン 200 pull / 6 hour
    Proプラン 無制限
    Teamプラン 無制限
Dockerfileとは?
# CentOSをベースに
FROM centos:7

# Apacheをインストール
RUN yum -y update && yum -y install httpd

# コンテナ起動時にApacheを立ち上げる
CMD ["/usr/sbin/apachectl", "-D", "FOREGROUND"]
こういうファイル
  • Dockerイメージを作成するための設定ファイル(手順書のようなもの)
    • 例えば「CentOSをベースにして、Apacheを入れて、コンテナ起動時にApacheを立ち上げる」というような環境を定義することができる。
  • docker image build コマンド一つで、Dockerfileに書かれた通りにイメージを作ってくれる
Dockerfileを定義する利点
  • ファイルを配布することで同一の環境を複製でき、常に同じ構成で環境構築することができる
  • ファイルの記述を読むことで、アプリケーション構成や構築手順などの情報を確認することができる
  • ビルドコマンド1つでイメージが生成できるため、構築作業の省力化や作業ミスの低減になる
よく使うDockerfileの命令

リファレンス

命令 概要
CMD (コンテナ実行時)コマンド実行
FROM ベースイメージの指定
WORKDIR 作業ディレクトリの指定
COPY ファイルやディレクトリの追加
RUN (イメージ作成時)コマンド実行
ENV 環境変数を設定
VOLUME ボリュームを指定

Appendix

Dockerでよく使うコマンド

Docker コマンド リファレンス

コマンド 概要
docker container cp コンテナとローカル間でのファイルコピー
docker container exec 起動中のコンテナでコマンド実行
docker container ls コンテナ一覧表示
docker container rm コンテナの削除
docker container run コンテナの起動
docker container stop コンテナの停止
docker container prune 停止中コンテナの一括削除
docker container logs コンテナのログ表示
docker image ls イメージ一覧

docker container runでよく使うオプション

Docker run リファレンス

オプション 概要
-it 対話モード&ログイン(コンテナ内で作業したいとき)
-e 環境変数を設定
-d バックグラウンド起動
-p ホストとコンテナ間のポートをマッピング
-v ホストとコンテナ間のディレクトリをマッピング
コマンド・オプションのユースケース
コンテナ起動時にコンテナに入る
  • 抜けるときは Ctrl-C か exit
  • コンテナから出るとコンテナは停止する
    image block
起動中コンテナの操作
  • execコマンド
    image block
起動中コンテナに入る
  • Dockerfileに書かれているOSで起動していることがわかる
    image block