Docker
Dockerとは
-
Docker社が開発している、コンテナ型の仮想環境を作成、配布、実行するためのプラットフォーム(
https://www.docker.com/why-docker
)
-
仮想環境によりWindowsの中でLinuxを動かせる
- (Hyper-V 上で動く Linux の上でコンテナを作成している)
- サービスのサーバーはLinuxが一般的。開発環境と本番環境の環境差異を軽減するのに役に立つ
-
仮想環境によりWindowsの中でLinuxを動かせる
- DockerfileやDockerイメージなどを利用してコンテナを作成・管理する
Dockerを使う利点
-
docker
コマンドでコンテナの作成や削除などを簡単に行える-
コンテナを入れ替えることで開発環境を簡単に動かせる
- ゲームのカセット(ソフト)みたいなイメージ
-
コンテナを入れ替えることで開発環境を簡単に動かせる
-
構築環境をコードで管理できる
- どこでもだれでも同じ環境が作れる
- 作成した環境を配布しやすい
-
冪等性が保証されていてスクラップ&ビルドが容易にできる
-
冪等性:何度やっても同じように動くこと
- 冪等である:何度起動しても同じ地点から同じアイテムをもってスタートする
- 冪等でない:起動したらアイテムがなかったり場所が違ったりする
-
冪等性:何度やっても同じように動くこと
Dockerを構成する要素
Docker クライアント
- Docker(デーモン)を操作するのに利用する
-
ユーザからの
docker
コマンドを受け付けると、Dockerデーモンと通信し、応答を返す - クライアントとデーモンは同じシステム上でも実行できる。リモート上のデーモンに接続することも可能
Docker Host
Docker デーモン(daemon)
- ホスト上で動く
- コンテナを起動したり管理する
-
デーモンとは
-
裏方で仕事が来るのを待ち構えているプログラム
- ftpd,sshd,httpdの末尾dはdaemonのd
- mailer-daemonが有名。存在しないメアドに送信したら「そんなメアドないよ」と教えてくれるもの
- 悪魔( demon )じゃないではなく守護神( daemon )の意
-
裏方で仕事が来るのを待ち構えているプログラム
コンテナ
- アプリケーションと実行環境本体
- 実行・停止・削除など様々な操作ができる
イメージ
- コンテナを作成するために使われる、読み込み専用のテンプレート
- イメージからコンテナを作る、またコンテナからイメージを作ることもできる
レジストリ
- イメージを保存・管理するリポジトリ
-
既存のイメージをPULLしてローカル環境で使ったり、自分のイメージをPUSHして共有したりする
Docker Hub
- 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 コンピューティングリソースにデータを転送する際には、コスト無しで無制限の帯域幅を得ることができます。
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 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でよく使うオプション
オプション | 概要 |
-it | 対話モード&ログイン(コンテナ内で作業したいとき) |
-e | 環境変数を設定 |
-d | バックグラウンド起動 |
-p | ホストとコンテナ間のポートをマッピング |
-v | ホストとコンテナ間のディレクトリをマッピング |
コマンド・オプションのユースケース
コンテナ起動時にコンテナに入る
- 抜けるときは Ctrl-C か exit
- コンテナから出るとコンテナは停止する
起動中コンテナの操作
- execコマンド
起動中コンテナに入る
- Dockerfileに書かれているOSで起動していることがわかる