混乱しがちな2つのコマンドについてです。
- ■本記事の流れについて
- ■1.docker runについて
- ■2.docker execについて
- ■3.なぜ混乱しがちなのか
- ■4.コンテナへのログイン方法
- ■5.コンテナへログインせずにコマンド実行する方法について
■本記事の流れについて
以下の流れで記載致します。
1.docker runについて
2.docker execについて
3.なぜ混乱しがちなのか
4.コンテナへのログイン方法について
5.コンテナへログインせずにコマンド実行する方法について
■1.docker runについて
docker run はコンテナを起動するコマンドです。
docker runコマンド自体は以下の3つのコマンドを一気に実行しています。
① docker pull ・・・ コンテナイメージの取得
② docker create ・・・ コンテナの作成
③ docker start ・・・ コンテナの起動
そのため、docker runコマンドが仮に存在してなかったとしても(そんなことはあり得ないのですが)上記3つのコマンドを一つずつ実行すればコンテナは起動します。
また、一度停止(stop)したコンテナを起動する際は、docker startコマンドを使います。
■2.docker execについて
docker exec はコンテナに対してコマンドを実行するものです。
■3.なぜ混乱しがちなのか
上記の通り、
docker runは「コンテナ起動」、
docker execは「コンテナに対するコマンド実行」
です。
これだけ見るとあまり間違う要素がないのですが、
「コンテナにログインする」というときに間違えそうになります。
というのも、
① 起動直後にログインするパターン(docker run)
② 起動後に任意のタイミングでログインするパターン(docker exec)
の2つが存在するからです。
しかも上記①、②で利用するコマンドが異なります。
これが混乱を招く原因です。
以降はログインについて深堀りしていきます。
※下記で利用したcentos8を使います。
■4.コンテナへのログイン方法
■① 起動直後にログインするパターン(docker run)
以下コマンドを実行します。
docker run --name centos81 -it centos:centos8
実行後、既にCentOSにログインした状態となります。
ログアウトするには次のどちらかを行います。
・centos8を起動したままにしたいなら、「Ctrl+P」⇒「Ctrl+Q」
・centos8を停止してもよいなら、exitコマンドを実行
■② 起動後に任意のタイミングでログインするパターン(docker exec)
以下コマンドを実行します。
あえて、オプションにdをつけてバックグラウンドで実行するようにしています。
docker run --name centos82 -itd centos:centos8
続けて以下コマンドを実行します。
docker exec -it centos82 /bin/bash
centosのプロンプトが表示されていればログイン成功です。
■5.コンテナへログインせずにコマンド実行する方法について
centos8にログインせずに任意のコマンドを実行します。
以下は ls -l /var/ コマンドを実行しているところです。
以上です。