Docker の紹介、基本的な概念について#
1.1 Docker は主にイメージとコンテナで構成されています#
イメージ(Image): Docker イメージはテンプレートのようなものであり、ファイルシステムのようなものです。
コンテナ(Container): コンテナはイメージを使用して作成されます。イメージとコンテナはオブジェクト指向のクラスとインスタンスのようなものです。コンテナは作成、起動、停止、削除などが可能です。
レポジトリ(Repository): レポジトリはイメージを保存する場所であり、プライベートレポジトリとパブリックレポジトリに分かれています。Git のようなものです。
1.2 Docker の動作原理#
Docker はクライアント - サーバー構造のシステムであり、Docker のデーモンプロセスはホスト上で実行され、クライアントからの要求をソケット経由で受け取ります。Docker サーバーは Docker クライアントからの命令を実行します。
一. Mac システムでの Docker のインストール#
1.1 homebrew の cask は Docker for Mac をサポートしているため、以下のコマンドで直接インストールできます: brew cask install docker
1.2 または公式ウェブサイトから直接ダウンロードすることもできます: https://download.docker.com/mac/stable/Docker.dmg
1.3 Docker の参考ドキュメント: https://docs.docker.com
1.4 Docker Hub でイメージのソースアドレスを検索できます: https://hub.docker.com
二. Docker の使用方法#
1.1 バージョンの確認#
docker --version
docker-compose --version
docker-machine --version
1.2 Docker システムの情報を表示(イメージやコンテナの数など)#
docker info
1.3 ヘルプコマンド#
docker help
1.4 CPU の状態を表示#
docker stats
三. Docker の基本的なコマンド#
イメージ関連のコマンド:
1.1 利用可能なイメージのバージョンを表示(例: nginx)#
docker search nginx
1.2 イメージをダウンロード#
docker pull nginx:latest #(:の後にイメージのバージョンを指定)
1.3 nginx サーバーを実行#
docker run -d -p 81:80 --name webserver nginx
オプション:
#--name webserver: コンテナの名前、コンテナを区別するために使用
#-p 81:80: ポートマッピング、ローカルの81ポートをコンテナの80ポートにマッピング
#-v ~/nginx/html:/usr/share/nginx/html: ボリュームのマウント(読み取り専用/書き込み可能)、ホストのプロジェクトのディレクトリをコンテナのディレクトリにマウントします。デフォルトでは読み取り専用で、コンテナ内では変更できません。
#-d: コンテナをバックグラウンドで実行するための設定
#-it: インタラクティブモードで実行し、コンテナ内の内容を表示するための設定
#-P: ランダムなポート
#-e: 環境変数の設定
注意:バックグラウンドで実行するためには、前面で実行するプロセスが必要です。Docker はアプリケーションがないことを検出すると自動的に停止します。
重要:ボリュームのマウントは、具名 / 匿名 / 指定パスのマウントに分けられます。コンテナのボリュームマウントを使用すると、データの共有、コンテナの永続化、同期操作が可能になります。docker volume コマンドを使用してボリュームの状態を表示できます。volumes-from を使用して複数のコンテナ間でデータを共有することもできます。
1.4 nginx サーバーを停止#
docker stop webserver(コンテナID)
1.5 nginx サーバーを削除#
docker rm webserver
1.6 nginx サーバーを起動 / 再起動#
docker start/restart webserver
1.7 すべてのイメージを一覧表示(リポジトリ名、タグ、イメージ ID、作成日時、使用スペースを含む)#
docker images ls
説明:
REPOSITORY: イメージのリポジトリ
TAG: イメージのタグ
IMAGE ID: イメージのID
CREATED: イメージの作成日時
SIZE: イメージのサイズ
オプション:
-a: すべてのイメージを表示
-q: イメージのIDのみ表示
注意:イメージ ID は一意の識別子であり、1 つのイメージに複数のタグが付けられることがあります。
1.8 イメージ、コンテナ、ボリュームの使用スペースを表示#
docker system df
1.9 イメージを削除#
指定のイメージ:
docker rmi [イメージ名/イメージの短いID/イメージの長いID/イメージのハッシュ]
複数のイメージ:
docker rmi イメージID イメージID イメージID
すべてのイメージ:
docker rmi $(docker images -aq)
2.0 docker images ls コマンドを使用して、すべてのリポジトリ名が redis のイメージを削除#
docker rmi $(docker images ls -q redis)
2.1 イメージの実行履歴を表示#
docker history イメージID
コンテナ関連のコマンド
1.1 コンテナの一覧を表示#
docker ps
オプション:
-a: 実行中でないコンテナも表示
-l: 最近作成されたコンテナのみ表示
-n: 最近作成されたn個のコンテナを表示
-q: コンテナのIDのみ表示
1.2 コンテナに入る#
docker exec -it [コンテナ名] /bin/bash
docker atthch コンテナID
違い: docker exec は新しいターミナルを開いてコンテナに入り、操作ができます。docker attach は実行中のコンテナのターミナルに入り、新しいプロセスは起動しません。
1.3 コンテナから退出#
コンテナを停止してホストに戻る
exit
コンテナを停止せずに退出する
ctrl+p+q
1.4 コンテナを削除#
指定のコンテナ:
docker rm [コンテナID]
複数のコンテナ:
docker rm コンテナID コンテナID コンテナID
すべてのコンテナ:
docker rm $(docker ps -aq)
docker ps -a -q|xargs docker rm
注意:実行中のコンテナを削除することはできません。実行中のコンテナを削除するには、-f オプションを追加する必要があります。docker rm -f コンテナ ID
1.5 コンテナを起動 / 再起動#
docker start/restart コンテナID
1.6 コンテナを停止 / 強制停止#
docker stop/kill コンテナID
1.7 コンテナのログを表示#
docker logs -f -t --tail 100 コンテナID
#--tailの後に表示する行数を指定する必要があります
1.8 コンテナ内のプロセス情報を表示#
docker top コンテナID
1.9 コンテナのメタデータを表示(重要なコマンド)#
docker inspect コンテナID
2.0 コンテナからデータをホストにコピーする#
docker cp コンテナID:コンテナ内パス ホストパス
四. Dockerfile の命令#
FROM: ベースイメージ、すべてはここから始まる
MAINTAINER: イメージの作成者 名前<メールアドレス>
RUN: イメージのビルドに必要なコマンドを実行
ADD: ステップ、コンテンツの追加
WORKDIR: イメージの作業ディレクトリ
VOLUME: マウントするディレクトリ
EXPOST: ポートの設定
CMD: コンテナの起動時に実行するコマンドを指定します。最後のコマンドのみが有効で、置き換えることができます。
ENTRYPOINT: コンテナの起動時に実行するコマンドを指定します。コマンドを追加することもできます。
ONBUILD: 継承されたDockerfileをビルドするときに実行されます。
COPY: ADDと同様にファイルをイメージにコピーします。
ENV: ビルド時に環境変数を設定します。