やること
- Dockerの基本コマンドを使ってDockerに触れてみる。
- 主要なコマンド(イメージの操作、コンテナの操作)を利用してみる。
基本
Dockerの基本であるイメージ取得、コンテナ作成をしてみます。
Dockerイメージ取得
docker image pull gihyodocker/echo:latest
DockerイメージからDockerコンテナを作成する
docker container run -t -p 9000:8080 gihyodocker/echo:latest
- 9000ポートがホスト側。8080ポートがコンテナ側です。
Dockerコンテナ停止
docker container stop $(docker container ls -q)
※ docker container ls -q
で、コンテナのCONTAINER IDを取得します。
主要なコマンド(イメージの操作、コンテナの操作)
docker image build コマンド
DockerfileをもとにDockerイメージを作成します。
docker image build -t 名前空間/イメージ名[:タグ名] Dockerfileのディレクトリパス
-
名前空間
: 他のイメージとの衝突回避の為に付けることを推奨。
オプション | 説明 |
---|---|
-t | 名前をつける。ほぼ必須のオプション。 |
-f | デフォルトのDockerfile以外を利用する場合に使用する。 Dockerfile-test を指定する場合: -f Dockerfile-test
|
--pull |
--pull=true を指定するとdocker image build 時にFROM で指定したベースイメージを強制的に再取得する。latestなどで利用。しかし、実際の運用ではビルド時間的に不利になる為、latestのベースイメージは避けられる傾向にある。 |
docker search コマンド
Docker Hubに登録されているDockerレジストリを検索します。
※Docker Hubとは、Dockerレジストリと呼ばれるたくさんのイメージを集権的に管理する為のDocker社が提供しているホスティングサービスです。
docker search [options] 検索キーワード
オプション | 説明 |
---|---|
--limit | 表示件数の制限。--limit 5 で人気の上位5件が表示される |
docker image pull コマンド
DockerレジストリからDockerイメージをダウンロードします。
docker image pull [options] リポジトリ名[:タグ名]
※タグ名は、Docker Hubに登録されているものを指定します。省略した場合は、デフォルトタグ(latestなど)が利用されます。
docker image ls コマンド
docker image pull
や docker image build
でDockerホストに保持されたイメージを表示します。
docker image ls [options] [リポジトリ名[:タグ名]]
docker image tag コマンド
Dockerタグを付けて、ある特定のイメージIDをもつDockerイメージを識別しやすくするために利用します。
docker image tag 元イメージ名:[:タグ名] 新イメージ名:[:タグ名]
docker image push コマンド
DockerイメージをDocker Hubへ登録します。
docker image push [options] 名前空間/イメージ名:タグ名
docker image push
は、自分の所有または、所属しているorganizationのリポジトリにしかできない為、名前空間を必要に合わせて変更する必要があります。
pushは、docker login コマンドでログインしてから実行します。
公式サイトでアカウントを作成できます。
名前空間の変更例
docker image tag
コマンドで「example」を「zamax1016」に変更する場合
$ docker image tag example/echo:latest zamax1016/echo:latest
REPOSITORY TAG IMAGE ID CREATED SIZE
example/echo latest 1111aaaabbbb 8 months ago 733MB
zamax1016/echo latest 1111aaaabbbb 8 months ago 733MB
docker container run コマンド
Dockerイメージからコンテナ作成、実行をします。
docker container run [options] イメージ名[:タグ名] [コマンド] [コマンド引数...]
ちょっと色々なパターン(オプション)で起動してみる
-d
バックグラウンドで実行。
$ docker container run -d -p 9000:8080 example/echo:latest zamax1016/echo:latest
936d7131a0e11242788c7c8dc4a5affa4652feadc251a59f553427480daaa365
--name
名前を指定。
-p
コンテナ側のポートのみ指定。ホスト側のポートは、自動的に割り振られる。
$ docker container run -d -p 8080 --name echo1 zamax1016/echo:latest
1f49a6e7912378ca1e8e6316ad2555e40e04e3dc8f048ff74e03313defee2741
$ docker container run -d -p 8080 --name echo2 zamax1016/echo:latest
e898ad44e2a6bae31f34aa2ebf8f8c03cd68aeef6e2fb64625104f8ce0b5e70e
$docker container ls
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
e898ad44e2a6 zamax1016/echo:latest "go run /echo/main.go" 20 seconds ago Up 19 seconds 0.0.0.0:32769->8080/tcp echo2
1f49a6e79123 zamax1016/echo:latest "go run /echo/main.go" 43 seconds ago Up 42 seconds 0.0.0.0:32768->8080/tcp echo1
$ curl http://localhost:32769
Hello Docker!!%
$ curl http://localhost:32768
Hello Docker!!%
-i
コンテナ側の標準出力を表示し続ける。コマンド入力が可能。
$ docker image pull alpine:latest # コマンド入力の為、alpineを入れる
# -iで起動。
$ docker container run -i alpine:latest
# コマンド入力で標準出力が表示される。
echo test
test
-t
ターミナル表示。
# -tで起動
$ docker container run -t alpine:latest
# ターミナルが表示された。コマンドを入力しても標準出力されない。
/ #
-it
で起動してみると仮想環境にログインしたように利用できる。
$ docker container run -it alpine:latest
# ターミナルも表示され、コマンド入力で標準出力も表示される。
/ # echo test
test
/ #
docker container ls コマンド
実行中のコンテナおよび終了したコンテナの一覧を表示する。
docker container ls [options]
オプション | 説明 |
---|---|
-q | コンテナIDだけを表示する |
--filter |
--filter "name=echo" でechoを含む名前のコンテナを表示。--filter "ancestor=zamax1016/echo" でzamax1016/echoを含むイメージを表示。 |
-a | 終了したコンテナも含めて表示 |
docker container restart コマンド
一度停止したコンテナは、破棄されない限りdocker container restart
で再実行ができます。
docker container restart コンテナIDまたはコンテナ名
docker container rm コマンド
停止したコンテナをディスクから完全に破棄します。
docker container rm コンテナIDまたはコンテナ名
docker container exec コマンド
実行中のコンテナでコマンドを実行します。
docker container exec [options] コンテナIDまたはコンテナ名 コンテナで実行するコマンド
docker container cp
コンテナとホスト間でのファイルのコピーができます。
# コンテナ→ホスト
docker container cp [options] コンテナIDまたはコンテナ名:コンテナ内のコピー元 ホストのコピー先
# ホスト→コンテナ
docker container cp [options] ホストのコピー先 コンテナIDまたはコンテナ名:コンテナ内のコピー元
docker container prune コマンド
停止したコンテナを一括削除できます。
docker container prune [options]
docker image prune コマンド
コンテナで実行していないイメージを一括削除できます。
docker image prune [options]
docker system prune コマンド
利用されていないコンテナ、イメージ、ボリューム、ネットワークといった全てのDockerリソースを一括削除します。
docker system prune [options]
docker container stats コマンド
利用状況の取得ができます。
docker container stats [options] [表示するコンテナID...]