<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Docker | 藤原工房</title>
	<atom:link href="https://fujiwarakoubou.jp/tag/docker/feed/" rel="self" type="application/rss+xml" />
	<link>https://fujiwarakoubou.jp</link>
	<description>とあるアプリ開発者のブログ</description>
	<lastBuildDate>Wed, 17 Apr 2024 16:24:25 +0000</lastBuildDate>
	<language>ja</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	<generator>https://wordpress.org/?v=6.9.4</generator>

<image>
	<url>https://i0.wp.com/fujiwarakoubou.jp/wp-content/uploads/2017/10/cropped-job_programmer.png?fit=32%2C32&#038;ssl=1</url>
	<title>Docker | 藤原工房</title>
	<link>https://fujiwarakoubou.jp</link>
	<width>32</width>
	<height>32</height>
</image> 
<atom:link rel="hub" href="https://pubsubhubbub.appspot.com"/>
<atom:link rel="hub" href="https://pubsubhubbub.superfeedr.com"/>
<atom:link rel="hub" href="https://websubhub.com/hub"/>
<atom:link rel="self" href="https://fujiwarakoubou.jp/tag/docker/feed/"/>
<site xmlns="com-wordpress:feed-additions:1">117887618</site>	<item>
		<title>さくらのVPSでサーバーを壊しちゃったのでDockerSwarmを導入してWordPressを再構築してみた</title>
		<link>https://fujiwarakoubou.jp/2020/07/20/wordpress-on-docker-swarm/</link>
					<comments>https://fujiwarakoubou.jp/2020/07/20/wordpress-on-docker-swarm/#respond</comments>
		
		<dc:creator><![CDATA[fujiwarakoubou]]></dc:creator>
		<pubDate>Mon, 20 Jul 2020 14:52:55 +0000</pubDate>
				<category><![CDATA[サーバー]]></category>
		<category><![CDATA[Docker]]></category>
		<guid isPermaLink="false">https://fujiwarakoubou.jp/?p=890</guid>

					<description><![CDATA[<p>きっかけは、さくらのVPSをスケールアップしたときストレージが増えたはずなのに、サーバーではそれが反映されてない（容量が少ないまま）って記事を見つけたのが始まりです。 「あれ？1Gプランにして、ストレージが50GBに増え [&#8230;]</p>
The post <a href="https://fujiwarakoubou.jp/2020/07/20/wordpress-on-docker-swarm/">さくらのVPSでサーバーを壊しちゃったのでDockerSwarmを導入してWordPressを再構築してみた</a> first appeared on <a href="https://fujiwarakoubou.jp">藤原工房</a>.]]></description>
										<content:encoded><![CDATA[<p><a class="a2a_button_hatena" href="https://www.addtoany.com/add_to/hatena?linkurl=https%3A%2F%2Ffujiwarakoubou.jp%2F2020%2F07%2F20%2Fwordpress-on-docker-swarm%2F&amp;linkname=%E3%81%95%E3%81%8F%E3%82%89%E3%81%AEVPS%E3%81%A7%E3%82%B5%E3%83%BC%E3%83%90%E3%83%BC%E3%82%92%E5%A3%8A%E3%81%97%E3%81%A1%E3%82%83%E3%81%A3%E3%81%9F%E3%81%AE%E3%81%A7DockerSwarm%E3%82%92%E5%B0%8E%E5%85%A5%E3%81%97%E3%81%A6WordPress%E3%82%92%E5%86%8D%E6%A7%8B%E7%AF%89%E3%81%97%E3%81%A6%E3%81%BF%E3%81%9F" title="Hatena" rel="nofollow noopener" target="_blank"></a><a class="a2a_button_facebook" href="https://www.addtoany.com/add_to/facebook?linkurl=https%3A%2F%2Ffujiwarakoubou.jp%2F2020%2F07%2F20%2Fwordpress-on-docker-swarm%2F&amp;linkname=%E3%81%95%E3%81%8F%E3%82%89%E3%81%AEVPS%E3%81%A7%E3%82%B5%E3%83%BC%E3%83%90%E3%83%BC%E3%82%92%E5%A3%8A%E3%81%97%E3%81%A1%E3%82%83%E3%81%A3%E3%81%9F%E3%81%AE%E3%81%A7DockerSwarm%E3%82%92%E5%B0%8E%E5%85%A5%E3%81%97%E3%81%A6WordPress%E3%82%92%E5%86%8D%E6%A7%8B%E7%AF%89%E3%81%97%E3%81%A6%E3%81%BF%E3%81%9F" title="Facebook" rel="nofollow noopener" target="_blank"></a><a class="a2a_button_twitter" href="https://www.addtoany.com/add_to/twitter?linkurl=https%3A%2F%2Ffujiwarakoubou.jp%2F2020%2F07%2F20%2Fwordpress-on-docker-swarm%2F&amp;linkname=%E3%81%95%E3%81%8F%E3%82%89%E3%81%AEVPS%E3%81%A7%E3%82%B5%E3%83%BC%E3%83%90%E3%83%BC%E3%82%92%E5%A3%8A%E3%81%97%E3%81%A1%E3%82%83%E3%81%A3%E3%81%9F%E3%81%AE%E3%81%A7DockerSwarm%E3%82%92%E5%B0%8E%E5%85%A5%E3%81%97%E3%81%A6WordPress%E3%82%92%E5%86%8D%E6%A7%8B%E7%AF%89%E3%81%97%E3%81%A6%E3%81%BF%E3%81%9F" title="Twitter" rel="nofollow noopener" target="_blank"></a><a class="a2a_button_line" href="https://www.addtoany.com/add_to/line?linkurl=https%3A%2F%2Ffujiwarakoubou.jp%2F2020%2F07%2F20%2Fwordpress-on-docker-swarm%2F&amp;linkname=%E3%81%95%E3%81%8F%E3%82%89%E3%81%AEVPS%E3%81%A7%E3%82%B5%E3%83%BC%E3%83%90%E3%83%BC%E3%82%92%E5%A3%8A%E3%81%97%E3%81%A1%E3%82%83%E3%81%A3%E3%81%9F%E3%81%AE%E3%81%A7DockerSwarm%E3%82%92%E5%B0%8E%E5%85%A5%E3%81%97%E3%81%A6WordPress%E3%82%92%E5%86%8D%E6%A7%8B%E7%AF%89%E3%81%97%E3%81%A6%E3%81%BF%E3%81%9F" title="Line" rel="nofollow noopener" target="_blank"></a><a class="a2a_button_reddit" href="https://www.addtoany.com/add_to/reddit?linkurl=https%3A%2F%2Ffujiwarakoubou.jp%2F2020%2F07%2F20%2Fwordpress-on-docker-swarm%2F&amp;linkname=%E3%81%95%E3%81%8F%E3%82%89%E3%81%AEVPS%E3%81%A7%E3%82%B5%E3%83%BC%E3%83%90%E3%83%BC%E3%82%92%E5%A3%8A%E3%81%97%E3%81%A1%E3%82%83%E3%81%A3%E3%81%9F%E3%81%AE%E3%81%A7DockerSwarm%E3%82%92%E5%B0%8E%E5%85%A5%E3%81%97%E3%81%A6WordPress%E3%82%92%E5%86%8D%E6%A7%8B%E7%AF%89%E3%81%97%E3%81%A6%E3%81%BF%E3%81%9F" title="Reddit" rel="nofollow noopener" target="_blank"></a><a class="a2a_button_whatsapp" href="https://www.addtoany.com/add_to/whatsapp?linkurl=https%3A%2F%2Ffujiwarakoubou.jp%2F2020%2F07%2F20%2Fwordpress-on-docker-swarm%2F&amp;linkname=%E3%81%95%E3%81%8F%E3%82%89%E3%81%AEVPS%E3%81%A7%E3%82%B5%E3%83%BC%E3%83%90%E3%83%BC%E3%82%92%E5%A3%8A%E3%81%97%E3%81%A1%E3%82%83%E3%81%A3%E3%81%9F%E3%81%AE%E3%81%A7DockerSwarm%E3%82%92%E5%B0%8E%E5%85%A5%E3%81%97%E3%81%A6WordPress%E3%82%92%E5%86%8D%E6%A7%8B%E7%AF%89%E3%81%97%E3%81%A6%E3%81%BF%E3%81%9F" title="WhatsApp" rel="nofollow noopener" target="_blank"></a><a class="a2a_button_pocket" href="https://www.addtoany.com/add_to/pocket?linkurl=https%3A%2F%2Ffujiwarakoubou.jp%2F2020%2F07%2F20%2Fwordpress-on-docker-swarm%2F&amp;linkname=%E3%81%95%E3%81%8F%E3%82%89%E3%81%AEVPS%E3%81%A7%E3%82%B5%E3%83%BC%E3%83%90%E3%83%BC%E3%82%92%E5%A3%8A%E3%81%97%E3%81%A1%E3%82%83%E3%81%A3%E3%81%9F%E3%81%AE%E3%81%A7DockerSwarm%E3%82%92%E5%B0%8E%E5%85%A5%E3%81%97%E3%81%A6WordPress%E3%82%92%E5%86%8D%E6%A7%8B%E7%AF%89%E3%81%97%E3%81%A6%E3%81%BF%E3%81%9F" title="Pocket" rel="nofollow noopener" target="_blank"></a><a class="a2a_button_linkedin" href="https://www.addtoany.com/add_to/linkedin?linkurl=https%3A%2F%2Ffujiwarakoubou.jp%2F2020%2F07%2F20%2Fwordpress-on-docker-swarm%2F&amp;linkname=%E3%81%95%E3%81%8F%E3%82%89%E3%81%AEVPS%E3%81%A7%E3%82%B5%E3%83%BC%E3%83%90%E3%83%BC%E3%82%92%E5%A3%8A%E3%81%97%E3%81%A1%E3%82%83%E3%81%A3%E3%81%9F%E3%81%AE%E3%81%A7DockerSwarm%E3%82%92%E5%B0%8E%E5%85%A5%E3%81%97%E3%81%A6WordPress%E3%82%92%E5%86%8D%E6%A7%8B%E7%AF%89%E3%81%97%E3%81%A6%E3%81%BF%E3%81%9F" title="LinkedIn" rel="nofollow noopener" target="_blank"></a><a class="a2a_button_pinterest" href="https://www.addtoany.com/add_to/pinterest?linkurl=https%3A%2F%2Ffujiwarakoubou.jp%2F2020%2F07%2F20%2Fwordpress-on-docker-swarm%2F&amp;linkname=%E3%81%95%E3%81%8F%E3%82%89%E3%81%AEVPS%E3%81%A7%E3%82%B5%E3%83%BC%E3%83%90%E3%83%BC%E3%82%92%E5%A3%8A%E3%81%97%E3%81%A1%E3%82%83%E3%81%A3%E3%81%9F%E3%81%AE%E3%81%A7DockerSwarm%E3%82%92%E5%B0%8E%E5%85%A5%E3%81%97%E3%81%A6WordPress%E3%82%92%E5%86%8D%E6%A7%8B%E7%AF%89%E3%81%97%E3%81%A6%E3%81%BF%E3%81%9F" title="Pinterest" rel="nofollow noopener" target="_blank"></a><a class="a2a_dd addtoany_share_save addtoany_share" href="https://www.addtoany.com/share#url=https%3A%2F%2Ffujiwarakoubou.jp%2F2020%2F07%2F20%2Fwordpress-on-docker-swarm%2F&#038;title=%E3%81%95%E3%81%8F%E3%82%89%E3%81%AEVPS%E3%81%A7%E3%82%B5%E3%83%BC%E3%83%90%E3%83%BC%E3%82%92%E5%A3%8A%E3%81%97%E3%81%A1%E3%82%83%E3%81%A3%E3%81%9F%E3%81%AE%E3%81%A7DockerSwarm%E3%82%92%E5%B0%8E%E5%85%A5%E3%81%97%E3%81%A6WordPress%E3%82%92%E5%86%8D%E6%A7%8B%E7%AF%89%E3%81%97%E3%81%A6%E3%81%BF%E3%81%9F" data-a2a-url="https://fujiwarakoubou.jp/2020/07/20/wordpress-on-docker-swarm/" data-a2a-title="さくらのVPSでサーバーを壊しちゃったのでDockerSwarmを導入してWordPressを再構築してみた"></a></p>
<p>きっかけは、さくらのVPSをスケールアップしたときストレージが増えたはずなのに、サーバーではそれが反映されてない（容量が少ないまま）って記事を見つけたのが始まりです。</p>



<p>「あれ？1Gプランにして、ストレージが50GBに増えたはずなのに、内部的には25GBしか使えてないな」</p>



<p>「それじゃ、さくらのVPSのスケールアップの反映について公式マニュアルがあるから、これを参考にやってみるか」</p>



<p>中略</p>



<p>「・・・再起動しても、OSが立ち上がってこない<img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f97a.png" alt="🥺" class="wp-smiley" style="height: 1em; max-height: 1em;" />」</p>



<span id="more-890"></span>



<h2 class="wp-block-heading">何をやってしまったか</h2>



<p>あまりも馬鹿としか言いようがないミスなんですが、以下の文章を読んで、自分はこう考えてしまったんです。</p>



<div class="wp-block-snow-monkey-blocks-box smb-box" style="--smb-box--background-color:#e9f2f9;--smb-box--background-opacity:1;--smb-box--border-color:#55c3dc;--smb-box--border-width:1px"><div class="smb-box__background"></div><div class="smb-box__body has-global-padding is-layout-constrained wp-block-snow-monkey-blocks-box-is-layout-constrained">
<p>最後にOSを再起動してもマウントできるように、 /etc/fstab に設定を追加します。</p>



<p class="has-normal-font-size"># id=$(blkid -o value -s UUID /dev/vda5)<br># echo &#8220;UUID=${id} /data ext4 defaults 0 2&#8221; &gt;&gt; /etc/fstab</p>



<p><a href="https://vps-news.sakura.ad.jp/scaleup/disk-expansion_centos7">https://vps-news.sakura.ad.jp/scaleup/disk-expansion_centos7</a></p>
</div></div>



<div style="height:50px" aria-hidden="true" class="wp-block-spacer"></div>



<p>思考停止状態の私「えーっと、fstabに追加ね」「コピペして・・・vi /etc/fstabっと」</p>



<p>冷静に見れば直ぐに気付きます。</p>



<p>これが「設定内容ではなく」「コマンドを入力すること」だということに・・・</p>



<p>憐れ思考停止状態の私は、コマンド出力からのファイル書き込みを、fstabにコマンドを直接書き込んで再起動してしまったのです。・・・馬鹿としか言いようがない。</p>



<h2 class="wp-block-heading">再起動してどうなったか</h2>



<p>「Booting from Hard Disk…」</p>



<p>さくらのVPS、VNCコンソールに表示される最後の一文がピクリともしない。</p>



<p>待てども待てどもOSが立ち上がってこない。</p>



<p>05分後の私「ファイルシステムの更新って時間がかかるんだな」</p>



<p>10分後の私「うーん、VPSだから時間がかかるのかなぁ・・・」</p>



<p>30分後の私「・・・やべぇ明らかにおかしい」</p>



<h2 class="wp-block-heading">復旧させようと試みるが</h2>



<p>何度再起動したり、シャットダウン→起動しても変化が無いことに焦った私は、ついにサポートに聞いてみることにした。</p>



<p>コロナの影響で、電話窓口は閉じており、チャット相談もさくらのVPSは対象外ということで、メールでの問い合わせになった。</p>



<p>パニック状態の私「公式マニュアル通りにやったのに再起動しません。どうすればいいでしょうか？」</p>



<p>改めて振り返ると、いわゆる「何もしてないのに壊れた」ですねこれ。恥ずかしい。</p>



<p>メールの返信は「カスタムOSにてインストールされたOSは対象外になります。」という門前払い的な内容が営業時間終了後（メールを送信したのは13時）に届いた。</p>



<p>私は「酷いじゃないか」と頭にきて、「ほら、OSインストール画面だと標準OSってなってる（ただの勘違い）」「カスタムOSってどこで確認したんですか？」と怒りの返信。</p>



<p>メールを送信してから次の日の返信を待っている間、私は冷静になり始め、そこで初めてfstabの誤記入に気付いて事態の深刻さを思い知る。やっちまったと。</p>



<p>怒りのメール返信を「もういいです。やっぱり自分で解決します。」って取り下げて（サポートが受けれない事実はショックだったので、メール文面がひねくれています）、自分の力で何とかしようと悪戦苦闘を始める。</p>



<p>その時に参考になったサイト様です。</p>



<div class="wp-block-snow-monkey-blocks-box smb-box" style="--smb-box--background-color:#e9f2f9;--smb-box--background-opacity:1;--smb-box--border-color:#55c3dc;--smb-box--border-width:1px"><div class="smb-box__background"></div><div class="smb-box__body has-global-padding is-layout-constrained wp-block-snow-monkey-blocks-box-is-layout-constrained">
<p>さくらのVPSでやらかしてから復旧させたはなし</p>



<p><a href="https://qiita.com/qyen/items/948aafee25e5c314dc21">https://qiita.com/qyen/items/948aafee25e5c314dc21</a></p>
</div></div>



<h2 class="wp-block-heading">しかし現実は非情である</h2>



<p>あれやこれやと試してみるが、結局進展はせず、ただ時間だけを浪費していく。</p>



<p>そこで私は復旧を諦め、最初からサーバーを建て直すことをようやく決心する。</p>



<p>幸いにも、サーバーはまだWordpressしか使っておらず、またWordpressのバックアップはUpdraftPlusにて全て保存済みであったので、理論的には元に戻すのはそう難しい話ではなかった。</p>



<div class="wp-block-snow-monkey-blocks-box smb-box" style="--smb-box--background-color:#e9f2f9;--smb-box--background-opacity:1;--smb-box--border-color:#55c3dc;--smb-box--border-width:1px"><div class="smb-box__background"></div><div class="smb-box__body has-global-padding is-layout-constrained wp-block-snow-monkey-blocks-box-is-layout-constrained">
<p>UpdraftPlus WordPress Backup Plugin</p>



<p><a href="https://ja.wordpress.org/plugins/updraftplus/">https://ja.wordpress.org/plugins/updraftplus/</a></p>
</div></div>



<div style="height:50px" aria-hidden="true" class="wp-block-spacer"></div>



<p>・・・しかし、ここで欲張りモードが発動する。</p>



<p>「せっかく再構築するんだから、Docker Swarmを使ってみよう」</p>



<p>そもそも、事の発端になったスケールアップのトラブルが発生したきっかけは、Wordpress内の警告に「PHP7.0と古いので更新してください」という文言を発見してしまったことだ。</p>



<p>そして、Dockerコンテナで運用されているこのホームページを、どうやって新しいPHPでホットデプロイ（Wordpressがメンテ状態にならないままアップデート）するかを調べていた。</p>



<p>本来の目的はWordpressコンテナをPHP7.3に更新することであった。</p>



<p>「Dockerコンテナをホットデプロイするにはどうしたら？」</p>



<p>「Wordpressコンテナを2個（replica 2）たてて、片方を起動しながら、もう片方を更新する」</p>



<p>「Docker Swarmを使えば簡単に構築できるらしい」</p>



<p>となれば、やってみたくなるのが心情（技術向上への強迫観念）である。</p>



<div class="wp-block-snow-monkey-blocks-alert smb-alert smb-alert--warning"><div class="smb-alert__title"><i class="fa-solid fa-circle-exclamation"></i><strong>サーバーを破壊したくなければ、/etc/fstabは思考停止状態で扱うな！</strong></div><div class="smb-alert__body has-global-padding is-layout-constrained wp-block-snow-monkey-blocks-alert-is-layout-constrained">
<p></p>
</div></div>



<h2 class="wp-block-heading">Docker Swarm と Kubernetes (k8s) どっち？</h2>



<p>「Docker Swarm について調べて見よう」</p>



<p>「何か Docker Swarm はもうオワコンらしい」「今は Kubernetes が流行り」</p>



<p>「それじゃ Kubernetes を勉強しよう」</p>



<p>「k8s ってホットデプロイできない？」「k8s の拡張ツールとかならできるらしい」</p>



<p>「なんか k8s 自体はそうでもないけど、ホットデプロイとなると複雑で面倒そう」</p>



<p>「Docker Swarm なら簡単そうやな」</p>



<p>「やっぱ今回は Docker Swarm を使うのさ、たとえオワコンでも！」</p>



<p>技術向上への強迫観念はどこへ行ったのか、面倒そうと思ってしまったが最後、簡単に楽な道へと進んでしまうのだ。</p>



<p>これは後から分かったことなのだが、Swarm も k8s も、コンテナ構築の手順や複雑さは、そう差は無い。どちらもDockerコンテナを使う以上、 docker-compose でコンテナの構築を行うのだが、composeを使った時点で9割やることは終わったようなもの。</p>



<p>Swarm と k8s の違いを感じたところは、用語と、初期設定と、環境構築ぐらいである。どちらも、そこに拡張ツールなどを付け加えて「やれること」を増やしていく感じなのだ。</p>



<div class="wp-block-snow-monkey-blocks-faq smb-faq"><div class="smb-faq__body">
<div class="wp-block-snow-monkey-blocks-faq-item smb-faq__item wp-block-snow-monkey-blocks-faq--item"><div class="smb-faq__item__question"><div class="smb-faq__item__question__label">Q</div><div class="smb-faq__item__question__body">じゃあ何で Docker Swarm にしたの？</div></div><div class="smb-faq__item__answer"><div class="smb-faq__item__answer__label">A</div><div class="smb-faq__item__answer__body has-global-padding is-layout-constrained wp-block-snow-monkey-blocks-faq-item-is-layout-constrained">
<p>書いてあったサンプルがそのまま使えそうなサイトが見つかったから</p>
</div></div></div>
</div></div>



<h2 class="wp-block-heading">それじゃ Docker Swarm をやっていきますか</h2>



<p>OSをクリーンインストールし、DockerがCentOS8にまだ対応してないので、また同じCentOS7にしました。そこから、ssh、firewall、user、wheelなど面倒だけどやらないといけない設定をあれやこれやと済まし。</p>



<div class="wp-block-snow-monkey-blocks-box smb-box" style="--smb-box--background-color:#ebfaf2;--smb-box--background-opacity:1;--smb-box--border-color:#c7fbd6;--smb-box--border-width:1px"><div class="smb-box__background"></div><div class="smb-box__body has-global-padding is-layout-constrained wp-block-snow-monkey-blocks-box-is-layout-constrained">
<p>sudo yum install -y docker-ce</p>
</div></div>



<div style="height:50px" aria-hidden="true" class="wp-block-spacer"></div>



<p>Docker の最新版をインストール。最新のは、これだけで他にも必要な、docker-ce-cli、containerd-ioも一緒にインストールされていた。</p>



<div class="wp-block-snow-monkey-blocks-box smb-box" style="--smb-box--background-color:#ebfaf2;--smb-box--background-opacity:1;--smb-box--border-color:#c7fbd6;--smb-box--border-width:1px"><div class="smb-box__background"></div><div class="smb-box__body has-global-padding is-layout-constrained wp-block-snow-monkey-blocks-box-is-layout-constrained">
<p>sudo curl -L &#8220;https://github.com/docker/compose/releases/download/1.26.1/docker-compose-$(uname -s)-$(uname -m)&#8221; -o /usr/local/bin/docker-compose</p>
</div></div>



<div style="height:50px" aria-hidden="true" class="wp-block-spacer"></div>



<p>Docker Compose もインストール。自分は上記の通り1.26.1だったが、今は1.26.2が最新版ということで、ここのバージョン番号は時間と共に変動するのだ。</p>



<p>Swarm に関しては、Docker をインストールすれば使えるようになる。</p>



<div class="wp-block-snow-monkey-blocks-box smb-box" style="--smb-box--background-color:#ebfaf2;--smb-box--background-opacity:1;--smb-box--border-color:#c7fbd6;--smb-box--border-width:1px"><div class="smb-box__background"></div><div class="smb-box__body has-global-padding is-layout-constrained wp-block-snow-monkey-blocks-box-is-layout-constrained">
<p>sudo docker swarm init</p>
</div></div>



<div style="height:50px" aria-hidden="true" class="wp-block-spacer"></div>



<p>Swarm の初期設定はこれで終わりである。オプションとして、listen-addでネットワークの制限があるサーバーに対しての設定が必要だったりするが、サーバー1台しか持っとらんし、ネットワークの制限なんぞも無い。これで完了。</p>



<p>これを実行すると、「To add a worker to this swarm, run the following command: docker swarm join &#8211;token ・・・」みたいな文章が表示される。</p>



<p>Swarmは、簡単に言えば、サーバー全体を管理するManagerサーバー、その他管理される側のWorkerサーバーで構成されていて、これを使ってネットワーク的に離れた場所のサーバー同士を1台のサーバーのように構成することができる。</p>



<p>「swarm init」したサーバーがManagerになるので、先ほどの文言は、他のサーバーをWorkerとして構成に追加（join）したければ、このコマンドを使ってねという感じである。</p>



<p>だが、サーバーが1台しかない自分の環境では全く関係のない話。</p>



<h2 class="wp-block-heading">あれ？Docker Swarmってこれで出番終わり？</h2>



<p>Swarm の主目的は、ネットワークを介して離れたサーバー同士をつなぐために使うものなのだが、私はサーバー1台の中に、ManagerとWorkerを混在できると勘違いしていた。</p>



<p>「This node is already part of a swarm. Use &#8220;docker swarm leave&#8221; to leave this swarm and join another one.って出るな」</p>



<p>「MangerとWorkerは同じサーバーに設定できないか」</p>



<p>「あれ？Swarmの機能を使ってなくない？」</p>



<p>「でもホットデプロイのサイトでSwarm使ってるのにな」</p>



<p>「docker service createとかupdateとかってSwarmが必要なのかな？」</p>



<p>「<a href="https://docs.docker.com/engine/reference/commandline/service_create/">This command works with the Swarm orchestrator.</a> って書いてあるから関係あるっぽい？」</p>



<p>「なんだかよく分からんがSwarm使う意味はあるっぽいのでヨシ！」</p>



<h2 class="wp-block-heading">よし、あとはhttps-portalとか使って・・・ん？</h2>



<p>以前までは、通信のHTTPS化にhttps-portalコンテナ、あとWordpressコンテナ、MySQLコンテナをlinkで繋いで、はいお終い！だった。</p>



<p>しかし、今回はホットデプロイのために、Wordpressコンテナを2個用意して、それをdocker service update でローリングアップデートさせる野望があった。</p>



<p>コンテナが2個に増えたので、通信はSwarmのロードバランサーによって振り分けられる。そこで問題になるのが、セッションである。</p>



<p>Swarmがコンテナの状態を見て通信を振り分けるのだが、これは1回の通信ごとであるようだ。そのときにセッションは維持されない（ようだった）。</p>



<p>例えば、Wordpressのダッシュボードを開くためにログインするが、ログイン状態はセッションが使われている。つまりセッションが維持されないと、何かダッシュボード内のリンクをクリックするたびにセッションが途切れ、またログイン画面に戻されてしまうのだ！</p>



<p>https-portalを調べたところ、セッションについて言及されていないので、このコンテナはセッションが維持される（普通はそう）前提なのだ。このままでは不味い。</p>



<p>Swarm でセッションを維持するような追加設定はないらしい（なんじゃそりゃ）。</p>



<p>そういうときは「traefikを使うといいよ」という記事が多かった。</p>



<h2 class="wp-block-heading">ここから大苦戦のはじまり</h2>



<p>Swarm なんじゃこいつ役に立たんやんけ、ってことで、どうやってセッションを維持させつつhttps化をすればいいんじゃ・・・って悩んでいたところ、traefikというSwarmを拡張するコンテナを見つけた。</p>



<p>・・・だが、このtraefik、かなりの曲者だったのだ。</p>



<p>ちなみに k8s も同じようにセッション問題があり、ingress というネットワークコントローラ（その正体はnginx？）をかぶせることで解決しているようです。</p>



<p>Swarmもk8sも本体は役立たずなんじゃないか？・・・あんまりdisってると、まさかりが飛んでくるかな。</p>



<p>・・・さて、traefikとは何者なのか。</p>



<p>traefikは、Dockerコンテナで、Swarmのロードバランシングを無視して通信を振り分けるロードバランサです。ようはSwarmが使えねぇんでネットワークを乗っ取ってしまうコンテナらしい。</p>



<p>実はこの事実に気付くのは、かなり苦戦した後になります。</p>



<h2 class="wp-block-heading">traefikの設定記事、みんなバラバラやん・・・</h2>



<p>traefikは、様々なネットワーク構成ができるようになっているので、調べれば山のように設定情報が見つかりますが、自分の欲しい情報（Swarmでセッション維持）が簡単には見つかりません。</p>



<p>しばらくして、英語圏ではセッション維持のことを「sticky session」と呼称するのが分かりました。</p>



<p>ようやく突破口を見つけましたが、同時に奇妙なことに気付き始めます。</p>



<p>同じsticky sessionの設定が書かれているはずなのに、みんな書いている設定がバラバラなんです。これには理由がありました。</p>



<h2 class="wp-block-heading">traefik.tomlとdocker-composeどっちでもいい</h2>



<p>traefikの設定値は、外部ファイルから読み込む形（tomlファイル）と、docker-compose（ymlファイル）でtraefikコンテナを作るときにcommandで指定する形の2通りがあります。</p>



<p>この2通りの方法について、各利用者サイトが両方使っている場合が大半だったのが問題でした。</p>



<p>さらには、同じ設定値をtomlとymlで、重複しているのに気づいていない人が大半だったのです。つまり、みんな他所からコピペしてなんか知らんが動いたからヨシ！状態。</p>



<p>例えば、tomlで</p>



<div class="wp-block-snow-monkey-blocks-box smb-box" style="--smb-box--background-color:#ebfaf2;--smb-box--background-opacity:1;--smb-box--border-color:#c7fbd6;--smb-box--border-width:1px"><div class="smb-box__background"></div><div class="smb-box__body has-global-padding is-layout-constrained wp-block-snow-monkey-blocks-box-is-layout-constrained">
<p>[docker]<br>watch = true</p>
</div></div>



<div style="height:50px" aria-hidden="true" class="wp-block-spacer"></div>



<p>とdockerに対する設定を書くのと、ymlで</p>



<div class="wp-block-snow-monkey-blocks-box smb-box" style="--smb-box--background-color:#ebfaf2;--smb-box--background-opacity:1;--smb-box--border-color:#c7fbd6;--smb-box--border-width:1px"><div class="smb-box__background"></div><div class="smb-box__body has-global-padding is-layout-constrained wp-block-snow-monkey-blocks-box-is-layout-constrained">
<p>serivces:<br>   traefik:<br>     image: traefik:latest<br> ・・・中略・・・<br>     command:<br>       &#8211; &#8220;&#8211;dokcer&#8221;<br>       &#8211; &#8220;&#8211;dokcer.watch&#8221;</p>
</div></div>



<div style="height:50px" aria-hidden="true" class="wp-block-spacer"></div>



<p>これは同じ意味になるんですが、ほとんどのサイトで重複して書かれていたりします。</p>



<p>この2通りで書ける狙いとしては、tomlで設定の共通化を図りつつ、環境によって差がでる部分を各ymlで吸収させること。</p>



<p>しかし、その自由さ故に、各個人での設定がバラバラになり、さらには煩雑なコピペが進むことで、重複した設定情報が世にあふれることになってしまっています。</p>



<p>これが大いに私を苦しめる原因のひとつになりました。</p>



<p>ですが、さらに大きな問題が・・・</p>



<h2 class="wp-block-heading">traefik v1とv2が混在している・・・？！</h2>



<p>traefikは現在v2.2なんですが、ネットに設定情報として書かれている7割ぐらいがv1時代のものでした。</p>



<p>参考サイトのすべてがv1時代の情報だったら良かったんですが、v1とv2の情報がネット上に混在していました。</p>



<p>以下は、v1からv2への変更点がまとめられた公式マニュアルです。</p>



<div class="wp-block-snow-monkey-blocks-box smb-box" style="--smb-box--background-color:#e9f2f9;--smb-box--background-opacity:1;--smb-box--border-color:#55c3dc;--smb-box--border-width:1px"><div class="smb-box__background"></div><div class="smb-box__body has-global-padding is-layout-constrained wp-block-snow-monkey-blocks-box-is-layout-constrained">
<p>Migration Guide: From v1 to v2</p>



<p><a href="https://docs.traefik.io/migration/v1-to-v2/">https://docs.traefik.io/migration/v1-to-v2/</a></p>
</div></div>



<div style="height:50px" aria-hidden="true" class="wp-block-spacer"></div>



<p>見てもらえば分かると思いますが、機能追加だけでなく、書式の大幅な変更が入ったところや、もう別物やんけみたいな所、無くなった設定や、追加された必須設定など、様々な修正が入っています。</p>



<p>各利用者サイトが、これに正しく対応していれば何も問題なかったんですが・・・</p>



<p>なんと混在していたんです。v1と、v2の設定が。</p>



<p>つまり動作確認されてない情報もたくさんありました。</p>



<p>「書いてある通りに設定しても、うまく行かないなぁ」</p>



<p>「FAQサイトによると・・・なになに？traefik:v1.7にしろって？」</p>



<p>「え？なにこれ？v1とv2って完全に別物やんけ！」</p>



<p>「え？でも公式マニュアル、これv1の設定じゃ？公式が古いじゃん<img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f92a.png" alt="🤪" class="wp-smiley" style="height: 1em; max-height: 1em;" />」</p>



<p>「えーと、今まで見てきたサイトは・・・」</p>



<p>「こっちはv2で書かれてるっぽい？あれ？でもこれv1じゃないとダメでは？」</p>



<p>「・・・正しい設定情報はどこなんだぁ～」</p>



<p>正しいのは何処だと、調べて行けばいくほど沼にはまっている感じがしました。</p>



<p>みんな「何となく」「何だから知らんけど」って設定値を書いてる感じなんだよね。</p>



<p>↓心が折れそうになった私</p>



<blockquote class="twitter-tweet"><p lang="ja" dir="ltr">だー、だめだ、心が折れそうｗ<br>traefik の v1 と v2 の違いが大きいのに、ネットに散乱している traefik 設定が v1 と v2 で混在していて、何が正解なのかさっぱり分からん。<br>おまけに、traefik.toml で設定するパターンと、traefik.yml で設定するのも混在していてカオス</p>&mdash; 藤原工房 (@FujiwaraKoubou) <a href="https://twitter.com/FujiwaraKoubou/status/1281967671265734658?ref_src=twsrc%5Etfw">July 11, 2020</a></blockquote> <script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script> 



<p>結局、公式マニュアルなどで各設定値の意味や情報を洗い直すことになり、かなりの手間になりました。また、v2の動作確認された情報が少なすぎたので、v1.7で進めることにしました。</p>



<p>悪戦苦闘したおかげで、何とかtraefikが起動しましたが（ダッシュボードが見れるようになる）、wordpressにアクセスしようとしてもタイムアウトしてしまいます。</p>



<p>「traefikの設定をコメントアウトしたりしながら確認してみよう」</p>



<p>「・・・どうやら、swarm = trueにすると何かおかしくなるなこれ」</p>



<p>「swarmオプションを全部コメントアウトするとwordpressが見れるか」</p>



<p>「いろいろ調べたが、traefik.backend.loadbalancer.swarm=true・・・これが追加で必要っぽい？」</p>



<p>「traefikはロードバランシングを行わず、swarmに委譲します、と小さく書いてあるな」</p>



<p>「これを追加すると、swarm=trueでもwordpressコンテナに通信できるようなる。・・・swarm=trueの効果を無効にしているような気もするけど・・・これでいっか！」</p>



<p>「えっと、次は、つながるようになったが、何でwordpressは404なんだ・・・」</p>



<h2 class="wp-block-heading">WordPressの初期化に失敗する・・原因は？</h2>



<p>今度はWordpressにアクセスしようとすると、404エラーしか出ない問題にぶち当たります。本来ならば、言語選択画面が表示されて、Wordpressのインストール画面になります。</p>



<p>traefikの設定が間違っているのかと、あーでもない、こーでもないとネット情報が当てにならないので自力で手探りで色々試していました（すでに疲労困憊）。</p>



<p>しかし、夜も更け、朝になっても解決せず・・・も～ダメだと寝ました。</p>



<p>起きてからリセットされた頭で考えた結果、原因の切り分けを行うことにしました。</p>



<p>まず大前提として「traefik無しでwordpressが起動するか」</p>



<p>・・・すると、なんと起動しなかったのです<img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f923.png" alt="🤣" class="wp-smiley" style="height: 1em; max-height: 1em;" /></p>



<p>何故これに気付かなかったのかというと、Dockerコンテナというものは起動することが基本的に証明されたものが公式によって配布されています（traefikみたいに設定が別に必要なのはともかく）。</p>



<p>PCで言えば、PC業者が組み立ててくれたものを買ってきたので、電源ボタンを押せば起動するのが当たり前みたいな話です。</p>



<p>「wordpressコンテナが起動しないだと？！」</p>



<p>「原因は？初期化に失敗している・・・なぜ？」</p>



<p>「えーと、MySQLコンテナが起動する前に、wordpressコンテナが起動するとダメ？」</p>



<p>「wordpress.ymlのdepens_on: mysqlってやってるけどなぁ・・・」</p>



<p>「え？depens_onって起動の順番までは制御してない？なん・・だと・・！」</p>



<p>「みんなどうやってこの問題を解決しているんだ？・・・シェルスクリプト？！」</p>



<p>「え？docker-composeに知らない設定があるとかではなく、自作だと・・？！」</p>



<p>「・・・な、何か他にやりようは無いのか？」</p>



<h2 class="wp-block-heading">何だか知らんが動いたからヨシ！</h2>



<p>今回docker-composeで、Swarmを利用した新しい概念としてserviceを使っていました。以下のような感じで、deploy属性のreplicasを指定することで配置するコンテナの数などを設定できます。</p>



<div class="wp-block-snow-monkey-blocks-box smb-box" style="--smb-box--background-color:#ebfaf2;--smb-box--background-opacity:1;--smb-box--border-color:#c7fbd6;--smb-box--border-width:1px"><div class="smb-box__background"></div><div class="smb-box__body has-global-padding is-layout-constrained wp-block-snow-monkey-blocks-box-is-layout-constrained">
<p>wordpress:<br>  depends_on:<br>    &#8211; db<br>  image: wordpress:latest<br>  deploy:<br>    mode: replicated<br>    replicas: 2<br>    update_config:<br>      parallelism: 1<br>      delay: 2s<br>    restart_policy:<br>      condition: on-failure<br>    placement:<br>      constraints: [node.role == manager]</p>
</div></div>



<div style="height:50px" aria-hidden="true" class="wp-block-spacer"></div>



<p>前回と違うところは、このdeploy属性です。特にコンテナの数が2個になったので、それが影響しているのではないかと考えました。</p>



<p>ログを見ると、最初の1個が起動に失敗し、その次に2個目が起動し（その間にmysqlが起動したから？）、最後に最初に失敗したのが起動するという感じになっていました。</p>



<p>その最初の失敗の影響でwordpressの初期化に失敗し、起動はしているがwordpressにアクセスできない状態を作り出しているのではないか。</p>



<p>いろいろ試していると、初期化に成功することもありました。たまたまmysqlが先に起動したこともあったのでしょう。たまに成功するのが問題を複雑にしていました。</p>



<p>・・・正直なところ、この問題を解決できたのは偶然です。</p>



<p>コンテナ内で発生するデータ変更を永続化するために、volumes属性があります。</p>



<p>このvolumes属性は、Dockerが決めた場所（/var/lib/docker以下）か、自分で指定したディレクトリにすることができます。</p>



<p>いろいろ試しているときに、自分で指定した場所（./www:/var/www/html）にしてみたところ、何故かずっと成功するようになりました。</p>



<p>完全に推測ですが、最初に永続化されたDocker配下のvolumesが何かしら壊れた状態になったが、完全に壊れたわけではなかったので、コンテナは起動するが、wordpressの初期化に成功したり失敗したりするようになったのではないかなと思います。</p>



<p>そこで、新しくvolumesの場所を変え、新品のvolumesを使ったことで成功するようになったのではないかと。</p>



<p>・・・詳しく原因を調べるのはもう面倒なのでやめました。</p>



<p>何だか知らないけど動いたのでヨシ！！</p>



<h2 class="wp-block-heading">やっとここまで俺は戻ってきた</h2>



<p>ついにWordpressも使えるようになり、当初の目的だったhttps化や、sticky sessionも問題なく働いています。2個あるwordpressコンテナの片方をstopしても、Wordpressを変わらず操作し続けることも出来るようになりました。長かった、ここまで本当に長かった。</p>



<p>あとはブログを復元するだけ・・・</p>



<p>実は今回フルバックアップからのフル復元は初めてでした。</p>



<p>↓（頼む・・・成功してくれ・・・！）</p>



<blockquote class="twitter-tweet"><p lang="ja" dir="ltr">しゅげー！もどってきた <a href="https://t.co/eUuySZJ8H8">pic.twitter.com/eUuySZJ8H8</a></p>&mdash; 藤原工房 (@FujiwaraKoubou) <a href="https://twitter.com/FujiwaraKoubou/status/1282311272910868483?ref_src=twsrc%5Etfw">July 12, 2020</a></blockquote> <script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script> 



<p>正直こんなに簡単に復元できるとは思っていませんでした。</p>



<p>ここまでの苦労が報われた感じがしました。</p>



<p>いろいろあったプラグイン、その設定まで元通りになっていました。</p>



<p>ただ一つだけ問題がありました。</p>



<h2 class="wp-block-heading">バックグラウンド更新が想定通りに・・・</h2>



<p>最新のWordpresにはサイトヘルス機能という、Wordpressの様々な問題を発見して警告を表示するものがあります。事の始まりであった「PHPが古い」という警告もサイトヘルス機能で表示されていたものです。</p>



<p>復元したWordpressのサイトヘルスに見慣れない致命的エラーがありました。</p>



<p>「バックグランド更新が想定通りに動作していません」</p>



<p>これは調べたところ、新しくvolumesを作ったのが原因でした。</p>



<p>wwwというディレクトリをvolumesに設定しましたが、このwwwディレクトリの権限設定を変更すると解決しました。</p>



<p>「wordpressコンテナ内の/var/www/htmlの権限は、www-data:www-dataか」</p>



<p>「www-dataは33に設定されているな、それじゃ、wwwをchown 33:33にしてみよう」</p>



<p>「あれ？33:tapeってなるけど・・・CentOS7だと33はtapeグループなのか」</p>



<p>「サイトヘルスの警告文が消えてる・・・これでいいみたい！」</p>



<p>これにてWordpressの再構築は完了であります！</p>



<p>最後にGithubに設定ファイルを公開して終わります。</p>



<p>注意点として、traefikのSwarmに関する設定は、自分から見てもかなり怪しいです。また、v1.7での設定方法になるので、将来的に公式サポート外になるかも。使うならば自己責任でお願いします。</p>



<p>細かい設定などについては、Githubの方に書いておきますね。</p>



<div class="wp-block-snow-monkey-blocks-box smb-box" style="--smb-box--background-color:#e9f2f9;--smb-box--background-opacity:1;--smb-box--border-color:#55c3dc;--smb-box--border-width:1px"><div class="smb-box__background"></div><div class="smb-box__body has-global-padding is-layout-constrained wp-block-snow-monkey-blocks-box-is-layout-constrained">
<p>DockerSwarm-Traefik-Wordpress</p>



<p><a href="https://github.com/fujiwarakoubou/DockerSwarm-Traefik-Wordpress">https://github.com/fujiwarakoubou/DockerSwarm-Traefik-Wordpress</a></p>
</div></div>The post <a href="https://fujiwarakoubou.jp/2020/07/20/wordpress-on-docker-swarm/">さくらのVPSでサーバーを壊しちゃったのでDockerSwarmを導入してWordPressを再構築してみた</a> first appeared on <a href="https://fujiwarakoubou.jp">藤原工房</a>.]]></content:encoded>
					
					<wfw:commentRss>https://fujiwarakoubou.jp/2020/07/20/wordpress-on-docker-swarm/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">890</post-id>	</item>
		<item>
		<title>驚くほど簡単！DockerでWordPress導入</title>
		<link>https://fujiwarakoubou.jp/2016/11/14/install-easily-wordpress-with-docker/</link>
					<comments>https://fujiwarakoubou.jp/2016/11/14/install-easily-wordpress-with-docker/#respond</comments>
		
		<dc:creator><![CDATA[fujiwarakoubou]]></dc:creator>
		<pubDate>Mon, 14 Nov 2016 06:50:49 +0000</pubDate>
				<category><![CDATA[サーバー]]></category>
		<category><![CDATA[Docker]]></category>
		<guid isPermaLink="false">http://fujiwarakoubou.jp/?p=72</guid>

					<description><![CDATA[<p>実はこのサイトもDockerで動いています。DockerでWordPressを動かすまでの手順を簡単にご紹介したいと思います。 Dockerとは何なのか？ 一言でいえば、仮想コンテナ管理アプリケーション。このアプリがやっ [&#8230;]</p>
The post <a href="https://fujiwarakoubou.jp/2016/11/14/install-easily-wordpress-with-docker/">驚くほど簡単！DockerでWordPress導入</a> first appeared on <a href="https://fujiwarakoubou.jp">藤原工房</a>.]]></description>
										<content:encoded><![CDATA[<p><a class="a2a_button_hatena" href="https://www.addtoany.com/add_to/hatena?linkurl=https%3A%2F%2Ffujiwarakoubou.jp%2F2016%2F11%2F14%2Finstall-easily-wordpress-with-docker%2F&amp;linkname=%E9%A9%9A%E3%81%8F%E3%81%BB%E3%81%A9%E7%B0%A1%E5%8D%98%EF%BC%81Docker%E3%81%A7WordPress%E5%B0%8E%E5%85%A5" title="Hatena" rel="nofollow noopener" target="_blank"></a><a class="a2a_button_facebook" href="https://www.addtoany.com/add_to/facebook?linkurl=https%3A%2F%2Ffujiwarakoubou.jp%2F2016%2F11%2F14%2Finstall-easily-wordpress-with-docker%2F&amp;linkname=%E9%A9%9A%E3%81%8F%E3%81%BB%E3%81%A9%E7%B0%A1%E5%8D%98%EF%BC%81Docker%E3%81%A7WordPress%E5%B0%8E%E5%85%A5" title="Facebook" rel="nofollow noopener" target="_blank"></a><a class="a2a_button_twitter" href="https://www.addtoany.com/add_to/twitter?linkurl=https%3A%2F%2Ffujiwarakoubou.jp%2F2016%2F11%2F14%2Finstall-easily-wordpress-with-docker%2F&amp;linkname=%E9%A9%9A%E3%81%8F%E3%81%BB%E3%81%A9%E7%B0%A1%E5%8D%98%EF%BC%81Docker%E3%81%A7WordPress%E5%B0%8E%E5%85%A5" title="Twitter" rel="nofollow noopener" target="_blank"></a><a class="a2a_button_line" href="https://www.addtoany.com/add_to/line?linkurl=https%3A%2F%2Ffujiwarakoubou.jp%2F2016%2F11%2F14%2Finstall-easily-wordpress-with-docker%2F&amp;linkname=%E9%A9%9A%E3%81%8F%E3%81%BB%E3%81%A9%E7%B0%A1%E5%8D%98%EF%BC%81Docker%E3%81%A7WordPress%E5%B0%8E%E5%85%A5" title="Line" rel="nofollow noopener" target="_blank"></a><a class="a2a_button_reddit" href="https://www.addtoany.com/add_to/reddit?linkurl=https%3A%2F%2Ffujiwarakoubou.jp%2F2016%2F11%2F14%2Finstall-easily-wordpress-with-docker%2F&amp;linkname=%E9%A9%9A%E3%81%8F%E3%81%BB%E3%81%A9%E7%B0%A1%E5%8D%98%EF%BC%81Docker%E3%81%A7WordPress%E5%B0%8E%E5%85%A5" title="Reddit" rel="nofollow noopener" target="_blank"></a><a class="a2a_button_whatsapp" href="https://www.addtoany.com/add_to/whatsapp?linkurl=https%3A%2F%2Ffujiwarakoubou.jp%2F2016%2F11%2F14%2Finstall-easily-wordpress-with-docker%2F&amp;linkname=%E9%A9%9A%E3%81%8F%E3%81%BB%E3%81%A9%E7%B0%A1%E5%8D%98%EF%BC%81Docker%E3%81%A7WordPress%E5%B0%8E%E5%85%A5" title="WhatsApp" rel="nofollow noopener" target="_blank"></a><a class="a2a_button_pocket" href="https://www.addtoany.com/add_to/pocket?linkurl=https%3A%2F%2Ffujiwarakoubou.jp%2F2016%2F11%2F14%2Finstall-easily-wordpress-with-docker%2F&amp;linkname=%E9%A9%9A%E3%81%8F%E3%81%BB%E3%81%A9%E7%B0%A1%E5%8D%98%EF%BC%81Docker%E3%81%A7WordPress%E5%B0%8E%E5%85%A5" title="Pocket" rel="nofollow noopener" target="_blank"></a><a class="a2a_button_linkedin" href="https://www.addtoany.com/add_to/linkedin?linkurl=https%3A%2F%2Ffujiwarakoubou.jp%2F2016%2F11%2F14%2Finstall-easily-wordpress-with-docker%2F&amp;linkname=%E9%A9%9A%E3%81%8F%E3%81%BB%E3%81%A9%E7%B0%A1%E5%8D%98%EF%BC%81Docker%E3%81%A7WordPress%E5%B0%8E%E5%85%A5" title="LinkedIn" rel="nofollow noopener" target="_blank"></a><a class="a2a_button_pinterest" href="https://www.addtoany.com/add_to/pinterest?linkurl=https%3A%2F%2Ffujiwarakoubou.jp%2F2016%2F11%2F14%2Finstall-easily-wordpress-with-docker%2F&amp;linkname=%E9%A9%9A%E3%81%8F%E3%81%BB%E3%81%A9%E7%B0%A1%E5%8D%98%EF%BC%81Docker%E3%81%A7WordPress%E5%B0%8E%E5%85%A5" title="Pinterest" rel="nofollow noopener" target="_blank"></a><a class="a2a_dd addtoany_share_save addtoany_share" href="https://www.addtoany.com/share#url=https%3A%2F%2Ffujiwarakoubou.jp%2F2016%2F11%2F14%2Finstall-easily-wordpress-with-docker%2F&#038;title=%E9%A9%9A%E3%81%8F%E3%81%BB%E3%81%A9%E7%B0%A1%E5%8D%98%EF%BC%81Docker%E3%81%A7WordPress%E5%B0%8E%E5%85%A5" data-a2a-url="https://fujiwarakoubou.jp/2016/11/14/install-easily-wordpress-with-docker/" data-a2a-title="驚くほど簡単！DockerでWordPress導入"></a></p>
<p>実はこのサイトもDockerで動いています。<br>DockerでWordPressを動かすまでの手順を簡単にご紹介したいと思います。</p>



<h2 class="wp-block-heading">Dockerとは何なのか？</h2>



<p>一言でいえば、仮想コンテナ管理アプリケーション。<br>このアプリがやってることは従来の仮想サーバーアプリとほとんど変わりません。<br>ただ仮想サーバーを「コンテナ化」することで<br>従来の技術を様々な点で凌駕することができています。</p>



<h4 class="wp-block-heading">サーバー起動の高速化</h4>



<p>個人的に思うに、Dockerが一躍有名になった大きな利点のひとつです。<br>従来の仮想サーバー技術は、一般的なパソコンと同様に起動までに長い時間がかかりました。<br>これをDockerはコンテナ化技術によって数秒を実現しています。</p>



<h4 class="wp-block-heading">構成のレイヤー管理</h4>



<p>DockerはPhotoShopの画像レイヤーのように、サーバーの構成情報を細かく積み重ねます。<br>この管理方法によって、コンテナを再利用することができるようになりました。</p>



<p>例えば、<a href="https://hub.docker.com/r/fujiwarakoubou/debian8-php7-apache-wordpress4.6/">自分の作ったWordPressのコンテナ</a>がありますが、<br>これは一番下にOSのDebian8コンテナ、<br>それを元にしたPHP7コンテナ、<br>そしてさらにそれを元にしたWordPressが順に重なってできたコンテナになっています。<br>このコンテナにさらに何か追加したいときは、このコンテナを再利用すればいいわけです。</p>



<h4 class="wp-block-heading">構成のコード化</h4>



<p>Dockerはコンテナの構成レシピをコード化しています。<br>この技術はChefなどが有名ですね。<br>それはDockerfileと呼ばれ、コード化することでSVNやGitを使った差分管理ができます。<br>DockerfileはGithub（Git管理ウェブアプリ）にて簡単に公開共有できます。</p>



<h4 class="wp-block-heading">コンテナの高度な管理</h4>



<p>Dockerはコマンドによってコンテナを管理できます。<br>異なるコンテナ間で、通信ができるようにしたり、ファイルを共有できるようにしたり、<br>コンテナの複製や負荷分散までできます。<br>Amazon AWSのようなサービスが個人サーバーで運用可能になりました。</p>



<p>他にも、特徴的な所がありますが、<br>要するに従来の仮想化技術を大きく進歩させた、新しいアプリケーションというわけです。<br>このDockerの恩恵を具体的に体感できるよう、これからWordPress導入を例にしてみたいと思います。</p>



<span id="more-72"></span>



<h2 class="wp-block-heading">事前準備</h2>



<p>DockerはOSではなく、コンテナ管理アプリケーションなので、Dockerをインストールするサーバーが必要です。筆者は「<a href="http://vps.sakura.ad.jp/">さくらVPS</a>」さんを使っています。</p>



<p>レンタルサーバーなどはDockerをインストールできないので注意してください。<br>尚、ここではサーバーの設定などは説明しません。（WordPress導入のハードルが高い理由の大部分はここにあります）</p>



<h2 class="wp-block-heading">Dockerのインストール</h2>



<p>サーバーにDockerをインストールしましょう。<br>ここではCentOS7でのインストール方法を紹介します。<br>他のOSは<a href="https://docs.docker.com/engine/installation/">公式のインストールドキュメント</a>を参考にしてください。</p>



<p>公式の引用ですが</p>



<pre class="wp-block-preformatted"><pre class="brush: bash; title: ; notranslate">
$ sudo yum update
</pre></pre>



<p>CentOSのインストーラー「yum」を最新にして</p>



<pre class="wp-block-preformatted"><pre class="brush: bash; title: ; notranslate">
$ sudo tee /etc/yum.repos.d/docker.repo &amp;lt;&amp;lt;-EOF
&#x5B;dockerrepo]
name=Docker Repository
baseurl=https://yum.dockerproject.org/repo/main/centos/7/
enabled=1
gpgcheck=1
gpgkey=https://yum.dockerproject.org/gpg
EOF
</pre></pre>



<p>yumにdockerのリポジトリを登録します。</p>



<pre class="wp-block-preformatted"><pre class="brush: bash; title: ; notranslate">
$ sudo yum install docker-engine
</pre></pre>



<p>そしてDockerをインストール</p>



<pre class="wp-block-preformatted"><pre class="brush: bash; title: ; notranslate">
$ sudo systemctl enable docker.service
</pre></pre>



<p>インストールしたDockerをサーバー起動時の自動起動の対象にして</p>



<pre class="wp-block-preformatted"><pre class="brush: bash; title: ; notranslate">
$ sudo systemctl start docker
</pre></pre>



<p>Dockerを起動します。</p>



<pre class="wp-block-preformatted"><pre class="brush: bash; title: ; notranslate">
$ sudo docker run --rm hello-world
</pre></pre>



<p>最初からある「hello-world」コンテナを起動して問題なければOK。<br>「&#8211;rm」はコンテナ終了時にコンテナを削除するオプションです。</p>



<h2 class="wp-block-heading">コンテナをダウンロード</h2>



<p>WordPressコンテナと、WordPressコンテナに追加で必要なコンテナをダウンロードします。<br>ダウンロードはDockerコマンドを使って行います。<br>コマンドを実行できるようなユーザー権限を持って下さい。</p>



<pre class="wp-block-preformatted"><pre class="brush: bash; title: ; notranslate">
docker pull wordpress</pre></pre>



<p><a href="https://hub.docker.com/_/wordpress/">公式WordPressコンテナ</a>をダウンロードします。<br>少し前までは、まだPHP7対応のWordPressが無くて自分でコンテナを作りましたが、今は公式がサポートしていますのでそれを安全だと思います。</p>



<pre class="wp-block-preformatted"><pre class="brush: bash; title: ; notranslate">
docker pull mysql
</pre></pre>



<p>次に公式WordPressコンテナの説明にもありますが、<br>データベース用のコンテナが必要なので、<a href="https://hub.docker.com/_/mysql/">公式MySQLコンテナ</a>をダウンロードします。</p>



<p>余談ですが、ダウンロードするコンテナのバージョン番号などを省略すると、配信側が指定した最新タグ（latest）のコンテナが自動でダウンロードされます。<br>タグを指定する場合は、「mysql:5.6.34」のようにコロンを付けます。</p>



<h2 class="wp-block-heading">コンテナを起動</h2>



<pre class="wp-block-preformatted"><pre class="brush: bash; title: ; notranslate">
docker run --name db -e MYSQL_ROOT_PASSWORD=hogehoge -d mysql
</pre></pre>



<p>まず先にMySQLコンテナを起動します。<br>hogehogeのところは作成したパスワードに置き換えてください。</p>



<p>「&#8211;name」はコンテナの名前を決めるオプション<br>「-e」は環境変数設定オプション、MySQLコンテナに環境変数、この場合はMySQLのパスワードを設定します<br>「-d」はデタッチ実行オプション、つまりバックグラウンド実行にします</p>



<p>これでMySQLのコンテナが起動しているはずです。<br>「docker ps」で起動中のコンテナ一覧が見れます。</p>



<pre class="wp-block-preformatted"><pre class="brush: bash; title: ; notranslate">
docker run --name wp --link db:mysql -p 8080:80 -d wordpress
</pre></pre>



<p>次にWordPressコンテナを起動します。</p>



<p>「&#8211;link」オプションで、先ほど起動したコンテナ（コンテナ名:イメージ名）を指定します。<br>これによって、２つのコンテナが１つのコンテナのように動くことができます。</p>



<p>「-p」オプションは、コンテナの公開通信ポートの設定です。<br>これを指定しないと、コンテナはデフォルト外部サーバーから非公開になります。<br>「8080:80」の左側（8080）が外部公開ポート、右側（80）が内部受信ポートです。<br>つまり、ブラウザなどで8080番にアクセスすると、コンテナの80番ポートに通信が届きます。</p>



<p>これにてWordPressの設置は完了です。</p>



<p>後は、サーバーのポートフォワード設定で80番を8080番に変えたり、URLドメイン設定などネットワーク設定をしておけば、もうWordPressサイトを公開できるでしょう。</p>



<p><a href="http://wpdocs.osdn.jp/WordPress_%E3%81%AE%E3%82%A4%E3%83%B3%E3%82%B9%E3%83%88%E3%83%BC%E3%83%AB">普通にインストールする場合</a>と比べてどうでしょうか？簡単でしょうか？</p>



<p>最後に、DockerでWordPressを導入するデメリットについて、<br>自分が運用してみて思ったのは、ファイルの配置です。</p>



<p>WordPressのインストールされた場所へのファイル操作は、Dockerを経由してコンテナ内部にアクセスしなければならないため、従来のファイル送信フリーソフトだけではできません。</p>



<p>将来的に、Dockerのコンテナ内部にまでファイルを運んでくれるフリーソフトやウェブサービスが登場するとは思いますが、それまではDockerコマンド（docker cp）を使う必要があり、がっつりWordPressのファイル構成を弄る人には大きなデメリットかも知れません。<br>（WordPressの管理画面からファイル送信できたりするプラグインがあったりするのかな？）</p>The post <a href="https://fujiwarakoubou.jp/2016/11/14/install-easily-wordpress-with-docker/">驚くほど簡単！DockerでWordPress導入</a> first appeared on <a href="https://fujiwarakoubou.jp">藤原工房</a>.]]></content:encoded>
					
					<wfw:commentRss>https://fujiwarakoubou.jp/2016/11/14/install-easily-wordpress-with-docker/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">72</post-id>	</item>
	</channel>
</rss>
