Dockerを利用すると、UbuntuなどのOSやNginx/ApacheなどのWebサーバおよびMySQLなどミドルウェアの環境構築を素早くおこなうことができます。
各OSにおけるDockerのインストール方法については省きます。Dockerをインストールしたら、まずは習うより慣れろの精神でDockerのHello Worldから。
Dockerを利用する基本的な流れは下記のイラストのようになります。まずDocker社の提供しているサービス「Docker Hub」からイメージをダウンロード(取得)し、そのイメージからコンテナを生成し起動させます。そのコンテナがいわゆるUbuntu、NginxやMySQLとして実際に利用できる環境となります。
まずはhello-worldという名前の「イメージ」を「docker pull」でダウンロードします。
1 |
docker pull hello-world |
「docker images」でイメージの一覧を表示させることができます。
1 2 3 4 |
docker images REPOSITORY TAG IMAGE ID CREATED SIZE hello-world latest fce289e99eb9 2 months ago 1.84kB |
hello-worldという名前(REPOSITORY)のイメージを確認できました。TAGはバージョン(latestは最新)、IMAGE IDとして「fce289e99eb9」が付与されているのが確認できます。
次にイメージから「コンテナ」を生成します。「docker create」を利用します。
1 2 3 |
docker create hello-world もしくは docker create fce289e99eb9 |
生成され起動中のコンテナの一覧は「docker ps」で表示させることができます。また「-a」オプションを付けることによって起動中でないすべてのコンテナを含めて表示させることができます。
1 2 3 4 |
docker ps -a CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 7af3dcceea97 hello-world "/hello" 55 seconds ago Created wonderful_payne |
CONTAINER IDは自動的に付与されたID、IMAGEはこのコンテナを生成する元となったイメージ、NAMESは今回は自動的に付与された名前です。STATUSの内容はこのコンテナの状態を表し上記では、生成されたばかりであることが確認できます(Created)。
次にこのコンテナを起動させてみます。「docker start」を利用します。「-i」オプションを付与します(もしくは-aオプション)。
1 2 3 |
docker start -i 7af3dcceea97 もしくは docker start -i wonderful_payne |
上記コマンドを打つと下記のように表示されます。表示だけの機能ですが、これがHello Worldイメージから生成されたコンテナの機能です。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
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: |
1つのイメージから別のコンテナを生成することも可能です。試しにもう一度コンテナを生成してみます。
1 |
docker create hello-world |
コンテナの一覧を表示してみます。
1 2 3 4 5 |
docker ps -a CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 69c792d706c7 hello-world "/hello" 7 seconds ago Created thirsty_taussig 7af3dcceea97 hello-world "/hello" 20 minutes ago Exited (0) 10 minutes ago wonderful_payne |
すると同じイメージ(IMAGE : hello-world)から生成されたコンテナが2つ存在していることを確認できます。自動的に付与されたCONTAINER IDとNAMESもそれぞれ別であることが確認できます。
不要であるコンテナは「docker rm」で削除することができます。CONTAINER IDもしくはNAMESを指定します。
1 2 3 |
docker rm 7af3dcceea97 もしくは docker rm wonderful_payne |
生成したコンテナを一括して削除したい場合は下記コマンドを実行します。
1 |
docker container prune |
またイメージを削除するには「docker rmi」を利用します。まずdocker imagesでREPOSITORYもしくはIMAGE IDを確認します。
1 2 3 4 |
docker images REPOSITORY TAG IMAGE ID CREATED SIZE hello-world latest fce289e99eb9 2 months ago 1.84kB |
下記のようにして削除できます。
1 2 3 |
docker rmi hello-world もしくは docker rmi fce289e99eb9 |
※イメージを削除する前に、そのイメージから生成したコンテナを削除して下さい。そのイメージと紐付いているコンテナが残っている場合、エラーとなります。
はじめにイメージをダウンロードし(pull)コンテナを生成(create)、そして起動(start)をおこないましたが、「docker run」によってイメージのダウンロードからコンテナの生成、起動までを一括でおこなうことができます。
「docker run」コマンドを利用して「hello-world」コンテナを起動します。
1 |
docker run hello-world |
もしまだhello-worldイメージが存在していない場合、上記コマンドを実行すると下記のように表示されます。1〜5行目で確認できるように「docker run」はイメージのダウンロード(pull)から実行されます。そして更にdocker runを実行した場合、すでにイメージは存在しているので、コンテナの生成(create)・起動(start)のみがおこなわれます(つまり別のコンテナが増える)。
1 2 3 4 5 6 7 8 9 10 |
Unable to find image 'hello-world:latest' locally latest: Pulling from library/hello-world 1b930d010525: Pull complete Digest: sha256:2557e3c07ed1e38f26e389462d03ed943586f744621577a99efb77324b0fe535 Status: Downloaded newer image for hello-world:latest Hello from Docker! This message shows that your installation appears to be working correctly. 〜省略 |
次にUbuntuで試してみます。「docker run」でオプションに「-it」を付与して実行します。
1 2 3 4 5 6 7 8 9 10 |
docker run -it ubuntu Unable to find image 'ubuntu:latest' locally latest: Pulling from library/ubuntu 898c46f3b1a1: Pull complete 63366dfa0a50: Pull complete 041d4cd74a92: Pull complete 6e1bee0f8701: Pull complete Digest: sha256:017eef0b616011647b269b5c65826e2e2ebddbe5d1f8c1e56b3599fb14fabec8 Status: Downloaded newer image for ubuntu:latest |
一気に起動中であるUbuntuのコンテナに入り、コマンドが入力できる状態となります。
1 |
root@f92025f68943:/# |
一旦 exit で抜けます。
生成されたコンテナを確認します。
1 2 3 4 |
docker ps -a CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES f92025f68943 ubuntu "/bin/bash" 3 minutes ago Exited (0) 10 seconds ago jolly_yalow |
コンテナを再び起動させます。
1 |
docker start f92025f68943 |
1 2 3 4 |
docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES f92025f68943 ubuntu "/bin/bash" 15 minutes ago Up 25 seconds jolly_yalow |
docker psで起動中のコンテナを表示させると、STATUSが Up であることを確認できます。この状態で下記コマンドによって再度コンテナに入ることが可能となります。
1 2 3 4 5 |
docker exec -it f92025f68943 /bin/bash もしくは docker attach f92025f68943 root@f92025f68943:/# |
※start時に「docker start -ai f92025f68943」のように「-ai」オプションを付与すると一気にコンテナに入ることが可能です。
※CONTAINER ID(f92025f68943)を指定していますが、NAMES(jolly_yalow)でも大丈夫です。
オプションなど細かな説明は省きましたが、以上でDockerをはじめて利用する上でのおおよその流れとなります。
docker pull イメージのダウンロード(取得)
docker create コンテナの生成
docker start コンテナの起動
docker run イメージのダウンロードからコンテナの生成・起動
関連ページ
docker cp でファイルをホストからコンテナへコピーする
DockerでMySQLを利用する[docker container run オプション]