Help us understand the problem. What is going on with this article?

Docker再入門

Dockerにあまり触れる機会が少なく、たまに使うとコマンドとか仕組みをすぐに忘れてしまう。そんな自分へのナレッジ

公式ドキュメント

Docker Documentation
上部のメニューで、Guides, Product manuals, Glossary, Reference, Samples に分かれていて、選択すると左側にコンテンツがツリーで表示される。

特によく使うであろうリファレンスはこちら
Docker CLI コマンド
Dockerfile reference

Dockerコンテナを起動・実行する

コンテナを生成して起動する

docker run [OPTIONS] IMAGE [COMMAND] [引数...]
  • Dockerイメージからコンテナを作成して、指定したプロセスを起動する。
  • Dockerイメージは、ホスト内にあればそれを使い、なければ設定されているReposityからPullする。
  • docker create -> docker start をまとめて実行しているイメージ
  • --name [コンテナ名] 定義しておくと他のコマンドでコンテナを指定するときに、この名前が使える。
  • -it は、コンテナの起動時コマンドが /bin/bash などの場合に指定する。そうしないとコンテナが起動してもすぐ終了してしまう。

コンテナが起動してもすぐ終了してしまうのは、バックグラウンドで動かそうとしていたからの模様。
以下のリンク先ブログのように、実行コマンドを tail -f /dev/null にするのが良いみたい。
コンテナをバックグラウンドで動かすハック

(追記:久しぶりに読み返ていたら結局どうしたらいいかわからなかったのでコマンド例。こうするとバックグランドで起動したままにできる)
docker run --name <Container Name> -d IMAGE tail -f /dev/null

ちなみにBambooのDocker Runnerからコンテナを実行した時にプロセスを見たら、 tail -f /dev/null となっていた。

作成済のコンテナを起動する

docker start [OPTIONS] CONTAINER [CONTAIER...]

起動中のコンテナを停止する

docker stop [OPTIONS] CONTAINER [CONTAINER...]

イメージからコンテナを生成する

docker create [OPTIONS] IMAGE [COMMAND] [ARG...]
  • イメージからコンテナを作成するだけで、起動はしない
  • だから、起動するには、 docker start を実行する
  • docker run からコンテナの起動部分を除いた感じ
  • なので、docker run とほぼ同じオプションを指定できる

Dockerコンテナを管理する

ホストPCから起動中のコンテナに接続する

docker attach [OPTIONS] CONTAINER
  • サーバーにSSH接続するようなイメージで、コンテナ内部にアクセスできる
  • :warning: 切断してコンテナから抜けるには、 Ctrl + P -> Ctrl + Q を使わないと、プロセス自体も終了するので気を付ける。
  • 実行中のコンテナプロセスがshellを起動していればアクセスできる。
  • Shellが起動していなければ、後述のdocker exec でShellを起動する

起動中のコンテナでコマンドを実行する

docker exec [OPTIONS] CONTAINER COMMAND [ARG...]
  • コンテナに、別のプロセスを実行させる時に利用する
  • 例えば起動中のコンテナがShellを起動していないので、 docker attach でアクセスできない場合に代わりに docker exec -it CONTAINER /bin/bash を実行するとアクセスできる

コンテナを一覧表示する

docker ps [OPTIONS]
  • -a をつけると、起動していないコンテナも表示できる

コンテナのログを表示する

docker logs [OPTIONS] CONTAINER

コンテナのリソース使用量の統計情報を表示する

docker stats [OPTIONS] [CONTAINER...]
  • 起動中のコンテナにおける現在のCPU使用率やメモリ使用量・使用率を表示する
  • 表示を終了するときは、 Ctrl + C

コンテナのプロセス実行状況を表示する

docker top CONTAINER [ps OPTIONS]

コンテナを削除する

docker rm [OPTIONS] CONTAINER [CONTAINER...]

Dockerイメージを管理する

Dockerfileから、イメージを生成する

docker build [OPTIONS] PATH | URL | -
  • Dockerfileの指定は、ファイルパス, URLを指定できる
  • -t name:tag オプションでイメージ名とタグを指定する

Dockerfileの主なコマンド
- FROM で、ベースとなるイメージを指定する
- RUN で、プロセス起動に必要なパッケージやコマンドを実行する
- ADD で、外部サイトからのファイルダウンロードを行う。 (curlして、tar.gzを展開するような操作なんだけど、あくまでもtarを解凍するのにADDを使って、ダウンロードはCurlなりWgetを使った方が良いと述べられていたりするので要検討)
- COPY で、ホストのファイルをコンテナにコピーする
- ENV
- ENTRYPOINTCMD で、コンテナ起動時に実行するプロセスコマンドを定義する。(ENTRYPOINT と CMDは役割が違うので使い方はよく調べること)

流れはこんな感じ
1. FROM でコンテナのベースを作る
2. RUN ADD COPY ENV などでコンテナで実行するプロセスに必要なパッケージのインストール、設定を行う
3. ENTRYPOINT CMD でプロセスを実行する

コマンドの詳細やDockerfileの書き方は Dockerfile referenceBest practices for writing Dockerfiles などを参照

ホストに存在するDockerイメージを一覧表示する

docker images [OPTIONS] [IMAGE[:TAG]]
  • イメージのサイズなどもここで見ることができる。

Dockerイメージをレジストリからプル(ダウンロード)する

docker pull [OPTIONS] NAME[:TAG|@DIGEST]
  • Docker Hub などのRepositoryにあるDockerイメージをダウンロードする。
  • docker rundocker create でダウンロードしていないイメージを使おうとした場合は、自動的にPullされる

ホスト内のDockerイメージを削除する

docker rmi [OPTIONS] IMAGE [IMAGE...]
  • 削除する時には、ImageIDやRepository:TAG が必要なので、docker images で確認する。
  • コンテナが作成済のImageは削除できないので、 --force オプションをつけるか、該当のコンテナを削除する

Dockerをインストールする

Linux にインストールする

Docker Community Engine として以下の3つをインストールする

- docker-ce
- docker-ce-cli
- containerd.io

もちろん依存しているパッケージがあり、インストールの手順はLinuxのディストリビューションによっても異なるので、詳細は、Get Docker を見ること

MacやWindows にインストールする

MacやWindowsの場合、Docker-ce を実行するための動作環境(Linuxの仮想環境)が必要になる。
この仮想環境や拡張機能なども含まれている、Docker Desktop for Mac / Docker Desktop for Winows をインストールする

Docker Desktop for Mac

こちらのDocumentを参考にインストールする
https://docs.docker.com/docker-for-mac/

homebrew caskを使っている場合は、以下でもインストールできる

brew cask install docker

brew install docker もあるがこれは、Docker-ceのみしかインストールしないので、brew caskでインストールすること。
これはbrew cask info dockerbrew info docker のVersion番号から判断できる。

Docker Desktop for Windows

使ったことが無いので詳細は不明だが、こちらのDocumentを参考にインストールしていけば良いと思う。
https://docs.docker.com/docker-for-windows/

kazokmr
アカウントと記事だけ残してあります
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした