Help us understand the problem. What is going on with this article?

DockerコンテナでApacheサーバーを立てる [初級編]

まずはじめに

もし気に入っていただけたり、役に立ったらぜひ ”いいね!” お待ちしております!
投稿のモチベーションに繋がります^^¥

image.png

この記事の目的

Dockerコンテナを利用してapacheサーバーを立てます。
localhostからアクセスし、apacheのトップ画面が表示されるところまで見ましょう。

Dockerと従来の仮想化

そもそもサーバーの仮想化をご理解されている方には不要かもしれませんが、
一つの物理機を仮想化することで、以下のようなメリットをもたらします。

  • コスト削減

    • サーバ物品調達コストが減らせる
    • スペースを節約できる
    • 電力コストを抑えられる
  • 運用性向上

    • サーバメンテナンスが楽になる
    • VM毎に役割をもたせることで可用性が高まる
    • OS以上でパッチ適用の切り戻しが楽になる

image.png

仮想化の歴史

現在ではストレージ・ネットワークなどのほとんどのものが仮想化され、身近な技術として利用されてきています。
仮想マシン(VM)の歴史は古く、1972年にIBMがメインフレーム用にリリースしたSystem/370までさかのぼるるそうです。

2002年には仮想マシンのための専用OSが登場します。一般的にはハイパーバイザーと呼ばれるものです。

ホスト型とハイパーバイザー型の仮想化

サーバーの仮想化は大きく、 ”ホスト型” と "ハイパーバイザー型"に分けられます。

  • ホスト型
    • OSに仮想化ソフトをインストールし、その上で仮想マシンを動かします。
    • 既存のサーバを使うことができるため、手軽に利用できる
    • ハードウェアにアクセスする際、ホストOSを経由することで余計なオーバーヘッドがかかり、十分な性能がでない
    • 代表的な製品:
      • VMware Palyer, VMWare Fusion, VirtualBox

image.png

  • ハイパーバイザー型
    • サーバーへ直接ハイパーバイザーをインストールし仮想マシンを可動させる方式
    • ホストOSを必要としないため、ハードウェアを直接制御することができる
    • 仮想マシンの速度低下を最小限に抑えることができる
    • 複数の仮想マシンを効率よく可動させるための機能がある
    • 代表的な製品
      • VMWare ESX-i, Microsoft Hyper-V

image.png

image.png

コンテナ型

Dockerがまさにコレです。

  • ホストOSのカーネルを直接利用するため、オーバーヘッドが少なく高速
  • ゲストOSを含まないかつ、アプリケーション/ライブラリをパッケージングしているので、非常に少ないリソースで稼働できる
  • ホストOSに直接アタッチしている反面、セキュリティ上リスクが高め

image.png

Dockerを使っていこう

以前はdocker tools + virtualboxで仮想コンテナを立てていましたが、Docker for Macが登場し、
HyperKitの仮想環境上でdockerコンテナを動かすことができるようになりました。
Docker for MacはDocker公式からダウンロードしましょう。

https://docs.docker.com/docker-for-mac/install/

image.png

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の起動画面が表示されました。

image.png

最後に

如何でしたでしょうか。
Vagrant + VirtualBoxと比べてコンテナの作成 ~ 起動は秒単位で爆速なので、
作ってすぐ壊す開発環境などにも適していると思います。
至らない点もあるかと思いますが、ここまで読んでいただき、ありがとうございました。

次回はDockerfileを使ったIaC(Infrastructure as Code)でのコンテナ作成について書きたいと思います。

Why do not you register as a user and use Qiita more conveniently?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away