昨日は雪の影響で早く帰宅したので、自宅で「プログラマのためのDocker教科書」を読んでました。
プログラマのためのDocker教科書 インフラの基礎知識&コードによる環境構築の自動化
- 作者: 阿佐志保,山田祥寛
- 出版社/メーカー: 翔泳社
- 発売日: 2015/11/20
- メディア: 大型本
- この商品を含むブログ (3件) を見る
ちなみに、本書は主にWindows向けに書かれていますが、「Docker for Mac」をインストールしてしまえば、内容を読み替えて読み進めることができます。
可搬性の強さがDockerのウリなので、Macでも問題はありませんでした!
インフラの基礎から学べる
本書のターゲットは、主にプログラマやアプリケーションエンジニアです。ここが面白いところで、普段はプログラムを書くことの多いエンジニアに向けて、執筆されています。
そのため、Dockerの学習に入る前段階として「インフラの基礎」から本書は始まります。
・・・とは言え、本書だけでインフラが学べるかと言うとそこまでではないので、一度は普通にサーバーを構築してみた方が良いかと思います。
インフラに関しては、座学よりも実際にサーバを作ってみる方が学びは多いです。そして、普通に手動でサーバを構築した後にDockerを体験すると、物凄く感動することは間違いありません。
ワンコマンドでサーバが構築されるという世界が、こんなにも快適な空間だったのかと!
まずは単体でDockerを動かす
本書は、まずはDockerで一台のサーバを構築することから始まります。しかしながら、やることは単純であり、難しくありません。
例えば、Webサーバを起動するために以下のようなDockerfileを用意します。
## Dockerfile # CentOS7の公式イメージを利用します FROM centos:7 # yumコマンドを実行してhttpdをインストールします RUN yum install -y httpd # Webサーバを起動します ENTRYPOINT ["/usr/sbin/httpd", "-D", "FOREGROUND"]
作成したDockerfileのあるディレクトリ上で、Dockerfileからイメージを作成して実行するだけで、サーバの起動は完了です。
# イメージを作成します docker build -t sample:1.0 . # イメージから実行します docker run -d -p 8080:80 sample:1.0
docker runのdオプションはデーモン起動のため、すぐにシェルに戻ります。既にサーバは起動している状態です。
pオプションにより、MacBook上の8080番ポートを、立ち上げたDockerコンテナの80番ポートに向けています。そのため、localhostの8080ポートにアクセスすると、Webサーバが起動していることが分かります。
複数のDockerを効率よく管理して動かす
上記のような単体のDockerコマンドにより、何台ものDockerコンテナを立ち上げることは可能です。しかしながら、一つ一つ起動していくのは大変ですので、まとめて管理する方法があります。それが、docker-composeです。
下記はWordPressのDockerコンテナと、MySQLのDockerコンテナを一度に立ち上げる例です。なお、以下の例ではMacBook上の8080番ポート上でWordPressコンテナのHTTPアクセスを受け付け、linksによりWordPressコンテナからMySQLに接続(アクセス)できるようにしています。
## docker-compose.yml webserver: image: wordpress ports: - "8080:80" links: - "dbserver:mysql" dbserver: image: mysql environment: MYSQL_ROOT_PASSWORD: password
詳しい解説は本書に譲りますが、docker-compose.ymlのあるディレクトリ上で「docker-compose up」とするだけで、WordPressコンテナとMySQLコンテナが同時に立ち上がります。
Web三層アーキテクチャ風に言うならば、AppサーバとDBサーバをそれぞれ立ち上げた上で、AppサーバからDBサーバへアクセスできるようにする設定を、たったこれだけのYMLファイルで実現できてしまうわけです。
凄い時代になったものです。
さいごに
詳しい解説は本書を読んでいただきたいところですが、Dockerによる環境構築はすごくお手軽です。特に、ちょっと実験したい時とか、一時的に必要なサーバの構築には最適です。
サーバの立ち上げも、サーバの破棄も、わずか数コマンドで行なうことができます。それに、用意された公式のイメージだけでなく、自作でイメージを作ることも出来ます。
もちろん、通常の構築手順書を再現した、Linuxコマンドを実行しながらのサーバ構築も可能です。
本番環境で採用するためには、Kubernetesなどなど、まだまだ検討すべき事は多いのですが、まずは自分の開発環境から試してみるのが良いかと思います。
私が所属している会社では、各自の開発環境はdokcer-composeで構築しています。postgresqlコンテナや、apacheコンテナ、nginxコンテナなどが稼働中です。
Dockerは、アプリケーションエンジニアがサーバ構築を自動化することで、アプリケーションロジックの開発に集中できるというメリットがあります。「Infrastructure as Code」の全盛期がやってくることは間違いありませんので、まだ未体験の方はぜひ試してみてください。
それでは!
プログラマのためのDocker教科書 インフラの基礎知識&コードによる環境構築の自動化
- 作者: 阿佐志保,山田祥寛
- 出版社/メーカー: 翔泳社
- 発売日: 2015/11/20
- メディア: 大型本
- この商品を含むブログ (3件) を見る