Docker挫折したマンを助けたい – Dockerでwordpress環境をつくる

kujira_zasyou

どうも、エンジニアのミヤマです。

過去3回で、Dockerについてブログを書いてきました。今回でDockerシリーズは一区切りでもいいかな、、、とか思っています。笑

とか思いつつ、今回は実践的なテクニックとして、docker-composeを使って、wordpressの環境を作ります!!

wordpressのdocker-compose.ymlを作成する

前回紹介したdocker-composeをつかって、wordpressの環境を作ります。

docker-compose.ymlはこんな感じです。

このサイトを参考にさせていただきました。↓

[WordPress]超簡単!DockerでWordPressを1分で立ち上げよう[WP10]

あとは、前回同様のコマンドを実行していくだけです。

こんな感じですね。

wordpressのファイルである、wp-content等のファイルは、(ボリューム)マウントすれば、コンテナの中のファイルと同期することができます。

これは、docker-compose.ymlにvolumeを追記すればできますね。

実際にローカルのhttp://localhost:3001にアクセスしてみると、wordpressのインストール画面が表示されます。

んで、いつもどおりwordpressのインストーラを回すとこんな画面にたどり着きました。

WordPress

確かに、wordpressの環境を構築することができたようです。

開発と運用を考える

開発を行うときは、このままのdocker-coppose.ymlでいいとおもいます。

ただ、実際にリリースするときはDB等は外部リソースを使うべきです。
Dockerのモチベーションとして、いつでもどこでも同じ環境、状態ができること、です。

その点、DBは常に同じ状態ができることはまずないです。

なので、AWSのRDSをつかったりすべきです。

まとめ

こんなところで、過去含め4回、Dockerについて書いてきました。

ここまで紹介してきた内容がわかってもらえると、Dockerがおおよそどういうものか、を理解できたのではないでしょうか?

とはいえ、Dockerにはまだまだたくさんのテクニックや、使いみちがありますし、これからドンドン使うのが当たり前になっていくとぼくは思っています。

と、こんなところで、今回は、締めることにします。ではでは。


Docker挫折したマンを助けたい(docker-compose編)

kujira_zasyou

どうも、エンジニアのミヤマです。
以前、Dockerの基本的な使い方のブログを書きました。

https://blog.anysense.co.jp/app/program/post-934/

https://blog.anysense.co.jp/app/program/post-948/

そして、今回はそれをより使いやすくするためのツール、docker-composeを紹介します。

docker-composeって?

以前紹介したDokcerのやり方は、Dockerのコマンドを直接打って、コンテナを実行するものでした。
でもDockerコマンドって毎回打つの、めんどくないですか?
そこでdocker-composeです。

さっそくやってみる、docker-compose

では、docker-composeをやっていきますが、インストールについては、よしなにお願いします。

んでんで、docker-composeというのは、dockerコマンドを簡単に管理してくれます。

このdocker-composeを使うためには、docker-composeとdocker-compose.ymlという名前をつけたファイルが必要になります。

まず、docker-compose.ymlには、こう書いておきます。

このとき、docker-compose.ymlと同じレベルのディレクトリに、hoge_volumeというディレクトリを作っておいてください。

このdocker-composeの内容は、「Dockerfileをもとにイメージをビルドして、ボリュームとして./hoge_vouleをコンテナの/home/hoge_voumeにマウントする」という内容になっています。

次に、Dockerfileはこんな感じにしておきます。↓

このDockerイメージでは、ubuntuのイメージをベースにして、phpをインストールして、そのなかでphpのビルトインサーバを起動する、という内容になっています。

そして、以上のファイルを保存したら、以下のコマンドを実行します。

そして、docker ps を実行するとdockerコンテナが実行されていることがわかります。

ついでに、hoge_volumeにテキトーにファイルを作って、本当にファイルがボリュームとしてコンテナにマウントされているかを確認してみます。
(hoge_volumeには、hoge.txtというのを作っておきます。)

確かに、hoge.txtが存在してますね。ボリュームマウントされてます。

docker-composeのメリット

ここまでやってきたことを整理すると、docker-composeをつかって、結果的にこうすることができました。

つまり、docker-composeのメリットは、↓

「Dockerコマンド的なものをdocker-compose.ymlに書いておくことで、docker-compose up -dだけで、
同じ環境を簡単に作りだすことができる。 」

です。


ここまでやれると、Dockerを結構理解できたのではないでしょうか?

といっても、ぼくはこれくらいのことしかできなかったりします。

と、こんなところで今回はこのへんで。

次回は、docker-composeを使って、wordpressのコンテナを作ってみます。


Docker挫折したマンを助けたい(実践編)

kujira_zasyou

どうも、エンジニアのミヤマです。
前回は、Dockerとはどんなものか、をざっくり紹介しました。

https://blog.anysense.co.jp/app/program/post-934/

今回は、実際に手を動かしてDockerをなんとなくでも理解してもらえると。。。
というわけで、やっていきます。

準備するもの(前提)

Dockerを準備しておいてください。

それぞれ確認として、バージョンを確認したり、コンテナを確認したりしておきます。

今回、ぼくの環境(OS)はmacです。
macであれば、docker for macというのがあるので、簡単にインストールすることができますよ。

さっそく、コンテナを実行してみる

では、さっそくコンテナを実行してみようと思います。

前回のブログで説明したように、Dokcerはイメージをコンテナで実行します。

なのでまずは、ubuntuのイメージをとりあえずもってきます(プルしてきます)。
このイメージは、docker hubというところからもってきますが、コマンドがよしなにやってくれます。

次にプルしてきたイメージをコンテナで実行します。

そうするとubuntuのイメージが実行されているコンテナの中に入ることができます。
コンテナの中でubuntuが実行されていることを確認するために、以下のようなコマンドを打ってみてもいいかもしれません。

コンテナからは、control+P,Qで抜けることができます。

コンテナが実行されているか、確認する

そして、コンテナがされているのは、このコマンドで確認できます。

コンテナに名前をつけて、実行する

docker ps すると、コンテナの名前がテキトーにつけられているのがわかります。
これを自分でつけることもできます。まー、したいひとはどうぞ、って感じです。

次のコマンドで、コンテナに名前をつけて実行できます。

コンテナの中の変更は、削除されてしまう

コンテナは一度削除されると、そのコンテナの中の変更も削除されます。
それを見るために、ちょっとここで実験です。

コンテナの中で適当なファイルを作って、コンテナを削除してみます。

そして、コンテナを削除します。

ここから、またコンテナを作成すると、コンテナの中にはさっきの変更は保存されていないことがわかります。

でも、開発においてこれって困りますよね。
それをどう解決するかを次に紹介します。

コンテナにフォルダをマウントする

コンテナの中の変更は、コンテナの削除のタイミングで削除されてしまいます。
コンテナを使った開発においては、変更されるフォルダは別でコンテナの起動とは別にマウントする、という方法をとります。
こうやって、コンテナの外からマウントします。

コンテナには、ディレクトリを好きなところにマウントすることができます。(ボリュームマウントといいます。)

-vオプションをつけるとマウントすることができます。
このコマンドは、ローカルのフォルダをコンテナの中のディレクトリにマウントするというものです。

では、やってみます。

これで確かに、フォルダがコンテナにマウントできることを確認できました。

ついでに、マウントしたフォルダの中の適当なファイルを編集してみます。
そうすると、コンテナの中のフォルダとマウントしたフォルダはも同期されているはずです。

Dockerfileを作る

「ぼくは、私はubuntuの中でphpを動かしたい」っていう人、コンテナの中でこれをしたい、っていうのがあると思います。
でも、そういうイメージがdocker hubにない、ってことがあると思います。

そういうときは、Dockerfileを使います。

Dockerfileを使うことで、オリジナルのDockerのイメージを作ることができます。

まずは、Dockerfileを作る

ではでは、さっそくDockerfileを作ってみます。
まずは、適当にディレクトリを作って、その中にDockerfileという名前のファイルをつくります。
んで、今回はテキトーにphpでも入れてみます。

そして、そのDockerfileの内容はこのようにしておきます。

これの内容としては、ubuntu:18:04のイメージをインストールして、その中にphpをインストールしています。

では、このDockerfileをもとにオリジナルのイメージを作ります。
(今回はおまけで、そのできるイメージに名前をつけておきます。)

コマンドはこんな感じです。

イメージができたことを確認

以下のコマンドで、イメージができたことを確認します。

これでできてますね。では、このイメージをつかってコンテナを実行してみます。

まとめ

今回でなんとなくdockerがどんなもので、どうやって使えるのかイメージできたんじゃないでしょうか?
次回は、もうちょっとdockerを簡単にしてくれるツール、docker-composeを説明してみようとおもいます。
ではでは、今回はこのへんで。


Docker挫折したマンを助けたい

kujira_zasyou

どうも、エンジニアのミヤマです。

最近、コンテナやDockerといったワードをよく聞くようになってきました。
しかし一方で、さわってみて挫折した人も少なくないのかなと思います。

そんなDockerで挫折した人をもう一度立ち直らせるべく、今回はDockerを導入するにあたって気をつけること、意識すること、さらに、実際に導入するというところまでやっていきます。

このブログでは、アーキテクチャ的な用語はできるだけ使わずに説明します。

まず「イメージ」と「コンテナ」を理解する

docker_arch1

Dockerを始めると一番最初に理解するべきは、「イメージ」と「コンテナ」という概念です。

「イメージ」を作る

まずは、「イメージ」についてです。

ところで、osをインストールしたことはありますか?

WindowsならインストールのCD-ROMを入れて、インストールすると思います。
そのCDの中には、OSの「イメージ」が入っています。
このとき「イメージ」は、まっさらな、初期状態のOSが入っています。

