目的
前回の記事で、Docker for Windowsをインストールし、CentOSを起動するところまでできました。
今回は、apache HTTP Serverを起動するまでをご紹介します。
前提条件
コンテナは起動していないものとします。また、centos:latestイメージがすでにダウンロードされているものとします。
C:>docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES C:>docker images REPOSITORY TAG IMAGE ID CREATED SIZE centos latest 49f7960eb7e4 13 days ago 200MB
手順
centos:latestイメージを起動し、httpdパッケージをインストール、起動まで行う
まず、centos:latestイメージにてコンテナを起動します。
なお、ここでは特権モードかつバックグラウンドで起動します。これがないとデーモンが起動できません。
そして、動作しているコンテナ上でbashシェルを起動します。
その後、httpd yumパッケージをインストールします。その後httpdを起動し、かつ自動起動設定まで完了させます。
C:>docker run --privileged -d --name centos centos /sbin/init 6225c18ba8d0ebcd7016d7a180c43e94db99f012a93061a6b4e355126c9b244a
C:>docker exec -it centos /bin/bash
[root@6225c18ba8d0 /]# yum -y install httpd
(省略)
Completed!
[root@6225c18ba8d0 /]# systemctl start httpd
Created symlink from /etc/systemd/system/multi-user.target.wants/httpd.service to /usr/lib/systemd/system/httpd.service.
※ここまで来たら、ctrl+p、ctrl+qを押してシェルを抜けましょう。
これで、 起動までコンテナ上でのhttpdデーモンの起動まで完了しました。
現在のコンテナの状態を永続化する(イメージ化)
今のままではexitするとまた消えてしまいます。この状態をイメージとして取得します。
C:>docker commit 6225c18ba8d0 centos:httpd sha256:7595d7e49532c07e549e0f15f0f2edd1fa8ccf6eb7027d528bc643eab1cefcaf C:>docker images REPOSITORY TAG IMAGE ID CREATED SIZE centos httpd 7595d7e49532 28 seconds ago 308MB centos latest 49f7960eb7e4 13 days ago 200MB
この通り、centos:httpdというイメージが作成されたことがわかります。ここまで来たら、もともとのコンテナは停止しておきます。
C:>docker stop 6225c18ba8d0 6225c18ba8d0 C:>docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
作成したイメージで起動する
さて、httpdが起動するイメージができたので、これをコンテナとして起動します。また、起動するときに80番ポートはWindowsの8080番ポートとしてポートフォワードするようにします。bashにてシェルを起動し、httpdを起動させます。
C:>docker run --privileged -d -p 8080:80 --name httpd centos:httpd /sbin/init
2abf19cab8c4bea375c781e08809ce15da4b4d33ad5a36ef0956e5660356f2bd C:>docker exec -it httpd /bin/bash
[root@2abf19cab8c4 /]# systemctl start httpd
ブラウザからアクセスする
最後です。Windowsのブラウザからhttpdにアクセスしましょう。
を開くと・・。
無事出力されました!
まとめ
Windowsでも、Linuxの開発環境を構築するのはDocker for Windowsを使えば簡単にできることがわかりました。Docker Hubにはたくさんのイメージがアップロードされており、今後もいろいろ試してみたいと思います。