Dockerを用いてSwaggerを試す 〜準備する〜

iOSエンジニアの德光です。 Swaggerを試してみたくなったので、環境を手軽に作ってみようと思い、いろいろ…

iOSエンジニアの德光です。

Swaggerを試してみたくなったので、環境を手軽に作ってみようと思い、いろいろググって試してみています。
とりあえず、Docker向けのSwagger Editorというのがあるらしいので、それを使うのがお手軽らしい。
で、Dockerってなんだ?

◆Docker

「オープンソースな、コンテナ型の仮想化環境」ってなことらしい。
その昔、VirtualPCとかでデータ投入直後のテスト環境を作成して、その後の検証用に固めて残しておいたようなことかな?

▼Install Docker for Mac

 Install Docker for Macより、おとなしく「Stable channel」を拾っておく
・ダウンロード完了したら、その【Docker.dmg】をマウントして、指示にしたがってApplicationフォルダにコピー(or 良き場所に移動)して、実行させてみる
・「$ docker version」とか試してみろと促されたので、ターミナルひらいて「docker version」を叩き、実行できるか動作確認してみる

▽動作確認:

・アプリとしてDocker起動させると、上部メニューの右上のほうに、クジラみたいなタスクアイコンが追加されているので、「Documentation」を選択してみる
・標準ブラウザが開いて [ https://docs.docker.com/docker-for-mac/ ] が表示されるので、「Explore the application」に従ってみる
・てなわけで「docker run hello-world」を実行してみると、初回にはイメージの取得とかも勝手にやってくれるんだよってのが確認できるかと。

$ docker run hello-world
Unable to find image 'hello-world:latest' locally
latest: Pulling from library/hello-world
ca4f61b1923c: Pull complete 
Digest: sha256:97ce6fa4b6cdc0790cda65fe7290b74cfebd9fa0c9b8c38e979330d547d22ce1
Status: Downloaded newer image for hello-world:latest

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://cloud.docker.com/

For more examples and ideas, visit:
 https://docs.docker.com/engine/userguide/

◆Nginx

「えぬじーいんくす」ってなんだろう……って思っていたら、「えんじんえっくす」って読むらしい。
あー、それなら聞いたことはありますよ。Webサーバだったのかー。
ApacheがHTTP特化型で、Webサーバとしての機能が盛りだくさんなのに対して、Nginxは省メモリでリバースプロキシに対応していて、モジュール次第で何にでもなれると。
Apacheのクライアント1万台問題も軽く超えられるってなことらしい。

▽nginx環境を動かしてみる

・続いて試せと言われている「docker run -d -p 80:80 –name webserver nginx」として試してみるよ。
・っと、この環境ではすでにポート80で他のサーバが動いているので、やっぱり怒られちゃったな。
てなわけで、削除したいなーと思ったんだけど。「docker images」でイメージの確認すると「nginx」が表示されているので
「docker rmi nginx」で除去ってみる。。。と、「Error response from daemon: conflict: unable to remove repository reference “nginx” (must force) – container e669ac4c666a is using its referenced image 7f70b30f2cc6」ってな感じで使われてるからダメだよと。
「docker container ls -a」で確認すると、確かにdaemon登録はされているので、まずは「webserver」を除去る必要があるのかな?

CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS                      PORTS               NAMES
e669ac4c666a        nginx               "nginx -g 'daemon of…"   2 minutes ago       Created                                         webserver
$ docker rm webserver
$ docker container ls -a

で除去されたことを確認してから、あらためてイメージの削除

$ docker rmi nginx
Untagged: nginx:latest
Untagged: nginx@sha256:c4ee0ecb376636258447e1d8effb56c09c75fe7acf756bf7c13efadf38aa0aca
Deleted: sha256:7f70b30f2cc66b5e23308fb20c6e57dc1ea0c47950cca797831b705177c6b8ce
Deleted: sha256:63b023b1f0ee22fc362b607efe175f40834bd85cb9e4bf7b9a9fa489ceeaaa83
Deleted: sha256:1f03d46fb13f5a8835f4a584c4d1170799cb856c91d36691242a7fdb2ba61837
Deleted: sha256:3358360aedad76edf49d0022818228d959d20a4cccc55d01c32f8b62e226e2c2

として、まるっと削除完了。
…っと、これってやりすぎなんじゃないか?

$ docker run -d -p 8080:80 --name webserver nginx
$ docker ps
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS                  NAMES
b94a37a4cc67        nginx               "nginx -g 'daemon of…"   49 seconds ago      Up 48 seconds       0.0.0.0:8080->80/tcp   webserver

よしよし、今度はちゃんと8080ポートで動作開始できたようだぞっと。
ブラウザ起動して、「http://localhost:8080/」を表示させてみると、ちゃんと「Welcome to nginx!」って表示されてるし!

では、イメージじゃなく、コンテナだけ殺しましょうと。

$ docker rm webserver
Error response from daemon: You cannot remove a running container b94a37a4cc6752338cd8db5dbe337e06d339a196dec3b5a25cc04371a7aede6c. Stop the container before attempting removal or force remove

あ、はい。

$ docker ps
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS                  NAMES
b94a37a4cc67        nginx               "nginx -g 'daemon of…"   3 minutes ago       Up 3 minutes        0.0.0.0:8080->80/tcp   webserver

$ docker stop webserver
webserver

$ docker ps
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS                  NAMES

よしよし、なんかわかってきたぞと。

長くなってきたので、とりあえずDockerを入れたところでおしまい。
いよいよ次回、Swagger-Editorを使ってみるのです。