したがって、Dockerを初めて使用する場合は、Dockerコンテナを実行する方法を疑問に思うかもしれません。簡単にお見せしましょう。
次のコマンドを使用して、コンテナを作成して実行できます。
docker run -it -d --name container_name image_name bash
次に、コンテナーに入る(コンテナー内でコマンドを対話的に実行する)場合は、dockerexecコマンドを使用できます。
docker exec -it container_ID_or_name /bin/bash
これは、Ubuntuをベースイメージとして新しいコンテナーを作成し、実行中のUbuntuコンテナーに入り、lsコマンドを実行する例です。
[email protected]:~$ docker run -it -d --name my_container ubuntu bash
7e77640bca686108ad415318278a1fa148e1c84d3b180276e19ec2b970ba9b67
[email protected]:~$ docker exec -it my_container bash
[email protected]:/# ls
bin boot dev etc home lib lib64 media mnt opt proc root run sbin srv sys tmp usr var
[email protected]:/#
失った?心配しないで。上記の2つのコマンドの機能と、-it
とは何かについて詳しく説明します。 docker runandexecコマンドのオプション。
特定のイメージと指定されたコマンドを使用してDockerコンテナーを実行する場合は、次の方法で実行できます。
docker run -it -d --name container_name image_name bash
上記のコマンドは、指定されたDockerイメージから指定された名前の新しいコンテナーを作成します。コンテナ名はオプションです。
- -iオプション インタラクティブモードになることを意味します(コマンドを入力できます)
- -tオプション ターミナルを提供します(sshを使用してコンテナに入る場合と同じように使用できます)。
- -dオプション (デーモンモード)コンテナをバックグラウンドで実行し続けます。
- バッシュ 実行するコマンドです。
ここでコマンドとしてbashを実行する理由は、コンテナーがすぐに停止しないためです。
[email protected]:~$ docker run -it -d ubuntu bash
82766613e7bc0ae98887bb1c776fa0de7f3c4771db9ac7ffc5db5c2c68ab497b
[email protected]:~$ docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
82766613e7bc ubuntu "bash" 4 seconds ago Up 3 seconds determined_blackburn
上記の例では、コンテナに名前を付けなかったため、ランダムにdetermined_blackburnという名前が付けられました。
ご覧のとおり、コンテナはバックグラウンドでbashコマンドを実行しています。
Docker Run vs Start vs Create:違いの説明docker初心者にとって、docker start、docker run、dockercreateなどの用語は混乱を招く可能性があります。この記事では、例との違いについて説明します。 LinuxハンドブックAbhishekPrakashデーモンとして実行しないとどうなりますか(-dオプション)バックグラウンドで?
-dオプションを使用しない場合、docker runは新しいコンテナーを作成し、bashシェルを実行するインタラクティブモードのターミナルを使用します。
以下の例でわかるように、コンテナーが作成され、私は自動的にコンテナー内にいます(bashシェル)。
ここでの問題は、コンテナを終了すると、コンテナが停止することです。
[email protected]:~$ docker run -it ubuntu bash
[email protected]:/# echo this is a new container
this is a new container
[email protected]:/# exit
exit
[email protected]:~$ docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
82766613e7bc ubuntu "bash" 2 minutes ago Up 2 minutes determined_blackburn
[email protected]:~$ docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
6098c44f2407 ubuntu "bash" 27 seconds ago Exited (0) 8 seconds ago bold_benz
82766613e7bc ubuntu "bash" 2 minutes ago Up 2 minutes determined_blackburn
-i(インタラクティブ)オプションのみを使用するとどうなりますか?
-iオプションのみを使用するとします。その場合、インタラクティブプロンプトが表示されますが、(Ctrl + Dまたはexitコマンドを使用して)インタラクティブプロンプトを終了すると、コンテナが終了し、コンテナが停止します。
[email protected]:~$ docker run -i ubuntu bash
echo "this is interactive"
this is interactive
[email protected]:~$ docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
[email protected]:~$ docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
b6b79a9f7789 ubuntu "bash" 27 seconds ago Exited (0) 9 seconds ago loving_galileo
-t(terminal / tty)オプションのみを使用するとどうなりますか?
これはトリッキーな状況です。その場合、疑似端末はありますが(-tオプションを使用する場合)、STDINはありません。つまり、前に行ったように、何も入力できず、コンテナ内でコマンドを実行できません。
[email protected]:~$ docker run -t ubuntu bash
[email protected]:/# echo hello
^C^C
[email protected]:/# echo "hi"
^C^C
[email protected]:/# exit
^C^C
[email protected]:/#
上記の場合、別のターミナルからコンテナを停止する必要がありました。
Dockerコンテナを終了する方法この簡単なDockerのヒントは、Dockerコンテナを終了する方法を示しています。 LinuxハンドブックAbhishekPrakashdocker runコマンドは、指定されたイメージから新しいコンテナーを作成します。しかし、すでにコンテナを持っているとどうなりますか?
既存のコンテナを実行する場合は、最初にコンテナを起動してから、次のようなexecオプションを使用できます。
docker start existing_container_ID_or_name
docker exec -it existing_container_ID_or_name /bin/bash
この例は、理解しやすいでしょう:
[email protected]:~$ docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
b6b79a9f7789 ubuntu "bash" 7 minutes ago Exited (0) 7 minutes ago loving_galileo
[email protected]:~$ docker start b6b79a9f7789
b6b79a9f7789
[email protected]:~$ docker exec -it b6b79a9f7789 bash
[email protected]:/# echo "inside existing container"
inside existing container
[email protected]:/# ls
bin boot dev etc home lib lib64 media mnt opt proc root run sbin srv sys tmp usr var
[email protected]:/# exit
exit
[email protected]:~$ docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
b6b79a9f7789 ubuntu "bash" 8 minutes ago Up 43 seconds loving_galileo
常にbashを使用するのはなぜですか?
上記のすべての例で、コンテナーで実行されるコマンドとしてbashまたは/ bin/bashを使用しました。これを使用したのは、シェルが提供され、コンテナーを実行するときに、シェルのおかげで、通常のLinuxシステム内にいるかのようにコンテナー内で通常のコマンドを実行できるためです。
コンテナに任意のコマンドを実行するように依頼できますが、コマンドが完了するとすぐにコンテナが存在することに注意してください。
以下の例でわかるように、今回はインタラクティブなターミナルセッションはありません。 echoコマンドはほぼすぐに終了するため、コンテナの「内部」にはいません。
[email protected]:~$ docker exec -it b6b79a9f7789 echo hello
hello
[email protected]:~$
実際、他のコマンドを実行して、後でコンテナに入ることができます。
以下の例では、ポート80でnginxサーバーを実行する新しいコンテナーを作成しました。オプション-dを指定してデーモンとして実行するため、nginxコンテナーは実行を継続します。
次に、docker execコマンドを使用してインタラクティブなbashシェルを取得し、nginxコンテナー(基本的にはnginxで事前構成されたLinux)内に入ります。
[email protected]:~$ docker container run -it -d -p 8000:80 nginx
262ca5b17bf8aac5afbfdf66af6383be164cd8488f8cd64c06ee466b4d7462e9
[email protected]:~$ docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
262ca5b17bf8 nginx "nginx -g 'daemon of…" 9 seconds ago Up 8 seconds 0.0.0.0:8000->80/tcp zen_kilby
b6b79a9f7789 ubuntu "bash" 20 minutes ago Up 12 minutes loving_galileo
[email protected]:~$ docker exec -it 262ca5b17bf8 bash
[email protected]:/# ls
bin boot dev etc home lib lib64 media mnt opt proc root run sbin srv sys tmp usr var
[email protected]:/#
Dockerコンテナーを実行する方法と、Dockerコンテナーが特定のオプションを使用する理由について理解を深めていただければ幸いです。
ご質問やご提案がございましたら、コメント欄でお知らせください。