Memorandum

普段の生活の覚え書き。主に技術録

Docker導入

Docker for Macのインストール

今回はMacBook Pro(13-inch,Late 2016)にDockerのインストールを行いました。Windows環境でもインストールはできるそうですが色々と制約や問題がありそうだったので私はMBPにインストールを行いました。

導入にあたって、下記のページを参考にさせて頂きました。

https://minato-minato.com/?p=205

https://docs.docker.com/docker-for-mac/install/ からdocker for macをダウンロードします。 ダウンロードする際にアカウントを作成する必要があるみたいなので、今回は「Get Docker CE for Mac(Stable)」から安定版をダウンロードしました。

ダウンロードが完了したら実行してインストールを行います。

Dockerのインストール完了後、作成されたDockerアプリを起動します。 以下のコマンドでバージョンを表示し、インストールできていることを確認します。

> docker -v
Docker version 18.06.0-ce, build 0ffa825

Dockerの利用方法

以下のコマンドでWebサーバのNginxがインストールされているDockerイメージを取得し、コンテナを起動できます。

> docker run --name example-nginx -d -p 8080:80 nginx

正常にコマンドが実行されると、ブラウザでhttp://localhost:8080/にアクセスして、NginxのWelcomeページが表示されます。

トラブル

私の環境では上記のコマンドでエラーが表示されました。

Unable to find image 'nginx:latest' locally
latest: Pulling from library/nginx
be8881be8156: Pull complete 
32d9726baeef: Pull complete 
87e5e6f71297: Pull complete 
Digest: sha256:d85914d547a6c92faa39ce7058bd7529baacab7e0cd4255442b04577c4d1f424
Status: Downloaded newer image for nginx:latest
e201538d3d74cea82075b3fdd51085c9b964e6175a3f35535d7d12e269076461
docker: Error response from daemon: driver failed programming external connectivity on endpoint example-ngnix (b1deb14828be88969e185c6218a335f6781920366aaf36c33ae05ba98cfb1d83): Error starting userland proxy: Bind for 0.0.0.0:8080 failed: port is already allocated.

エラー内容は既に指定したポートが使用されているため競合が起きているみたいです。

ポートの競合が起きているので指定したポートをオープンしているプロセスを下記コマンドで調べます。

> lsof -i:8080
COMMAND    PID USER   FD   TYPE             DEVICE SIZE/OFF NODE NAME
VBoxHeadl 1062 Dr.R   18u  IPv4 0x751b3bd4c170fc97      0t0  TCP *:http-alt (LISTEN)

lsofコマンドは、PortやPID、プロセス名からファイルがオープンしている情報を表示するコマンドで、-iオプションとポート番号を指定すると、そのポートを使用している情報が分かります。 上記の結果でVirtualBoxがポートを使用しているようでした。

N予備校の実習でVirtualBox上の仮想マシンで課題をやっているのが原因ですので、仮想マシンを終了させました。

その後、一旦dockerコンテナを削除します。 削除するために、現在動いているコンテナの確認を行います。

> docker ps -a
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS               NAMES
e201538d3d74        nginx               "nginx -g 'daemon of…"   4 minutes ago       Created                                 example-ngnix

上記のコマンドでコンテナ名やコンテナIDがわかったら、下記のコマンドでdockerのコンテナを削除できます。

> docker rm xxxxxx(コンテナIDやコンテナ名)

そして再び、上記のdocker run~~コマンドでコンテナを起動して、ブラウザでNginxのWelcomeページが確認できました。

ちなみに使わなくなったdockerイメージは以下のコマンドで削除することができます。

#イメージの削除
docker rmi イメージ名またはイメージID

#イメージの確認
docker images

導入完了

これでDockerの導入が完了しました。 Dockerを導入してやりたいことがあったので、Dockerを導入してみたのですが結構簡単にできたと思います。まだ詳しい使い方や応用方法は分かりませんが、後々使いこなせていけたらと思います。