質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.35%
Webサーバー

Webサーバーとは、HTTPリクエストに応じて、クライアントに情報を提供するシステムです。

データベース

データベースとは、データの集合体を指します。また、そのデータの集合体の共用を可能にするシステムの意味を含めます

Docker

Dockerは、Docker社が開発したオープンソースのコンテナー管理ソフトウェアの1つです

AWS(Amazon Web Services)

Amazon Web Services (AWS)は、仮想空間を機軸とした、クラスター状のコンピュータ・ネットワーク・データベース・ストーレッジ・サポートツールをAWSというインフラから提供する商用サービスです。

Q&A

解決済

2回答

15988閲覧

Dockerを本番環境で使用するケースについて

study_111

総合スコア82

Webサーバー

Webサーバーとは、HTTPリクエストに応じて、クライアントに情報を提供するシステムです。

データベース

データベースとは、データの集合体を指します。また、そのデータの集合体の共用を可能にするシステムの意味を含めます

Docker

Dockerは、Docker社が開発したオープンソースのコンテナー管理ソフトウェアの1つです

AWS(Amazon Web Services)

Amazon Web Services (AWS)は、仮想空間を機軸とした、クラスター状のコンピュータ・ネットワーク・データベース・ストーレッジ・サポートツールをAWSというインフラから提供する商用サービスです。

2グッド

0クリップ

投稿2020/06/02 00:06

編集2020/06/02 00:15

Dockerを使用するメリットは、基本的には開発を行う段階で得られるものであり、実際に本番サーバーで運用する際にはあまり得られるものではないとの認識であっていますでしょうか?
仮に、こちらのように、ローカルに開発環境を作り、アプリケーションを作成しても、AWSでそれをデプロイする際は、コンテナではなく、インスタンス(サーバー)を立ち上げ、それぞれ、DBサーバー、WEBサーバーとして扱っていく形になると思います。
そのため、本番環境では一つのサーバーに、WEBサーバー(webコンテナ),DBサーバー(DBコンテナ)をまとめて入れることはデメリットになる為、使用されないと思ったのですが、このような理解で大方あっておりますでしょうか。
こちらの部分につきまして、少々曖昧な部分がありました為、どなたかご助言頂けましたら幸いです。
よろしくお願いします。

loop_dog, clearcat👍を押しています

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

ベストアンサー

「コンテナオーケストレーション」という言葉で色々調べてみるといいと思います

一つのイメージにアプリ以外にDB等々色々詰め込むと単体で動きはしますが、EC2インスタンスに色々詰め込んでしまったときと同じでスケールしにくくなるのでオススメしません。
イメージ自体もとても重くなります。
また、DBまでコンテナ化するとどうやってデータ保持すればいいのか、という問題も出てきます。

また、普通のサーバにDockerをインストールして自分で諸々管理しながら運用することもできなくはないのですが、それは大変なので現実問題としてコンテナ運用には何らかのサービスやツールを使うのがデファクトスタンダードになっています。
たとえDockerを使わなかったとしても、EC2インスタンスを手動管理するのは大変になっていきますが、せっかくコンテナを使って下のレイヤを仮想化したのに、その下のレイヤを自前で管理するのでは管理が複雑化してしまいます。

コンテナオーケストレーションツールでも現在の主流となりつつあるのはKubernetesでしょう。

AWSは元々ECSを提供していましたが、マネージドのKubernetesであるEKSもここ数年で提供し始めました。
細かくは色々あるでしょうが、いずれにしても単体のサーバ上でコンテナを稼働するのではなく、複数のサーバでクラスタを作ってその上で稼働させるというのが通常で、サーバ1台に1つ以上のコンテナ、みたいな運用はあまりしません(コンテナ化されたツールをサーバ上で使いたい、などという時は話が違います。)

その他のメリットは、Dockerさえ動けばいちいちサーバ上で環境構築をしなくても、コンテナに乗っているものはコンテナ内の環境だけで動く、ということですね。
なので、Dockerイメージさえデプロイすれば動くので開発環境と本番環境の環境差分が生まれにくくなります。

また、何かしらcliのようなツールを使いたいときも、ツールを使うためだけに何かをインストールしたりする必要がなくなりDockerだけ動く環境があればよい、ということになります。

従来のサーバ運用の考え方とは異なり、モダンな考え方を多く反映した運用が前提になるので、運用には様々な考え方の理解が重要かと思います。

諸々とてもここには書ききれない(のと、自分自身勉強中な)ので参考になりそうなサイトを色々貼っておきます。

事例から考えるDockerの本番利用に必要なこと

「コンテナジャーニー」〜明日から速攻始めるAWSでのコンテナ導入運用〜 #cmdevio2018
「それコンテナにする意味あんの?」迷える子羊に捧げるコンテナ環境徹底比較 #cmdevio2019

実際の使用例もかなり参考になるでしょう。
Docker on AWS: AWSのコンテナ関連サービスの選定例の紹介

※こちらは3年も前の資料なので今とは前提が異なるのですが、書いてある事自体は参考になります。
AWSでDockerを扱うためのベストプラクティス

投稿2020/06/02 02:58

yu_1985

総合スコア7588

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

study_111

2020/06/02 03:52 編集

