LoginSignup
8
10

More than 3 years have passed since last update.

自宅鯖をDocker化+リバースプロキシを導入+WordPress等を立ち上げる

Last updated at Posted at 2021-03-25

はじめに

友人に「やっぱ時代はフロントエンドだよな」とぼやいたら、
「うちのサーバーのCentOS6とかいう化石をちょうどなんかしようかなと思ってたところだからUbuntuにしてSSH接続で好きに使っていいよ」
とありがたいお言葉を頂戴しましたのでイチからサーバーを再構築しています。
環境的にはVPSなど外部のサーバーに対して作業を行ってると思っていただけたら良いです。

追記:
「やってることフロントじゃなくない?」
はいすいません、まずは開発環境の構築かなって… 土台が肝心かなって…

そしてフロントエンドいうからには色々新しいことやるかと思い、
「Ubuntu+Docker+SSL+リバースプロキシ+WordPress」
といった環境を作りました。
半ば無理やりDockerを使おうとしている節もあるので「この構成まずいよ」という指摘があればぜひ教えて下さい。
(私はフロントの知識ゼロです。バックの知識も大してないです。)

参考記事

5年前の記事になりますが、@y_hokkey さんの記事が大変参考になりました。ありがとうございます。
Vagrant・CoreOS・Dockerでインフラ素人が自宅サーバを立てた話 - Qiita

対象とする読者

前提として以下の方を対象としています。

  • 基本的なLinuxの操作を知っている
  • 仮想化・コンテナ技術とは何かを一応知っている
    私もここ1週間くらいで情報収集したので、それくらいの方
  • まだDockerを触ったことのない方
    知っている人からは話が長いかもしれませんご了承ください
  • 本番環境(サーバー)で構築したい方
    「ローカル環境で開発してデプロイ」とは違う運用をしています

記事一覧

かなり長くなると想定し、各作業別に記事を分けて投稿する予定です。
他の記事も投稿次第リンク化します。

環境

  • 自宅サーバー
    • OS: Ubuntu 20.04.2 LTS
  • Docker
    • verison: 20.10.5, build 55c4c88
  • Docker Compose
    • version: 1.28.5, build c4eb3a1
    • ファイルフォーマット: 3.9

本題

長いと思った方はDockerのインストールまで飛ばしてください。

まずDockerとは

Dockerの流れ

概念図-DockerFlow.png

基本的なDockerの流れが上の図です。

Dockerfileをbuildし、Docker Imageが作成されます。
Docker Imageをrunし、Dockerコンテナが立ち上がります。
Dockerfileは図のようにFROM ***と他のDockerfileを継承して作られています。
WordPressのDockerfileなら php:apacheを、
PHPのDockerfileはdebianを・・・
最後はscratchに行き着きますが、これがDockerfileの基本となります。

しかし個人開発の実態としては次の図のとおりでしょう。

概念図-DockerFlow2.png

Docker Hubに既にビルドされたイメージが配布されているので、使いたいイメージをローカル環境にpullし、それら複数のイメージをdocker-composeで立ち上げます。
Docker Hubには基となっているDockefileがGitHub上で公開されています。これを個人でカスタマイズでbuildして利用することも可能です。
runコマンドではなく、Docker Composeを利用するメリットは複数のコンテナを簡単に管理できることです。
一つ一つdocker runで立ち上げることも可能ですが、実際には
docker run -it --rm mysql mysql -hsome.mysql.host -usome-mysql-user -p
といった長いコマンドを複数打たなければいけません。これは現実的ではないのでDocker Composeといったツールが必要になってきます。また様々な設定も可能です。
この様なツールを 「コンテナオーケストレーションツール」 といいます。
Docker ComposeはDockerが公式で用意している簡易的なツールですが、
現在はGoogleが開発した「Kubernetes(クーベネティス)」を代表に様々なツールが開発されています。

個人利用ではDocker Composeで十分といったところでしょうか。

ローカル環境でDockerを使って開発した人はそれをイメージ化しデプロイとなります。(あってる?)

Dockerの構成図

概念図-Page-1.png

上記がスタンダードな構成になるかと思います。

  1. ホスト - 今回のUbuntuサーバーです。
  2. Docker Engine - この中でコンテナを動かします。
  3. Docker Compose - 複数のコンテナを管理してくれるものです。
  4. Docker Hub - イメージリポジトリです。(ユーザーが投稿したものもあります)

そして次に示すのが、本記事の完成図です。

概念図-Page-2のコピー.png
※2021/03/26 画像差し替えました

概念は伝わりましたでしょうか。まだ掴めてないかもしれませんが、次のWordPressを立ち上げる記事でもう少し詳しく説明する予定ですので、実際に動かしてみてわかるかと思います。
次におおまかなディレクトリ構成を下記に示します。

概念図-Directory.png

コンテナは終了してもう一度開始するとデータが初期化されます。そのため「データの永続化」が必要となります。
永続化させることによって、次回起動時もそのファイル群がコンテナ内にマウントされます。
なんとなくイメージは掴んでいただけたでしょうか。

Dockerに関する用語の説明

他にも用語はたくさんありますが、@rawHamさんが「冷凍チャーハン」を例にわかりやすく解説されていますので紹介します。
Dockerについてなるべくわかりやすく説明する - Qiita

