rubytomato's “Getting Started”

Webアプリケーション開発の入門的な記事を投稿していきます。

WindowsにDocker Desktopをインストールする

インストール

WindowsにDocker Desktopをインストールするには下記のオフィシャルサイトからインストーラーをダウンロードして実行します。

www.docker.com

オフィシャルサイトのトップページのGet Startedボタンをクリックして下図のページにアクセスします。このページのDownload for Windowsというボタンをクリックするとインストーラーファイル(Docker Desktop Installer.exe)のダウンロードが始まります。

f:id:rubytomato:20210107184134p:plain

インストーラーファイルのダウンロードが終わったらクリックしてインストールを実行します。インストールは特にデフォルトのまま進めて問題ありません。

f:id:rubytomato:20210107184156p:plain

f:id:rubytomato:20210107184208p:plain

この画面が表示されたらClose and log outボタンをクリックしてインストーラーを終了します。

f:id:rubytomato:20210107184215p:plain

ここでいったんPCを再起動します。

再起動したらコマンドプロンプトを開き、下記のコマンドを実行してバージョンを確認します。

> docker --version
Docker version 20.10.0, build 7287ab3

> docker-compose --version
docker-compose version 1.27.4, build 40524192

チュートリアル

PC再起動後に、Dockerが自動的に起動され下図の画面が表示されます。

この画面からGet Startedというチュートリアルを始めることができます。チュートリアルを始めたい場合はStartボタンをクリック、その必要がなければSkip tutorialというリンクをクリックして終了します。

f:id:rubytomato:20210107190325p:plain

以降はチュートリアルの説明になりますので興味のある方は読んでみてください。

チュートリアルclonebuildrunshareの4つのステップに分かれています。

clone

チュートリアルを始めると下図の画面が表示されます。画面の右側にはPowerShellのコンソールが表示されています。

cloneステップでは、コンテナとコンテナ上で実行するアプリケーションに必要なファイルをGitHubリポジトリからクローンします。

The Getting started project is a simple GitHub repository which contains everything you need to build an image and run it as a container.

f:id:rubytomato:20210107190354p:plain

上図の赤線で囲った部分をクリックすると下記のdockerコマンドが右側のコンソールで実行され、その結果が表示されます。

実行されるdockerコマンドは下記の通りです。

docker run --name repo alpine/git clone https://github.com/docker/getting-started.git
docker cp repo:/git/getting-started/ .

実行するコマンドの意味は

1つ目のrunコマンドでイメージからコンテナを作成し、指定されたコマンドを実行します。

  • --nameでコンテナに名前を付けています。この場合repoがコンテナ名になります。
  • alpine/gitはコンテナの生成に使用するイメージの名前です。
  • clone https://github.com/docker/getting-started.gitはコンテナで実行するコマンドのオプションです。

実行するコマンドはgitで、コンテナ内でgit clone https://github.com/docker/getting-started.gitが実行され、Githubからgetting-started.gitリポジトリがクローンされます。

2つ目のcpコマンドでコンテナ内のファイルをホスト、つまりWindowsへコピーします。

  • repo:/git/getting-started/は、コロンの左側のrepoがコンテナ名を指し、右側の/git/getting-started/がコピー元のディレクトリ or ファイルを指します。
  • .はコピー先を指していて、ピリオドとしているのでWindowsのカレントディレクトリがコピー先になります。

つまりrepoコンテナ内にクローンした/git/getting-started/ディレクトリをWindowsのカレントディレクトリへコピーします。

ユーザーのホームディレクトリ(カレントディレクトリ)を確認するとgetting-startedというディレクトリが作成されており、下記のディレクトリ/ファイルがコピーされていることがわかります。

f:id:rubytomato:20210107233853p:plain

下図は上記のdockerコマンドの実行後の状態です。右側にdockerコマンドの実行結果が出力されています。

Next Stepボタンをクリックして次へ進みます。

f:id:rubytomato:20210107190619p:plain

build

次はイメージのビルドを行います。先ほどの作業でWindows上にgetting-startedをコピーしましたが、このディレクトリ内にビルドに必要なDockerfileや、実行するアプリケーションのソースコードが含まれています。

buildステップでは、クローンしたリポジトリに含まれるDockerfileを使ってイメージをビルドします。

A Docker image is a private file system just for your container. It provides all the files and code your container needs.

f:id:rubytomato:20210107190835p:plain

図の赤線で囲った部分をクリックすると下記のdockerコマンドが右側のコンソールで実行され、その結果が表示されます。

実行されるコマンドは下記の通りです。

cd getting-started
docker build -t docker101tutorial .

実行するコマンドの意味は

1つ目のcdは、Windowsのcdコマンドでカレントディレクトリをgetting-startedに移します。

2つ目のbuildはdockerコマンドで、Dockerfileからイメージをビルドします。

  • -tでイメージにタグを付けています。この場合docker101tutorialがタグ名です。
  • .でカレントディレクトリを指しているので、カレントディレクトリにあるDockerfileを使ってイメージをビルドします。

下図は上記のdockerコマンドの実行後の状態です。右側にdockerコマンドの実行結果が出力されています。

Next Stepボタンをクリックして次へ進みます。

f:id:rubytomato:20210107190938p:plain

run

runステップではビルドしたイメージからコンテナを作成し実行します。

Start a container based on the image you built in the previous step. Running a container launches your application with private resources, securely isolated from the rest of your machine.

f:id:rubytomato:20210107191110p:plain

図の赤線で囲った部分をクリックすると下記のdockerコマンドが右側のコンソールで実行され、その結果が表示されます。

クリックすると下記のコマンドが実行されます。

docker run -d -p 80:80 --name docker-tutorial docker101tutorial

実行するコマンドの意味は下記の通りで

  • -dでコンテナをバックグラウンドで実行します。
  • -p 80:80でコンテナのポート80を、ホスト(Windows)のポート80にバインドします。
  • --nameでコンテナに名前を付けます。この場合コンテナにはdocker-tutorialという名前が付けられます。
  • docker101tutorialはコンテナの生成に使用するイメージの名前です。

下図は上記のdockerコマンドの実行後の状態です。右側にdockerコマンドの実行結果が出力されています。

Next Stepボタンをクリックして次へ進みます。

f:id:rubytomato:20210107191352p:plain

Share

Shareステップは、ビルドしたイメージをDocker Hubで共有するチュートリアルですが、Docker Hubにアカウントを作成する必要があるのでこの記事では割愛します。

Doneボタンをクリックして次へ進みます。

You must be signed in to Docker Hub to share your image.

f:id:rubytomato:20210107191412p:plain

アプリケーションにアクセス

下図の赤い線で囲ったボタンをクリックするとブラウザが立ち上がり、docker-tutorialコンテナで実行されているアプリケーションにアクセスします。

f:id:rubytomato:20210107191522p:plain

ブラウザのアドレスバーにはhttp://localhost/が表示されていると思います。Windows(localhost)のポート80は、コンテナのポート80にバインドされているので、このアドレスにアクセスするとコンテナで実行されているWebアプリケーションにアクセスすることになります。

f:id:rubytomato:20210107191731p:plain

ダッシュボード

Docker Desktopを見ると下図の画面が表示されていると思いますが、これがDocker Desktopのダッシュボード画面です。ダッシュボードでイメージやコンテナの一覧表示やその他のいろいろな操作が行えます。

Containers/Apps

下図の赤い下線が引いてあるContainers/Appsをクリックするとコンテナが一覧表示されます。

赤い枠線で囲ったコンテナ(docker-tutorial)が、現在実行しているアプリケーションです。

f:id:rubytomato:20210107191848p:plain

コンテナ名をクリックすると、そのコンテナの詳細を確認することができます。下図の赤い下線が引いてあるLogsではWebアプリケーションのログを確認することができます。

f:id:rubytomato:20210107192835p:plain

同様にInspectでは、コンテナの環境変数や公開しているポートを確認することができます。

f:id:rubytomato:20210107193005p:plain

同様にStatsではコンテナのステータスを確認することができます。

f:id:rubytomato:20210107193018p:plain

Images

下図の赤い下線が引いてあるImagesをクリックするとイメージが一覧表示されます。

赤い枠線で囲ったイメージ(docker101tutorial)が、現在実行しているコンテナ(docker-tutorial)のイメージです。

