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:ビルド時に環境変数を設定します