【図解】dockerの主要コマンドまとめ

各コマンドの関係は、以下のような感じです。

Dockerのコマンドの関連性(イメージやコンテナやレジストリとの関係や仕組みや違い)

▲Dockerのざっくりした全体像。(旧Draw.ioで作成)

docker pull

docker pullは、「みんながイメージをアップしている場所」から自分のPCにイメージをダウンロードしてくるコマンド。

例えば

docker pull ubuntu:20.04

とすると、Ubuntuの20.04のイメージを取ってこれます。

 

「どこからイメージをダウンロードするか」も指定できますが

何も指定しなければDocker Hub というDockerが公式に用意している「みんながイメージをアップしている場所」から自分のPCにダウンロードされるようになってます。

なので上のコマンドは「Docker Hubからubuntuの20.04のイメージをダウンロードしてくる」という意味になります。

自分がほしいOSがあるかどうかは、Docker Hubで探せばいい。

 

:20.04の部分はタグ名。Docker Hub のサイトを見てみると何となくどういう概念か理解できると思いますが、タグという形でバージョン管理をしています。

docker run

docker runは、イメージからコンテナを作り出して動かすコマンド。

手元にないイメージを指定した場合は、同時にpullも行ってくれます。

 

例えば

docker run --name testdayo ubuntu:18.04

とすると、ubuntuのバージョン18.04のイメージをtestdayoというコンテナ名で動かすことができます。(もしubuntuのバージョン18.04のイメージが手元になかった場合は勝手にpullも行われる)

docker commit

docker commitは、コンテナをイメージとして保存するコマンド。

例えば

docker commit testdayo hoge:1.0

とすると、手元にあるtestdayoというコンテナをhoge:1.0というイメージ名で保存できます。

後ろに付いている:1.0の部分はタグ名といいます。

docker push

docker pushは、コンテナをレジストリ(デフォルトはdocker hub)に登録するコマンド。

例えば

docker push userid/unkdayo:1.0

とすると、手元にあるsername/unkdayo:1.0というコンテナをdocker hubに登録できます。

dockerhubに登録する際のコンテナ名は

ユーザーID/イメージ名:タグ名

という形じゃないとダメ。

例えば、dockerhubに登録しているユーザー名がhogeなら、hoge/イメージ名:タグ名じゃないとpushに失敗します。

 

あとpushを行う前に

docker login

と入力して、dockerhubにログインする必要があります。

docker login

▲GUIのほうでログインしている場合は、ユーザー名もパスワードも省略されるみたいです(?)

docker build

以下のように打つと、「カレントディレクトリのDockerfileを参考にしてhogeというイメージをbuildする」みたいな意味になります。

docker build -t hoge .

 

長くなるので別記事にしました↓。

参考docker buildコマンドとは?ビルドコンテキストとは

docker prune

イメージ、コンテナ、ボリュームを一括削除する方法。

#「タグを持っていない&コンテナが使用していない」なイメージをすべて削除する
docker image prune

#停止しているコンテナをすべて削除する
docker container prune

#どのコンテナからも使用されていないvolumeを削除する
docker volume prune

#使用されていないネットワークを削除する
docker network prune

#停止コンテナ・未利用イメージ・未利用ボリューム、未使用ネットワークを一括削除する
(※Docker 17.06.1 以上からボリュームを削除したい場合は、 --volumes フラグも必要)
docker system prune
  • -fオプション:
    • 「本当に削除しますか?」みたいな確認をされなくなる
  • -aオプション:
    • build キャッシュや中間イメージ(タグのないイメージ)も全部消す

 

つまり

docker system prune -af --volumes

と書くと、問題無用でDockerの全データを強制削除できます。(Docker 17.06.1以降)

 

pruneという英単語は「余分な枝を切り落とす」みたいな意味があるらしく、

転じて「使用されていないデータを削除する」みたいなニュアンスがあるらしい。

 

「タグを持っていない」というのは、新しいイメージが古いイメージのタグを奪ってしまった場合など。

参考Dockerで none なイメージを一括で削除するワンライナー – Qiita

余談:Windowsターミナルが使いやすい

Windowsでdockerにログインする際のターミナルソフトは

Windowsターミナル」というソフトがオススメです。

windowsターミナルからDockerにログイン

▲WindowsターミナルでDockerコンテナにログインしている様子。

Windowsで従来使われてきた

  • PowerShell
  • コマンドプロンプト

などと比較して

  • 見やすいフォントがデフォルトで設定されている
  • オープンソースで開発が進められているらしく、今後ユーザーの要望を取り入れた機能がどんどん追加されていく可能性が高い

という感じで、ターミナルソフトとしての使いやすさも将来性も大です。

VScodeを使っている場合は、VScodeのターミナルを使ったほうが良いですが。。

 

おわり

仮想環境
スポンサーリンク
この記事を書いた人
penpen

1991生まれ。WEBエンジニア。

技術スタック:TypeScript/Next.js/Express/Docker/AWS

フォローする
フォローする

コメント

タイトルとURLをコピーしました