また個人的に疑問となったところも紹介します。

Dockerを導入するメリット

ここまでDockerの説明をしましたが、開発環境で導入するメリットは最小単位でコンテナの中で開発できそれを簡単にAWS等にデプロイできるという点です。
では個人の自宅サーバーでDockerを導入するメリットは何でしょうか。
正直ブログともう1個のサービスしかない程度のサーバーでは大したメリットはないように感じます。
「他環境に移行が容易になりそうなこと」「割とトレンド技術であるDockerを学べる」「バックアップが簡単そう」ぐらいしか思いつきません。
もしかしたら知らないうちにメリットを享受しているのかもしれません。
しかしそんなメリットより、初期導入コストが高いように感じます。

まずDockerについて学習しなければならないのと、最初はやたら設定することが多いですし恐らくつまづきます。1回設定したら後はメンテナンス・保守するだけなのでそこは簡単そうですが…。(素人意見です。)
コメントでもいいので自宅鯖でのメリットを誰か教えて下さい😊

(参考)

以上でDockerの説明を終わります。

Dockerのインストール

公式のドキュメントは英語ですが、最新は公式ドキュメントになりますのでそちらを読み進めていただいたほうがよろしいかと思います。
https://docs.docker.com/engine/install/

インストールの方法は3つあります。

  • Docker公式リポジトリを追加してそこからインストール
  • 手動でDEBパッケージをダウンロードしてインストール
  • スクリプトを利用してインストール

今回は公式リポジトリからのインストールで進めます。

また、使用しているOSやディストリビューションでも異なりますので、自分にあったドキュメントをお読みください。
以下はUbuntu環境での説明になります。

必要なパッケージのインストール

sudo apt-get install \
apt-transport-https \
ca-certificates \
curl \
gnupg \
lsb-release
  • apt-transport-https: aptコマンドをHTTPS対応させる
  • ca-certificates: SSL接続に必要
  • curl: URLからファイルを転送するコマンド
  • gnupg: 「Gnu Privacy Guard (GPG)」。公開鍵認証で使う。署名等に使うツール。
  • lsb-release: "lsb = Linux Standard Base" Linuxのバージョン等を表示してくれるツール。

上記パッケージがなければインストール、あればアップデートをします。

リポジトリ追加

DockerのGPG鍵を入手します。
GPGとは・・・リポジトリの正当性を確かめる手段・技術
(参考)GNU Privacy Guard - Wikipedia

curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg

次にリポジトリを追加します。
x86_64 / amd64版です。他のアーキテクチャを利用している方は公式ドキュメントをお読みください。

echo \
"deb [arch=amd64 signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/ubuntu \
$(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null

パッケージインストール

最後に各種Docker関連パッケージをインストールします。
※Docker Composeは含まれておりません。

sudo apt-get update

sudo apt-get install docker-ce docker-ce-cli containerd.io

Hello World

sudo docker run hello-world
実行結果
$ sudo docker run hello-world
[sudo] user のパスワード:

Hello from Docker!
This message shows that your installation appears to be working correctly.

To generate this message, Docker took the following steps:
 1. The Docker client contacted the Docker daemon.
 2. The Docker daemon pulled the "hello-world" image from the Docker Hub.
    (amd64)
 3. The Docker daemon created a new container from that image which runs the
    executable that produces the output you are currently reading.
 4. The Docker daemon streamed that output to the Docker client, which sent it
    to your terminal.

To try something more ambitious, you can run an Ubuntu container with:
 $ docker run -it ubuntu bash

Share images, automate workflows, and more with a free Docker ID:
 https://hub.docker.com/

For more examples and ideas, visit:
 https://docs.docker.com/get-started/

hello world 実行できたらOKです。

Q. Hello Worldイメージはどこからきたの?
A. インストール時に自動的にDocker Hubからダウンロードされています。

Docker Composeインストール

続いてDocker Composeのインストールです。

docker用のユーザの追加

dockerをsudoなしでroot権限で利用するために以下の作業をします。必須ではないようですが、作業が簡単になります。
※root権限なし版(ルートレス)のDockerもあります。
(公式)Post-installation steps for Linux | Docker Documentation

既にある作業用ユーザを流用してもいいですが、Docker用のユーザーを作っても構いません。

まず、dockerグループを作ります。

sudo groupadd docker

次にユーザーをdockerグループに追加します。
<USER>は各人のユーザー名を入れてください。

sudo usermod -aG docker <USER>

sudoなしでdockerを実行できることを確認します。(ユーザーは切り替えてください)

docker run hello-world

実行できればOKです。

Docker Composeのダウンロード

公式ドキュメント↓
Install Docker Compose | Docker Documentation

Docker Compose本体をダウンロードします。

sudo curl -L "https://github.com/docker/compose/releases/download/1.28.6/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose

実行権限をつけます。

sudo chmod +x /usr/local/bin/docker-compose

docker-compose --versionを実行してバージョンが出ればOKです。

$ docker-compose --version
docker-compose version 1.28.5, build c4eb3a1f

おわり

次回はWordPress等を立ち上げます。
来週あたりに書きます。
3/27 書きました↓
自宅鯖のDocker内でWordPressを構築する - Qiita

8
10
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
8
10