Dockerとは?
概要
Dockerは、ソフトウェアのコンテナ化仮想技術を利用してアプリケーションの開発環境や実行環境と提供するためのツールです。Dockerは従来の仮想マシン(VM)に比べていくつかの重要な利点を持っています。
まずパフォーマンスの面ですが、従来のVM(VirtualBoxなど)はハイパーバイザー上で複数のオペレーティングシステムを動作させるため、リソース消費が大きくなります。一方、DockerコンテナはホストOSのカーネルを共有するため、起動時間が速くリソース使用も効率的で迅速な起動が可能です。
また管理の簡便さについてですが、Dockerはコンテナのライフサイクル管理、ネットワーキング、ボリューム管理を簡素化するためのツールを提供しています。これにより、複雑なアプリケーションを簡単にデプロイし管理すること(インフラのIac化)ができます。
それでは広く利用されているDockerのコマンドについて解説していこうと思います。本記事ではDockerライフサイクルをベースによく使うコマンドを掲載してあります。
Dockerコマンドを覚えるコツ
Dockerコマンドを理解するためにはDockerのライフサイクルを理解することが重要です。Dockerのライフサイクルは、コンテナの生成から削除までの一連のプロセスを指しますが、ざっくり言うとDockerイメージの取り扱いとDockerコンテナの取り扱いの流れを指します。下図はこちらに掲載されているDockerのライフサイクル図を引用しています。この図と記載されているコマンド(dokcer 〇〇)を理解しておくと後述するコマンドの理解がスムーズになると思います。
Programming Self-Study Notebook, Dockerコンテナのステータスとライフサイクル
また、Dockerを理解するために重要な概念にDockerのネットワークとボリュームがあります。本記事ではコマンドだけ紹介していますが、コンテナ間の連携(例えばwebサーバーとDBサーバーの連携)やコンテナ内で扱ったデータの永続性を実現する上で重要です。この概念についてはまた別の記事で紹介します。
新旧コマンドの記述
以前のDockerコマンドではdocker ps
やdokcer rm
のように短い記述でコマンド実行ができましたが、新体系のコマンドでは操作する対象を明確する必要があります。
例えばdocker ps
はdocker image ps
かdocker container ps
と記述する必要があり、docker rm
はdocker container rm
のように記述します。ちなみにdocker rm
はdockerコンテナの削除コマンドであり、dockerイメージの削除は旧コマンドはdocker rmi
で、新コマンドはdocker image rm
になります。
一見すると旧コマンドの方が便利に思えますが、慣れれば対象が明確になったコマンドも使いやすくなりますし、今後のアップデートも新コマンドが中心になると予想されます。特別な理由がない限りは新コマンドに慣れるようにした方がよいと思います!
Dockerコマンドの紹介
コンテナ管理
コンテナの一覧表示
コンテナ一覧を表示するためのコマンドは下記になります。
# 起動中のコンテナを確認
docker container ps
# 全てのコンテナを確認
docker container ps -a
コンテナ起動と実行中のコンテナでコマンド実行
新しいコンテナを作成し、指定されたイメージからそのコンテナを起動します。
5行目の-itはbashでの入力を受け付けるためのオプションになります。-iだけだと見た目が簡素な表示になって今いますが、-tを加えて-itとすることでいつものプロンプトでコンテナを操作することができます。
# 起動の基本パターン
docker container run [OPTIONS] IMAGE [COMMAND] [ARG...]
# 実行の基本パターン
docker container exec [OPTIONS] CONTAINER COMMAND [ARG...]
# コンテナ起動後、bash実行
docker container run -it IMAGE [COMMAND] [ARG...]
# 起動済みコンテナに入り、bash実行
docker container exec -it CONTAINER COMMAND [ARG...]
コンテナの開始、停止、再起動
コンテナの開始、停止、再起動は下記のコマンドで実施します。なお、コンテナを指定する際のIDは重複していなければ先頭の数文字を指定するだけでも動作することが可能です。
docker container start [CONTAINER]
docker container stop [CONTAINER]
docker container restart [CONTAINER]
# コンテナ全停止
docker container stop $(docker container ls -aq)
コンテナの削除
コンテナの削除はコンテナを停止した状態でないとできませんが、-fオプションで強制削除が可能です。
# コンテナの削除
docker container rm [CONTAINER]
# コンテナの強制削除
docker container rm -r [CONTAINER]
# コンテナの全削除
docker container rm $(docker container ls -aq)
コンテナのログ表示
コンテナのログを表示するコマンドです。
# 通常のログ表示
docker container logs [CONTAINER]
# 詳細のログ表示
docker container logs --details [CONTAINER]
イメージ管理
イメージの一覧表示
pull済のイメージを一覧で表示します。
docker image ls
イメージの取得
イメージの取得は2パターンあります。Docker Hubなどのレジストリからイメージをプルする方法とDockerfileで定義した独自のイメージを作成する方法があります。
# イメージのプル(ダウンロード)
docker image pull [IMAGE]
# イメージの作成(Dokcerfileが必要)
docker image build [OPTIONS] PATH
イメージの削除
イメージの削除はコンテナを削除しないと実行できません。もし強制削除したい場合はコンテナの削除と同様に-fオプションで実施できます。
# イメージの削除
docker image rm [IMAGE]
# イメージの強制削除
docker image rm -f [IMAGE]
# イメージの全削除
docker image rm $(docker images -q)
ネットワーク管理
ネットワーク一覧表示
Dockerのネットワーク一覧を表示します。
docker network ls
ネットワーク作成
新しいネットワークを作成します。デフォルトではブリッジを作成します。
docker network create [OPTIONS]
ネットワークの詳細情報表示
指定したネットワークの情報を確認します。docker-composeなどでコンテナ間の連携を確認する場合などに使用することが多いと思います。
docker network inspect [NETWORK]
ボリューム管理
ボリュームの一覧表示
ボリュームの一覧を確認します。
docker volume ls
新しいボリュームの作成
新しいボリュームを作成します。
docker volume create [OPTIONS] [VOLUME]
ボリュームの詳細情報表示
指定したボリュームの詳細情報を表示します。
docker volume inspect [VOLUME]
ボリュームの削除
不要なボリュームを削除します。
docker volume rm [VOLUME]
コンテナ間連携
docker-composeの開始
docker-compose.ymlに記述されたコンテナを作成します。
docker-compose up
docker-composeの停止&削除
docker-compose.ymlに記述されたコンテナを削除します。
docker-compose down
まとめ
本記事ではよく使うDockerコマンドを紹介しました。あくまである程度の概念を知っている方向けになっているので、Dockerの概念(ボリューム、ネットワークなど)については別記事でチェックしてみてくださいね!