詳細にご説明下さり、ありがとうございます。 貼らせて頂きましたQiita記事を読んでいた際に、本番環境で運用する場合、ご回答にも記述頂きました「Dockerイメージさえデプロイすれば動くので開発環境と本番環境の環境差分が生まれにくくなります。」こちらのメリットはあると思ったのですが、実際にはどうすれば良いのか、といった部分で疑問が湧きました。自分は、DBの場合、インスタンスを立ち上げ、そこにイメージをビルドし、DBコンテナを作成し、webサーバーの場合も同様にインスタンスを立ち上げ、イメージをビルドする、といった形で簡単に運用が可能なのかと思っていたのですが、実情そう単純な話でもなかったのですね... それを考えますと、実際に自分のようなDocker初心者がDockerを使うメリットとしましては、簡単に開発環境の構築が行えるといった部分が、大きくなって来ますでしょうか?
yu_1985

2020/06/02 05:24

実際にはビルドしたものをECRに登録してそこからpullする形になるかとは思います。 DBはコンテナを使わずRDSをそのまま使うことが多い気がしますね。コンテナの場合、何も考えずに使うと終了させた時点でデータが全て消えます。 当然ながらデータベースにはデータをもたせたいので消えてしまっては困りますよね。 アプリケーションもコンテナとしては動作に必要な最低限の構成だけにしておいて、ソースは別途デプロイする、というようなやり方も考えられます。 運用を簡単に出来るようにするには運用を簡単にできるような設計が必要で、コンテナを使った運用がなされるようになったのは比較的最近なので、コンテナ運用の設計をすると必然的にモダンな設計になることが多いかと思っています。 しかしながら、それには当然設計に関する勉強や経験が必要ですね。 あと、設計はできても具体的にどうやってその状態に持っていくかはまた別問題です。 まあ、最初は開発環境の構築でしょうね。 例えばgitを利用した開発なんかでも、リポジトリにDockerfileやdokcer-compose.ymlさえあればあっという間に開発環境が用意できるというのはそれなりにメリットがあります。 プロダクションで実際に使うにはそれなりに調査や検証をしてからのほうがいいでしょう。 ただ、EC2インスタンスを使えばこれらが不要になるわけではなく、いずれにしてもきちんとした設計が重要であることは変わりありません。
study_111

2020/06/02 07:30 編集

ご返信ありがとうございます。 ご丁寧にご説明頂きましたおかげで、大方理解することが出来ました。 > 例えばgitを利用した開発なんかでも、リポジトリにDockerfileやdokcer-compose.ymlさえあればあっという間に開発環境が用意できるというのはそれなりにメリットがあります。 こちらですが、チームで開発を行う際なんかに同様の環境をチーム全員で揃えることが出来るのは便利だな感じました。 取り敢えず、現段階では、開発環境の構築が便利に出来、他の人とも環境を揃えられるのがメリット、くらいに考えておこうと存じます。
yu_1985

2020/06/02 08:21

少しデメリットを挙げるとするなら、WindowsでDockerが動くようにするのが少し手間であることでしょうか。 Windows10 Homeに対応し始めたのがかなり最近なのでちゃんとアップデートしてないと使えないのと、Dockerが動くようにするのがちょっとだけ面倒かもしれません。 https://forest.watch.impress.co.jp/docs/news/1239275.html
study_111

2020/06/02 08:49

リンク先の記事、読ませて頂きました。 自分は現状Macを使用しているのですが、Windows10 Homeに対応したのが3月というのは確かに、結構最近のことなのですね。 しかし、ご丁寧にご説明頂きましたおかげで、大分Dockerに対するつっかかりが消えました。 ありがとうございました。 しかし、インフラの部分も色々新しい技術があったりして、面白いですね。これからももっと詳しくなれるよう勉強を続けていきたいと思います。
guest

0

ローカルに開発環境を作り、アプリケーションを作成しても、AWSでそれをデプロイする際は、コンテナではなく、インスタンス(サーバー)を立ち上げ、それぞれ、DBサーバー、WEBサーバーとして扱っていく形になると思います。

いえ、ECSという、コンテナのままでマネージ運用できる仕組みがありますので、質問の前提が間違っています。

投稿2020/06/02 00:14

maisumakun

総合スコア146018

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

maisumakun

2020/06/02 00:17

とはいえ、「DBサーバまでコンテナに入れる」のは、あくまで「開発環境用のコンテナ」だからです。 「本番運用に使うコンテナ」は別な形のほうが適切かとは思います。
study_111

2020/06/02 00:25

なるほど。AWSの場合はECSといったサービスもあるのですね。 なんと言いますか、もちろんこちらのサービスを使用すれば可能かもしれないのですが、仮に使用しなかった場合は、いかがでしょうか? 本番環境で、Dockerを使用するメリットはありますか?
maisumakun

2020/06/02 00:27

はい。何をやるにしてもOSはDockerを動かす最低限のもので済むようになり、必要なミドルウェアを詰めたコンテナを、どんな環境でもすぐ回せるようになるのがメリットです。
study_111

2020/06/02 00:38 編集

ご助言ありがとうございます。 一点疑問点があるのですが、貼らせて頂きましたQiitaの記事では、一つのサーバー(ローカルPC)に3つのコンテナを作成する形になっておりますが、実際に本番環境でコンテナを使用する際は、これら3つのコンテナをDBサーバには、DBコンテナ、WEBサーバーなどには、WEBコンテナといった構成にしていく形となりますでしょうか?
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.35%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問