f:id:rubytomato:20210107193045p:plain

コンテナの操作

コンテナの一覧でコンテナにマウスカーソルを合わせると、右側にその時点でコンテナに対して操作できるボタンが表示されます。

コンテナが起動しているとき

チュートリアルdocker-tutorialコンテナでは下図のボタンが表示されます。

このコンテナではWebアプリケーションが実行されているので、OPEN IN BROWSERというボタンが表示されています。そうでなければこのボタンは表示されません。

f:id:rubytomato:20210107204156p:plain

ICON ICON TEXT DESCRIPTION
f:id:rubytomato:20210107204851p:plain OPEN IN BROWSER ブラウザを起動する
f:id:rubytomato:20210107204838p:plain CLI コンテナでシェルを実行する
f:id:rubytomato:20210107204829p:plain STOP コンテナを停止する
f:id:rubytomato:20210107204822p:plain RESTART コンテナを再起動する
f:id:rubytomato:20210107204813p:plain DELETE コンテナを削除する

コンテナが停止しているとき

コンテナが停止しているときは、コンテナの起動と削除しか操作できないことがわかります。

f:id:rubytomato:20210107223100p:plain

ICON ICON TEXT DESCRIPTION
f:id:rubytomato:20210107223322p:plain START コンテナを起動する
f:id:rubytomato:20210107204813p:plain DELETE コンテナを削除する

コマンドラインで操作

イメージを取得してコンテナを生成する

コマンドプロンプト(このプロンプトをAと呼ぶ)を開き、pullコマンドでubuntuイメージを取得します。

> docker pull ubuntu
Using default tag: latest
latest: Pulling from library/ubuntu
da7391352a9b: Pull complete
14428a6d4bcd: Pull complete
2c2d948710f2: Pull complete
Digest: sha256:c95a8e48bf88e9849f3e0f723d9f49fa12c5a00cfc6e60d2bc99d87555295e4c
Status: Downloaded newer image for ubuntu:latest
docker.io/library/ubuntu:latest

コマンドプロンプトAで、runコマンドを実行し、ubuntuイメージからmyubuntuという名前のコンテナを生成してbashコマンドを実行します。

> docker run -it --name myubuntu ubuntu /bin/bash
root@7bb7c2d04158:/#

別のコマンドプロンプト(このプロンプトをBと呼ぶ)を開きpsコマンドを実行すると、そのときに実行されているコンテナの一覧を確認できます。

> docker ps
CONTAINER ID   IMAGE     COMMAND       CREATED         STATUS         PORTS     NAMES
7bb7c2d04158   ubuntu    "/bin/bash"   6 seconds ago   Up 5 seconds             myubuntu

コマンドプロンプトAに戻り、bashのプロンプトからexitを実行してbashを終了すると、コマンドプロンプトに制御が戻ります。

root@7bb7c2d04158:/# exit
exit

コマンドプロンプトBで、もう一度psコマンドを実行すると、コンテナが終了していることが確認できます。

> docker ps
CONTAINER ID   IMAGE     COMMAND   CREATED   STATUS    PORTS     NAMES

停止しているコンテナを起動する

startコマンドでコンテナを起動します。

> docker start myubuntu
myubuntu
> docker ps
CONTAINER ID   IMAGE     COMMAND       CREATED          STATUS          PORTS     NAMES
7bb7c2d04158   ubuntu    "/bin/bash"   14 minutes ago   Up 13 seconds             myubuntu

コンテナにアクセスする

アクセスするにはexecコマンドかattachコマンドを使用します。

execコマンド
> docker exec -it myubuntu /bin/bash
root@7bb7c2d04158:/#
root@7bb7c2d04158:/# exit
exit

exit後もコンテナは実行されています。

> docker ps
CONTAINER ID   IMAGE     COMMAND       CREATED          STATUS         PORTS     NAMES
7bb7c2d04158   ubuntu    "/bin/bash"   21 minutes ago   Up 6 minutes             myubuntu
attach コマンド
> docker attach myubuntu
root@7bb7c2d04158:/#
root@7bb7c2d04158:/# exit
exit

exitするとコンテナも停止します。

> docker ps
CONTAINER ID   IMAGE     COMMAND   CREATED   STATUS    PORTS     NAMES