DockerコンテナでApacheサーバーを立てる [初級編]
まずはじめに
もし気に入っていただけたり、役に立ったらぜひ ”いいね!” お待ちしております!
投稿のモチベーションに繋がります^^¥
この記事の目的
Dockerコンテナを利用してapacheサーバーを立てます。
localhostからアクセスし、apacheのトップ画面が表示されるところまで見ましょう。
Dockerと従来の仮想化
そもそもサーバーの仮想化をご理解されている方には不要かもしれませんが、
一つの物理機を仮想化することで、以下のようなメリットをもたらします。
-
コスト削減
- サーバ物品調達コストが減らせる
- スペースを節約できる
- 電力コストを抑えられる
-
運用性向上
- サーバメンテナンスが楽になる
- VM毎に役割をもたせることで可用性が高まる
- OS以上でパッチ適用の切り戻しが楽になる
仮想化の歴史
現在ではストレージ・ネットワークなどのほとんどのものが仮想化され、身近な技術として利用されてきています。
仮想マシン(VM)の歴史は古く、1972年にIBMがメインフレーム用にリリースしたSystem/370までさかのぼるるそうです。
2002年には仮想マシンのための専用OSが登場します。一般的にはハイパーバイザーと呼ばれるものです。
ホスト型とハイパーバイザー型の仮想化
サーバーの仮想化は大きく、 ”ホスト型” と "ハイパーバイザー型"に分けられます。
- ホスト型
- OSに仮想化ソフトをインストールし、その上で仮想マシンを動かします。
- 既存のサーバを使うことができるため、手軽に利用できる
- ハードウェアにアクセスする際、ホストOSを経由することで余計なオーバーヘッドがかかり、十分な性能がでない
- 代表的な製品:
- VMware Palyer, VMWare Fusion, VirtualBox
- ハイパーバイザー型
- サーバーへ直接ハイパーバイザーをインストールし仮想マシンを可動させる方式
- ホストOSを必要としないため、ハードウェアを直接制御することができる
- 仮想マシンの速度低下を最小限に抑えることができる
- 複数の仮想マシンを効率よく可動させるための機能がある
- 代表的な製品
- VMWare ESX-i, Microsoft Hyper-V
コンテナ型
Dockerがまさにコレです。
- ホストOSのカーネルを直接利用するため、オーバーヘッドが少なく高速
- ゲストOSを含まないかつ、アプリケーション/ライブラリをパッケージングしているので、非常に少ないリソースで稼働できる
- ホストOSに直接アタッチしている反面、セキュリティ上リスクが高め
Dockerを使っていこう
以前はdocker tools + virtualboxで仮想コンテナを立てていましたが、Docker for Macが登場し、
HyperKitの仮想環境上でdockerコンテナを動かすことができるようになりました。
Docker for MacはDocker公式からダウンロードしましょう。
DockerHubにログインする
してもしなくても大丈夫ですが、後にDockerイメージをリモートのDockerHubに上げることができます。
DockerHubアカウントをお持ちの方は、アカウント名とパスワードを入れることでローカル環境からDockerHubにアクセスできます。
$ docker login
Login with your Docker ID to push and pull images from Docker Hub. If you don't have a Docker ID, head over to https://hub.docker.com to create one.
Username:'YOUR ACCOUNT NAME'
Password:'YOUR PASSWORD'
Login Succeeded
dockerコンテナでubuntuを動かす
主な流れとしては、以下イメージです。
- dockerイメージの取得
- dockerイメージをもとにコンテナを作成
- コンテナの停止/起動を制御
イメージの取得
docker pull 'image名:オプション'
でイメージを取得することが可能です。
latest
を指定すると、最新versionのイメージが取得されます。
$ docker pull ubuntu:latest
latest: Pulling from library/ubuntu
5b7339215d1d: Pull complete
14ca88e9f672: Pull complete
a31c3b1caad4: Pull complete
b054a26005b7: Pull complete
Digest: sha256:9b1702dcfe32c873a770a32cfd306dd7fc1c4fd134adfb783db68defc8894b3c
Status: Downloaded newer image for ubuntu:latest
取得したイメージを確認するには、docker images
を使用します。
$ docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
ubuntu latest 4c108a37151f 5 days ago 64.2MB
コンテナの作成
イメージをもとにコンテナを作成します。
docekr run
をベースに必要なオプションを付帯させて作成します.
-d
デーモンとしてバックグラウンド起動させます。
--name
後ろに来る引数を名前としてつけることができます。
-p
ポートフォワードとIPアドレスを指定します。
$ docker run -d --name test -p 127.0.0.1:10080:80 ubuntu:latest
2f618005774e6d6767e5cd2102785b9a5ec2795aeeb41beccb6d118c58d1f9ca
docker ps -a
ですべてのdockerコンテナを確認します。
ちゃんと作成されていることがわかりました。
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
2f618005774e ubuntu:latest "/bin/bash" 7 seconds ago Exited (0) 6 seconds ago test
コンテナにapacheをインストールする
作成したばかりのdockerコンテナをdocker start 'コンテナID'
で起動させ、
docker attach 'コンテナID'
でコンテナ内を操作しに行きます。
service apache2 start
でapacheを起動させましょう。
$ docker start 2f618005774e
2f618005774e
$ docker attach 2f618005774e
root@97de19e4e9f4:/# apt-get update
root@97de19e4e9f4:/# apt-get install apache2 -y
root@97de19e4e9f4:~# service apache2 status
* apache2 is not running
* root@97de19e4e9f4:~# service apache2 start
* Starting Apache httpd web server apache2 AH00558: apache2: Could not reliably determine the server's fully qualified domain name, using 172.17.0.2. Set the 'ServerName' directive globally to suppress this message
ローカルホストにアクセスする
ポートフォワードで指定した127.0.0.1:10080
にアクセスすると、apacheの起動画面が表示されました。
最後に
如何でしたでしょうか。
Vagrant + VirtualBoxと比べてコンテナの作成 ~ 起動は秒単位で爆速なので、
作ってすぐ壊す開発環境などにも適していると思います。
至らない点もあるかと思いますが、ここまで読んでいただき、ありがとうございました。
次回はDockerfileを使ったIaC(Infrastructure as Code)でのコンテナ作成について書きたいと思います。
Author And Source
この問題について(DockerコンテナでApacheサーバーを立てる [初級編]), 我々は、より多くの情報をここで見つけました https://qiita.com/tnoce/items/6a066043c5d4e3a955d6著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .