Docker for Macで docker入門
随分と前にdockerを少しいじった事はあったのですが、気づいたらいつの間にかDocker for Macなるものが出来てました。
Docker for Macさえインストールすれば、dockerコンテナを動かすためのdocker daemonが起動できるので、昔と違ってVirtual Boxを使ったりする必要がなくなったようですね。
サクっと入門してみました。
Docker for Macインストール
公式サイトからdmgファイルを落としてポチポチするだけです。
Hello Worldしてみます
$ docker run hello-world Unable to find image 'hello-world:latest' locally latest: Pulling from library/hello-world 78445dd45222: Pulling fs layer 78445dd45222: Pull complete Digest: sha256:c5515758d4c5e1e838e9cd307f6c6a0d620b5e07e6f927b07d05f6d12a1ac8d7 Status: Downloaded newer image for hello-world:latest Hello from Docker! This message shows that your installation appears to be working correctly.
通常であれば
- dockerコンテナを構成するためのDockerfileを作る
- docker buildを行なってコンテナイメージを作成する
- docker runしてコンテナを起動する
といった流れが基本ですが、imageがない状態でrunを行うと(docker hubから?)ビルド済みイメージをダウンロードして起動してくれるようです。
上記のコマンドでも「ローカルにイメージがなかったからダウンロードしてきた」という流れが読めます。 ローカルにあるイメージはdocker imagesコマンドで確認ができます。
$ docker images REPOSITORY TAG IMAGE ID CREATED SIZE hello-world latest 48b5124b2768 7 days ago 1.84 kB
(停止中の)コンテナ一覧は docker ps -a で確認できます。
$ docker ps -a CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 4cdf1befef68 hello-world "/hello" 25 minutes ago Exited (0) 25 minutes ago compassionate_agnesi
いらなくなったコンテナは docker rm $CONTAINER ID で削除できます。
$ docker rm 4cdf1befef68
基本的なことはコレくらいですかね。
Nginxを立ち上げてみる
containerに使うOSはalpine linuxがデファクトとなりつつあるようなので、alpine linuxを利用します。 まずは素のappine linuxコンテナを立ち上げてログインできる様にします。
Dockerfile
FROM alpine:latest
Dockerfileを元にビルド
$ docker build -t nginx .
-tでタグ名を指定できます(イメージの名前みたいなもの?) 上のリンクにも書かれていたように起動してインストールに必要な手順を試しながら書き出します。
$ docker run -it nginx sh
試したコマンドを元にDockerfileを作りました。 /var/run/nginxディレクトリがないせいでpidファイルが作れず、nginxデーモンが起動できないので手元からnginx.confをコピーする様にしています。 EXPOSEがlistenポートの指定なので、これで80番ポートでnginxにアクセスできるはずです。
Dockerfile
FROM alpine:latest RUN apk --no-cache add nginx && \ ln -sf /dev/stdout /var/log/nginx/access.log && \ ln -sf /dev/stderr /var/log/nginx/error.log COPY ./nginx.conf /etc/nginx/nginx.conf EXPOSE 80 CMD ["/usr/sbin/nginx", "-g", "daemon off;"]
ファイルを元に再ビルドします。
$ docker build -t nginx
できたイメージでコンテナを立ち上げます。 -pオプションを使うことで、localhostの8080番ポートを80番ポートにフォワードしておきます。
$ docker run --rm -p 8080:80 nginx
ブラウザで http:localhost:8080 にアクセスしてnginxの画面が出たので成功ですね。