インターン先でdockerが必要となり、勉強し始めて2週間の学生が、dockerを扱う上で基本的なコマンドを、備忘録としてまとめました。
dockerについては説明していないので、dockerの基本は理解できているが、あのコマンドなんだっけ??となった時に、見れるようにしました。
間違いなどがある場合には、コメントでご指摘して下さると、ありがたいです🙇♂️
dockerについて全然知らないという方向けに、おすすめの教材のURLも貼っておきます。有料ですが、圧倒的に分かりやすく、非常にdockerの理解に役立ちました。基本的には上のudemy講座がおすすめですが、超初心者だと、まずは下の漫画からの方が入りやすいかなと思います。
準備
dockerhub にログインしたい
docker login
imageを〇〇したい
imageを、dockerhubからホストにpullしたい
docker pull <image>
imageの一覧(ホストにある)を表示したい
docker images
image名を変更したい
docker tag <now image> <new image>
docker tag <username>/<repository>:<tag> <username>/<repository>:<tag>
- 詳細は、
<hostname>:<port>/<username>/<repository>:<tag>
だが、指定しないとデフォルトでは、<hostname>:<port>
はDockerhubのもの、<username>
はlibrary、はlatestとなる。
imageをdockerhubにpushしたい
docker push <image>
imageを削除したい
docker rmi <image>
imageを、コンテナから作成したい
docker commit <container> <image>
docker commit <container> <repository:tag>
コンテナを〇〇したい
コンテナを作成 & プログラムを実行したい
docker run -it <image>
# example1
docker run -it hello-world
# example2
docker run -it ubuntu bash
# detachedモード
# backgroundで動かす用
docker run -it -d ubuntu bash
# foregroundモード
# 使い捨て用
docker run -it --rm ubuntu bash
-
<image>
がホスト上にない時は、dockerhubからimageをpullしてきてくれる。 -
docker run
=docker create
(コンテナを作成する。) +docker start -a
(デフォルトのコマンドを実行する。) -
-it
: bash起動時等に必要なおまじない - bash: コンテナ起動時に実行するプログラム。ここではbashというプログラムを実行させている。
-
--name <name>
: コンテナの名前を指定するためのオプション。
コンテナの一覧を表示したい
# Activeなコンテナの一覧を表示したい
docker ps
# 全てのコンテナの一覧を表示したい
docker ps -a
コンテナを削除したい
# 停止中のコンテナを削除
docker rm <container>
# 起動しているコンテナを削除
docker stop <container>
docker rm <container>
# 停止中のコンテナを全て削除
docker system prune
- 起動中(statusがUp)のコンテナは削除するために、先に停止させる必要があります。
コンテナに入りたい
# statusがUpのコンテナに入る。
# 既に動いているプロセスが走る。
docker attach <container>
# statusがUpのコンテナに入る。
# 2個目のプロセスが走る。
docker exec -it <container> bash
# statusがExitedのコンテナに入る。
# 既に動いているプロセスが走る。
docker restart <container>
docker attach <container>
# statusがExitedのコンテナに入る。
# 2個目のプロセスが走る。
docker restart <container>
docker exec -it <container> bash
-
docker exec -it <container> bash
を起動中のコンテナ(既に、1個目のプロセスが動いている)に対して行うと、2個目のプロセスが走ることになる。その後、exit
でコンテナを抜けても(2個目のプロセスを切っても)、まだ1個目のプロセスは動いている。 -
「なんで、exitでコンテナから抜けたのに、まだstatusがupのままなの??」と感じたら、上のような原因が考えられる。
コンテナから出たい
# コンテナを動かしているプロセスを切って、出る。
exit
# detach
# コンテナを動かしているプロセスを残したまま、出る。
control p + q
- exitで出ると、コンテナの status は、Exited になる。(プロセスは終了する。)
- detachで出ると、コンテナの status は、Up のまま。(プロセスは起動したまま。)
コンテナを再起動させたい
docker restart <container>
-
<container>
は、再起動させたいコンテナのID、または、コンテナの名前を指定する。 - コンテナの status は、Exited から、 Up になる。
コンテナにプログラムを実行させたい
docker exec -it <container> bash
-
<container>
は、実行させたいコンテナのID or 名前を指定する。 - -it: bash起動時等に必要なおまじない
- bash: コンテナ起動時に実行するプログラム。ここではbashというプログラムを実行させている。
コンテナに入れない😭
コンテナに入るところで、つまづいたポイントです。コンテナ入れなくてめちゃくちゃ困り果てたので、同じことが起こった人は参考にしてみて下さい。
コンテナのstatusがUpにならない😭
Exited状態のコマンドに対して、docker start
docker restart
をしても、statusがUpにならない問題。
これはおまじない-it
をつけ忘れて、run
をしている可能性があります。もう一度、docker run -it <image>
でimageからコンテナを作成してみてください。
自分も、おまじない-it
をなめて、つけないでいると、コンテナにどう頑張っても入れず痛い目を喰らいました。おまじないを忘れないように。
docker exec -it <container> bash
を実行しても、Error response from deamon: Container ランダムな値 is not running
エラーが発生する😭
コンテナのStatusがExited(停止中)になっている可能性があります。StatusがUpになっているかを確認して下さい。StatusがExitedになっている場合は、docker restart <container>
でコンテナを起動させる必要がある。
おまじない -it
ってなんやねん😡
-
-i
: これをつける事で初めて、ターミナルで打ったコマンドを、コンテナ側が認識してくれます。例えば、-i
を抜いてコンテナを立ち上げた時に、ターミナルでls pwd cd
等を打っても反応が一切ありません。 -
-t
: これをつける事で初めて、コンテナからの出力の表示が綺麗になったり、タブ補完が効くようになります。例えば、-tを抜いてコンテナを立ち上げた時に、出力の表示が汚かったり、タブ補完が効きません。
試しに、以下のコマンドでの挙動の違いを見てみると勉強になります。
docker run -it ubuntu bash
docker run -t ubuntu bash
docker run -i ubuntu bash
docker run ubuntu bash
最後に
dockerは難しいですが、非常に便利なので、早く慣れたいと思います。
勉強し始めてまだ2週間で、いろいろツッコミがあると思います。コメントでご指摘して下さると、ありがたいです🙇♂️