データは持っていません。

dockerは、この「イメージ」という単位で管理されます。
dockerにおける「イメージ」は、そういうOSのCD-ROMを想像すると「イメージ」の理解がしやすいかもしれません。

「コンテナ」で実行する

Dockerは、イメージを「コンテナ」で実行します。
これは、イメージを実行するための仮想マシンみたいなもの、という理解でいいです。

ここで頭の片隅に残してほしいのは、コンテナは一つのプロセスとネットーワークをつくる、ということです。

Dockerってこんな感じ

docker_arch2

Dockerは、プロセス、ネットワークを仮想化する

Dockerでは、ひとつのコンテナに一つのイメージを実行します。

このイメージの正体は、ひとつのプロセスです。

例えば、それはphpのイメージやapacheのイメージ、rubyのイメージ、mysqlのイメージを以って、コンテナで実行することで、
その中には、それらに応じたプロセスが実行されます。

ここで大事なことは、ひとつのDockerのコンテナの中には、一つのプロセスが実行される、ということです。

Dockerでネットワークをつくる

Dockerでは、コンテナはコンテナ同士をつなぐネットワークを作ることができます。

例えば、phpを実行するコンテナとmysqlを実行するコンテナをネットワークをつないで、ひとつのシステムを構成することができます。

なぜDockerか?

ここまでDockerってこんな感じのモノ、を示してきました。でも、なぜDockerを使う必要があるんでしょうか?ここでDockerのメリット、デメリットを考えてみます。

Dockerのメリット

  • 管理がラク

一つのサーバで、複数のサービスを運用すると、結構面倒です。サーバを増やそうとすると、そのたびに初期設定をして。。。ということをするんですが、Dockerはそれをまるっと一つの「イメージ」(詳しくは後で)として管理することができます。
一方でDockerならコマンド一つでサービス(プロセス)、一つのサーバの中にあたかも仮想マシン的な感じで、実行することができます。
でも、Dockerはそれを一つのイメージとして管理します。
また、これはインフラリソースの柔軟性ともいえます。

Dockerのデメリット

  • 学習コスト

Dockerは「コンテナ」です。
「コンテナ」であり、「仮想マシン」とは似て非なるもの。

今までのVirtualBoxなどの仮想マシンアプリを使ってきた人にはとっつきにくいと思います。
dockerを始めるときは、そういった先入観を捨てないといけないように思います。

これになれるまでに時間がかかります。まー、慣れです。

  • 脆弱性

これは、Dockerの開発が進んでいるが故にしかたがありません。
IT技術において脆弱性はどんなものにもありますし。
今後も何かしらのセキュリティホールは見つかると思います。


次回は実際に、dockerのコンテナを実行したりしてみようとおもいます。今回はこんなところで。


ブログ、再開です。

IMG_3534

どうも、エニセンスでエンジニアをしています。ミヤマです。
ながらくこのブログも更新されずにいたようです。
最近入ったぼくに関して言えば、存在すらも知りませんでした。
技術的なことはもちろん、マネジメントやエニセンスの社内のことを発信していければ、と思います。

ということで、今回はブログ再開するにあたって、今のエニセンスの技術的な部分どうなの?を紹介します。させてください。

プログラミング言語/フレームワーク

プログラミング言語、フレームワークに関して言えば、こんな感じです。

  • Rails
  • FuelPHP
  • Laravel

主にはwebアプリでは、Railsを主に使っています。やっぱり簡単にwebアプリ作れるのは、goodです。
ぼくが関わっているプロジェクトで言えば、FuelPHP(API)+Nuxtを使ってシステムを作っています。

(にしても、FuelPHPという変わり者、この子はどうしたものか。笑)

スマートフォンアプリにおいては、swift/Kotlinを使っています。ここは選択の余地はないんですが。。。笑
あとは、スマートフォンアプリにおいて言えば、たまにcordovaという変わり者がいたりします。
最近は、ReactNativeとかFlutterとかがイケてるやつなんだろーなー、と、思っています。

インフラ

httpサーバの設定であれば、おそらく全部Apacheを使っています。
nginxのシェアが。。。みたいな話はありますが、ぼくは、「ま、道具だし、手段だし」と納得しています。
開発環境としてはこんな感じです。↓
– docker
– ECS
– ECR

最近は、dockerを使ったproductionでの運用に踏み切ろうかな、とおもっています。
そうしたら、つぎはk8sを。。。とかもね。

というわけで

技術的な部分で思いつくものをパッと書いてみましたが、いわゆる「イケてる」技術は、それなりに追えているのかなー、と個人的には思っています。
とはいえ、** 技術は技術で、手段でしかない** ので、そのときにベストな解を選べるようにしていきたいですね。
では、今回はこんなところで。これからのブログをよろしくお願いします。


1 2 3 4