🚀 ニフティ’s Notion

docker

Docker

Dockerとは

  • Docker社が開発している、コンテナ型の仮想環境を作成、配布、実行するためのプラットフォーム
    • コンテナ技術によりLinux仮想環境を動作可能
      • サービスのサーバーはLinuxが一般的。開発環境と本番環境の環境差異を軽減するのに役に立つ
      💡
      コラム
      Linuxコンテナは、Linuxカーネルとリソース管理機能(cgroups、namespacesなど)を使用して動作する。そのため、 📄 仮想化 で述べた通り、LinuxコンテナをWindowsやmacOSなどの異なるOS上で直接実行することは難しい。
      異なるOS間でシームレスに実行するための方法として、仮想マシン技術が存在し、仮想マシンを提供、実行するためのツールとしてDocker Desktopがある。
    • コンテナを入れ替えることで開発環境を簡単に動かせる
      • ゲームのカセット(ソフト)みたいなイメージ

image block

Dockerを使う利点
  • 構築環境をコードで管理できるので、どこでもだれでも同じ環境が作れる
  • コード化されているため作成した環境を配布しやすい
  • 冪等性 が保証されていてスクラップ&ビルドが容易にできる
    💡
    冪等性とは?
    何度やっても同じように動くこと
    • 冪等である:何度セーブという処理をしても適切に起動する
    • 冪等でない:セーブされる時とセーブされない時がある
Dockerを構成する要素

image block
http://docs.docker.jp/engine/introduction/understanding-docker.html
  • クライアント(Docker クライアント)
    • Docker(デーモン)を操作するのに利用する
    • クライアントとデーモンは同じシステム上でも実行できる
      • リモート上のデーモンに接続することも可能
    • ユーザからのコマンドを受け付けると、Dockerデーモンと通信し、応答を返す
  • Docker Host
    • Docker デーモン( daemon
      • ホスト上で動く
      • コンテナを起動したり管理する
      • デーモンとは
        • 裏方で仕事が来るのを待ち構えているプログラム
          • ftpd,sshd,httpdの末尾dはdaemonのd
    • コンテナ
      • アプリケーションと実行環境本体
      • 実行・開始・停止・移動・削除ができる
    • イメージ
      • コンテナを作成するために使われる、読み込み専用のテンプレート
      • イメージからコンテナを作る、またコンテナからイメージを作る
  • レジストリ
    • イメージを保存・管理するリポジトリ
    • 既存のイメージをPULLしてローカル環境で使ったり、自分のイメージをPUSHして共有したりする
Docker Hub
  • Docker公式のDockerレジストリ
  • 代表的なミドルウェアはすでにイメージ化されているのでそのまま使える
    • 自分用にカスタマイズすることも可能
  • 例えばCentOSのイメージをベースとしてそこにPythonを入れて自分の開発環境イメージを作ったりなど
  • フリーソフトをインストールするのと同じでちゃんと中身を確認してから使いましょう
    • 非公式なimageをrunすると悪意あるプログラムが動くかもしれない。Docker fileはちゃんと確認しましょう
ECR public について
  • AWSで用意されているコンテナレジストリの一種で、Docker Hubと同様にパブリックアクセスが可能なツール
  • dockerhub同様のパブリックなコンテナイメージリポジトリとしてECR Publicがある

制限

  • AWSアカウントユーザはパブリックリポジトリ用に 50 GB/月のストレージを常時無料で利用可能
  • 匿名で (AWS アカウントを使用せずに) 毎月 500 GB のデータを無料でパブリックリポジトリからインターネットに転送可能
  • AWS アカウントにサインアップするか、既存の AWS アカウントで Amazon ECR に認証すると、毎月 5 TB のデータをパブリックリポジトリからインターネットに無料で転送可能
  • パブリックリポジトリから任意の AWS リージョンの AWS コンピューティングリソースにデータを転送する際には、コスト無しで無制限の帯域幅を得ることがでる
Docker Hub におけるダウンロード率制限とは
ユーザーの種類 pull rate limit
非認証ユーザ 100 pull / 6 hour
無料プラン 200 pull / 6 hour
Proプラン 無制限
Teamプラン 無制限
Dockerfileとは?

  • Dockerイメージを作成するための設定ファイル(手順書のようなもの)
    • 例えば「CentOSをベースにして、Apacheを入れて、コンテナ起動時にApacheを立ち上げる」というような環境を定義することができる。
  • docker image build コマンド一つで、Dockerfileに書かれた通りにイメージを作ってくれる
sample
FROM node:16-alpine3.14
WORKDIR /usr/src/app

# モジュールインストール
COPY ./tool ./
RUN npm config set registry "http://registry.npmjs.org/"
RUN npm install
Dockerfileを定義する利点
  • ファイルを配布することで同一の環境を複製でき、常に同じ構成で環境構築することができる
  • ファイルの記述を読むことで、アプリケーション構成や構築手順などの情報を確認することができる
  • ビルドコマンド1つでイメージが生成できるため、構築作業の省力化や作業ミスの低減になる
よく使うDockerfileの命令

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

Appendix

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 [ 操作対象 ] [ 操作内容 ]

旧コマンドを利用する方も多いので、好きな方を使ってください。

コマンドの意味
イメージ一覧表示 docker image ls docker images
コンテナの起動 docker container run docker run
コンテナ一覧表示 docker container ls docker ps
docker container runでよく使うオプション

オプション 概要
-it 対話モード&ログイン(コンテナ内で作業したいとき)
-e 環境変数を設定
-d バックグラウンド起動
-p ホストとコンテナ間のポートをマッピング
-v ホストとコンテナ間のディレクトリをマッピング
コマンド・オプションのユースケース

コンテナ起動時にコンテナに入る
  • 抜けるときは Ctrl-C exit
  • コンテナから出るとコンテナは停止する
    $ docker container run -it httpd /bin/bash
    root@hoge# cat /etc/debian_version
    10.3
    root@hoge#
起動中コンテナの操作
  • exec コマンド
    $ docker container run -d httpd
    $ docker container ls
    $ docker container exec <コンテナ名> /bin/bash -c "cat /etc/debian_version"
起動中コンテナに入る
  • Dockerfileに書かれているOSで起動していることがわかる
    $ docker container exec -it <コンテナ名> /bin/bash
    root@hoge# cat /etc/debian_version
    10.3
    root@hoge#