今回はDockerを使う上で基本的なコマンドをわかりやすく解説していきます。
この記事はDockerシリーズ第二回目ということで「【Docker①】「Dockerって何が便利なの?」をWebエンジニアが分かりやすく解説!」の続きになるので読んでいない方はまずはこちらを読んでDockerについて知ってから戻ってきてもらうと頭に入りやすいかと思います。
【Docker①】「Dockerって何が便利なの?」をWebエンジニアが分かりやすく解説!
今回の第二回目では
- Dockerイメージ、Dockerfile
- Dockerコマンド
- 各コマンドのフォーマットとよく使うオプション
についてを解説していきます。
今回は実際にDockerを使って動かしてみるのを目標にしています。
この記事を読み終わる頃には自分でDockerコンテナの操作ができるようになっていると思うので是非最後まで読んでみてください。
目次
Dockerイメージ、Dockerfileとは?
コマンドの説明をする前にDockerの概念的な話をします。
コンテナを作成するためには「Dockerイメージ」というものが必要で、そのイメージの設計図が「Dockerfile」というものになります。
そしてDockerfileからDockerイメージを作成する事を「ビルドする」といいます。
分かりやすく建物をコンテナとして例えると、建物の設計図が「Dockerfile」、建物の骨組みが「Dockerイメージ」と考えてもらえると分かりやすいと思います。
Dockerfileの作成方法はまた別の記事で解説予定です。
ちなみに後ほど触れるDockerHubからDockerイメージを取得してくる場合は自分でDockerfileとDockerイメージを作る必要はないです。
基本的なDockerコマンド
ここからはDockerを使う上で最も基本的なコマンドを解説していきます。
DockerHubにログインする
DockerHubにログインするためには「docker login」コマンドを使います。
DockerHubとは、Docker社が運営している世界中の開発者が公開しているDockerイメージを自由に閲覧、検索、ダウンロードできるサービスです。
Dockerレジストリとも呼ばれたりします。
扱いとしてはGitHubと同じで、リポジトリ単位で公開されているイメージをユーザーが自由にpullしたりpushすることができます。
サインインをしなくても全ての機能が無料で利用できますが、一日にpullできるイメージ数に制限がかかってしまいます。
登録は無料ですし、とりあえずサインアップして登録だけでもしておくことをおすすめします。
DockerHubのリンクはこちら
フォーマット
docker login [オプション]
使用例
$ docker login
Authenticating with existing credentials...
Login Succeeded
DockerHubからイメージを取得してくる
DockerHubからDockerイメージを取得してくるには「docker pull」コマンドを使います。
フォーマット
docker pull [オプション] [Dockerイメージ名]
使用例
下記ではDockerHubからcentosのバージョン7を取得しています。
「:」(コロン)の後ろでバージョンを指定します。
$ docker pull centos:7
7: Pulling from library/centos
2d473b07cdd5: Pull complete
Digest: sha256:9d4bcbbb213dfd745b58be38b13b996ebb5ac315fe75711bd618426a630e0987
Status: Downloaded newer image for centos:7
docker.io/library/centos:7
よく使うオプション
オプション | 意味 |
-a | 起動していないコンテナも一緒に一覧化する |
起動中のコンテナ一覧を表示
起動中のコンテナ一覧を表示するには「docker ps」コマンドを使います。
コマンドを叩くと起動中コンテナの情報が一覧化されて表示されます。
Docker v1.13以降のバージョンであれば「docker container ls」でも同じ意味になります。
フォーマット
docker ps [オプション]
使用例
$ docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
60b052df4f73 mysql:5.7 "docker-entrypoint.s…" 25 hours ago Up 25 hours 0.0.0.0:3306->3306/tcp, 33060/tcp db
各カラムの意味は以下の通りです。
CONTAINER NAME | コンテナに振られたユニークなID |
IMAGE | イメージ名 |
COMMAND | コンテナ起動時に与えられたコマンド |
CREATED | コンテナが作成されてからの時間 |
STATUS | コンテナの起動、または停止してからの経過時間 |
PORTS | バインドしているポート |
NAMES | コンテナの名前 (runコマンドの「–name」オプションで指定していればその名前、指定していなければランダムな名前になる) |
よく使うオプション
オプション | 意味 |
-a | 起動していないコンテナも一緒に一覧化する |
-q | コンテナのIDのみを出力 |
-f “name={文字列}” | NAMEカラムに文字列が含まれる、または一致するコンテナを出力 |
Dockerイメージの一覧を表示
自分で作成したDockerイメージやDockerHubから取得したDockerイメージの一覧を確認するには「docker images」コマンドを使います。
コマンドを叩くとローカルに存在するDockerイメージの情報が一覧化されて表示されます。
Docker v1.13以降のバージョンであれば「docker image ls」でも同じ意味になります。
フォーマット
docker images [オプション] [リポジトリ]
使用例
$ docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
centos 7 eeb6ee3f44bd 2 months ago 204MB
コンテナの作成と起動を同時に実行する
指定したイメージからコンテナの作成と起動を同時に実行するには「docker run」コマンドを使います。
イメージの指定には「docker images」で確認できる「IMAGE ID」を指定します。
「コンテナの作成と起動を同時にする」というのがポイントです。
指定されたイメージ名がローカルに存在しなかったら自動的にDockerHubから検索してpullされてから起動されます。
フォーマット
docker run [オプション] [IMAGE ID]
使用例
$ docker run centos:7
Unable to find image 'centos:7' locally
7: Pulling from library/centos
2d473b07cdd5: Pull complete
Digest: sha256:9d4bcbbb213dfd745b58be38b13b996ebb5ac315fe75711bd618426a630e0987
Status: Downloaded newer image for centos:7
よく使うオプション
オプション | 意味 |
-i | コンテナの標準入力をDockerホストの標準入力と接続する。 |
-t | コンテナ内で疑似的な仮想端末を割り当てて、Dockerホストの標準出力と接続する |
-d | プロセスをバックグラウンドで実行する。 |
–name | コンテナに名前をつけられる。 |
–rm | コンテナ停止時に自動的に削除する。 |
起動しているコンテナ内で指定のコマンドを実行する
起動しているコンテナ内で指定のコマンドを実行するには「docker exec」コマンドを使います。
起動していないコンテナに対しては行えないので注意してください。
フォーマット
docker exec [オプション] [CONTAINER NAME または NAMES] [使いたいコマンド]
使用例
コンテナ内のbashに接続する場合はこの様になります。
$ docker exec -it centos bash
[root@871658f6c58c /]#
よく使うオプション
オプション | 意味 |
-i | 指定したコマンドを実行する際、コンテナの標準入力をDockerホストの標準入力と接続する。 |
-t | コンテナ内で疑似的な仮想端末を割り当てて、Dockerホストの標準出力と接続する |
既に作成されているコンテナを起動する
既に作成されているコンテナを起動するには「docker start」コマンドを使います。
コンテナの指定は「docker ps」コマンドで確認できる「CONTAINER ID」または「NAME」で指定します。
前に紹介した「docker run」コマンドと似ていますが両者の違いとして
docker run…コンテナの作成と起動を同時にやる
docker start…既に作成してあるコンテナを起動する
という明確な違いがあるので注意してください。
つまり、ただ単純にコンテナを起動したいときに何も考えずに「docker run」コマンドを使ってしまうと、起動のたびに同じコンテナがどんどん無駄に作成され続けてしまいます。
無駄なコンテナを作りたくない場合は「–rm」オプションをつけましょう。
フォーマット
docker start [オプション] [CONTAINER NAME または NAMES]
使用例
$ docker start 871658f6c58c
871658f6c58c
起動中のコンテナを停止させる
起動中のコンテナを停止させるには「docker stop」コマンドを使います。
イメージの指定は「CONTAINER ID」または「NAME」で指定します。
フォーマット
docker stop [オプション] [CONTAINER NAME または NAMES]
使用例
$ docker stop 871658f6c58c
871658f6c58c
コンテナを再起動する
起動中、または停止中のコンテナに対して再起動をかけるには「docker restart」コマンドを使います。
イメージの指定は「CONTAINER ID」または「NAME」で指定します。
フォーマット
docker restart [オプション] [CONTAINER NAME または NAMES]
使用例
$ docker stop 871658f6c58c
871658f6c58c
停止中のコンテナを削除する
停止中のコンテナを削除するには「docker rm」コマンドを使います。
「-f」オプションを付けると起動中のコンテナも削除することができます。
コンテナを削除してしまうと、その中にあるデータも全て削除されてしまうので注意してください。
フォーマット
docker rm [オプション] [CONTAINER NAME または NAMES]
使用例
$ docker stop 871658f6c58c
871658f6c58c
よく使うオプション
オプション | 意味 |
-f | 起動中のコンテナも削除する |
おわりに
ここまでDockerfile, Dockerイメージ、基礎的なコマンド等について解説してきました。
とりあえずここまでを覚えればコンテナを自分で作成して起動して削除までできると思うので、是非手を動かして体感してみてください。
第三弾はDockerfileの書き方について解説しようと思います。