概要
前回までで、Windows10にDockerをインストールして、Imageを取得したり、廃棄したりしてみました。
今回は、取得したImageを使ってContainerを起動していくことになります。
(ただし、相変わらずDockerfileは除外します)
まとめは下記
前提条件
- Windows10にDocker Desktopがインストールされている状態
はじめの一歩(image -> hello-world)
すでに、「Windows10でDocker(Docker Desktop)を使う」の回でubuntuを取得してたりしますが、ひとまずDockerコマンドを学ぶことも踏まえ、「なかった」ことにします。
最初の「一歩」目としては、やはり、「hello-world」ですね。
この「hello-world」は、Dockerを最小構成で作っていて、起動すると「Hello from Docker!」(あと数行の文字列)と出力されるだけ・・・・です。
ただ、Dockerの理解にはかなり貢献します。
まずは、Imageを取得します。
タグは下記が使えるようなので「latest」を指定していきます。
PS C:\> docker pull hello-world:latest
latest: Pulling from library/hello-world
2db29710123e: Pull complete
Digest: sha256:13e367d31ae85359f42d637adf6da428f76d75dc9afeb3c21faea0d976f5c651
Status: Downloaded newer image for hello-world:latest
docker.io/library/hello-world:latest
取得したImageのサイズを見てみましょう
PS C:\> docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
ubuntu latest 27941809078c 10 days ago 77.8MB
hello-world latest feb5d9fea6a5 8 months ago 13.3kB
13.3kB!?
ちっちゃ!
Containerを起動する(> docker run | docker container ls --all | docker start)
それでは、Containerを起動してみます。
実行方法は、Example outputに記載されています。
PS C:\> docker run hello-world
Hello from Docker!
This message shows that your installation appears to be working correctly.
To generate this message, Docker took the following steps:
1. The Docker client contacted the Docker daemon.
2. The Docker daemon pulled the "hello-world" image from the Docker Hub.
(amd64)
3. The Docker daemon created a new container from that image which runs the
executable that produces the output you are currently reading.
4. The Docker daemon streamed that output to the Docker client, which sent it
to your terminal.
To try something more ambitious, you can run an Ubuntu container with:
$ docker run -it ubuntu bash
Share images, automate workflows, and more with a free Docker ID:
https://hub.docker.com/
For more examples and ideas, visit:
https://docs.docker.com/get-started/
ここでのポイントは、
- 必要な機能(決まったテキストを表示するだけ)をDockerのImageにすると、これだけ小さなサイズでもきちんと機能しますよ。
ということですね。
特に「exit」コマンドを実行しなくても、「やるべきことをやった」状態なので、Containerは終了してますね。
警告
重要なので、「補足」として書いておきます。
「docker run」は正確には「起動」ではないです。
より正確な言い方をすると「Containerの生成」です。
dockerと入力して表示される説明をみても、「run」には下記のように書かれてます。
「run Run a command in a new container」
そう、「NEW」Containerですね。
というわけで、もう一度さっきのコマンドを実行してみましょう
PS C:\> docker run hello-world
Hello from Docker!
This message shows that your installation appears to be working correctly.
To generate this message, Docker took the following steps:
1. The Docker client contacted the Docker daemon.
2. The Docker daemon pulled the "hello-world" image from the Docker Hub.
(amd64)
3. The Docker daemon created a new container from that image which runs the
executable that produces the output you are currently reading.
4. The Docker daemon streamed that output to the Docker client, which sent it
to your terminal.
To try something more ambitious, you can run an Ubuntu container with:
$ docker run -it ubuntu bash
Share images, automate workflows, and more with a free Docker ID:
https://hub.docker.com/
For more examples and ideas, visit:
https://docs.docker.com/get-started/
もう一度、Docker DesktopのContainerリストを見てみてください。
そう、もう一つ「hello-world」が出来てしまってますね。
コマンドでも見てみましょう。
PS C:\> docker container ls --all
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
106b75383f74 hello-world "/hello" 5 minutes ago Exited (0) 5 minutes ago condescending_khorana
ed3e9a9d9e4c hello-world "/hello" 11 minutes ago Exited (0) 11 minutes ago elated_wilbur
89b3f9ec5f9b ubuntu:latest "bash" 12 hours ago Exited (0) 12 hours ago magical_hellman
PS C:\>
ん~、、、、
じゃぁ、すでに存在しているContainerをもう一回実行するにはどうすればいいの?
それは、「start」を使います。
⇒オプションで「-i」が必要です。
PS C:\> docker start -i 106b75383f74
Hello from Docker!
This message shows that your installation appears to be working correctly.
To generate this message, Docker took the following steps:
1. The Docker client contacted the Docker daemon.
2. The Docker daemon pulled the "hello-world" image from the Docker Hub.
(amd64)
3. The Docker daemon created a new container from that image which runs the
executable that produces the output you are currently reading.
4. The Docker daemon streamed that output to the Docker client, which sent it
to your terminal.
To try something more ambitious, you can run an Ubuntu container with:
$ docker run -it ubuntu bash
Share images, automate workflows, and more with a free Docker ID:
https://hub.docker.com/
For more examples and ideas, visit:
https://docs.docker.com/get-started/
Containerの一覧を表示してみます。
PS C:\> docker container ls --all
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
106b75383f74 hello-world "/hello" 8 hours ago Exited (0) About a minute ago condescending_khorana
ed3e9a9d9e4c hello-world "/hello" 8 hours ago Exited (0) 7 hours ago elated_wilbur
89b3f9ec5f9b ubuntu:latest "bash" 19 hours ago Exited (0) 19 hours ago magical_hellman
PS C:\>
今度は増えてないですね。
これで、取得したImageから生成したContainerの起動や、再度起動する方法が分かったかと思います。
Containerを生成する(> docker create)
追加ですが、ここで「create」も学んでおきます。
前述の「run」は、ImageからContainerを生成すると同時に「起動」してました。
でも、「起動までは要らないんだけど」という場合もあります。
そんなときは「create」を使います。
それでは、「create」を使って、hello-worldのContainerをもう1つ作ってみます。
まずは、現状。
PS C:\> docker container ls --all
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
106b75383f74 hello-world "/hello" 8 hours ago Exited (0) 11 minutes ago condescending_khorana
ed3e9a9d9e4c hello-world "/hello" 8 hours ago Exited (0) 8 hours ago elated_wilbur
89b3f9ec5f9b ubuntu:latest "bash" 19 hours ago Exited (0) 19 hours ago magical_hellman
PS C:\>
Containerを作成します。
PS C:\> docker create hello-world
041f29983444199c5e2d65fa0d0ee4aab8430ff307a565feaca7170afc3a3bef
作成されたはずなので、一覧を表示してみます。
PS C:\> docker container ls --all
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
041f29983444 hello-world "/hello" 7 seconds ago Created agitated_varahamihira
106b75383f74 hello-world "/hello" 8 hours ago Exited (0) 11 minutes ago condescending_khorana
ed3e9a9d9e4c hello-world "/hello" 8 hours ago Exited (0) 8 hours ago elated_wilbur
89b3f9ec5f9b ubuntu:latest "bash" 19 hours ago Exited (0) 19 hours ago magical_hellman
出来てますね。
ポイントは、「生成と同時に起動」という「run」とは違い、「生成」までしかしていないので「STATUS」が「Created」になっていることです。
Docker Desktop側も「created」というSTATUSになっていますね。
Containerの一覧を表示する(> docker ps)
個人的に、「docker container ls --all」を使っていたのですが、一応、世間ではこっちのほうが多いようなので書いておきます。
PS C:\> docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
041f29983444 hello-world "/hello" 10 minutes ago Created agitated_varahamihira
106b75383f74 hello-world "/hello" 8 hours ago Exited (0) 22 minutes ago condescending_khorana
ed3e9a9d9e4c hello-world "/hello" 8 hours ago Exited (0) 8 hours ago elated_wilbur
89b3f9ec5f9b ubuntu:latest "bash" 19 hours ago Exited (0) 19 hours ago magical_hellman
Containerを削除する(> docker rm)
Containerは、簡単に作成できるので、気づくとゴミのように溜まっていることがあります。
今回は、さっくり「hello-world」のContainerを削除します。
(あえて、一個ずつ消します)
PS C:\> docker rm 041f29983444
041f29983444
PS C:\> docker rm 106b75383f74
106b75383f74
PS C:\> docker rm ed3e9a9d9e4c
ed3e9a9d9e4c
Containerの一覧を表示して確認してみます。
PS C:\> docker container ls --all
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
89b3f9ec5f9b ubuntu:latest "bash" 19 hours ago Exited (0) 19 hours ago magical_hellman
消えてますね。
次回は、別のImageを使ってContainerを起動して利用します。