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

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

ただいまの
回答率

90.35%

  • Docker

    803questions

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

  • docker-compose

    161questions

docker-compose.ymlで開発環境の標準化の意味があまり理解できていない

解決済

回答 2

投稿

  • 評価
  • クリップ 0
  • VIEW 566

tomuziso

score 26

Dockerを勉強しています。使用OSはMacOSです。

dockerを使い、docker-compose.ymlを使用すれば開発環境の標準化ができるということですが、いまいちピンと来ていません。

例として以下のようなdocker-compose.yml があります。

version: '2'
services:
  cache:
    image: redis:alpine
    container_name: ####
    ports:
      - 6379:6379
    command: redis-server
  db:
    build: ./mariadb
    container_name: #####
    volumes:
      - data:/var/lib/mysql
    environment:
      MYSQL_ROOT_PASSWORD: ####
      TZ: Asia/Tokyo
    ports:
      - 3306:3306
volumes:
  data:
    driver: local

環境構築として、docker-compose up -dで上記のredisとmariadbが動作すると思いますが、どういった点が便利なのでしょうか?

もしdockerを使わない場合でも、上記の環境でしたら
homebrewmariadbredisをインストールするという点は共通の作業だと思います。

ローカルで上記のような設定はデフォルトだと思うのですが、dockerを使った場合と使わない場合でどういう風に違いが出て来るのか、分かりにくい点がありました。

もしよろしければ教えていただけるとありがたいです。

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

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

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

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

回答 2

checkベストアンサー

+2

もう少しだけ手間のかかるアプリケーションの立ち上げを想像するとわかるかもしれません。

例えば、mac で wordpress の環境を docker を使わずにセットアップしようとすると、下記のサイトにある手順を踏む必要があります。

MacでWordPressをローカルインストールする(MAMPなし, phpmyadminなし)

一方で、docker を使う場合だと、下記のサイトの手順になります。

Docker for MacでWordPressローカル環境構築

dockerを使う方の手順説明を読むとわかりますが、半分くらいは docker 自体のインストール手順の説明で、wordpress+mysql+phpmyadminのインストール手順はとても簡単です。

また、この記事は単にコマンドラインから docker run して終りになってますが、この手順をもう少し整理した上で docker-compose.yml に記述しておけば、誰でも、何度でもこの手順をコマンド一発で簡単に再現することができることになります。

このように、立ち上げようとするアプリケーションの構成が複雑になるほど、docker による展開の自動化のメリットが大きくなると言えます。

ご参考になれば。

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2018/06/29 10:19

    回答ありがとうございます。
    参考URLも確認しました。

    Dockerのイメージが段々は分かって来ました。

    Dockerなしの場合だと
    「ローカルにミドルウェアをインストール」
    「各ミドルウェアの起動設定などを個別にして一つづつ起動していく」
    「ミドルウェアのデータなどはローカルに残り続けるので、環境をやり直す場合は一つづつ消していかなければならない。」

    Dockerありの場合だと
    「ローカルでミドルウェアをインストール」
    「docker-compose,ymlにミドルウェアの設定記述をまとめて記述」
    「それを元にdockerを動かしてdockerの中で実行(?)」
    「dockerの中で完結するのでdockerイメージ?コンテナ?を消せば環境は真っ白」

    という認識で大体合ってますでしょうか?
    ローカルでミドルウェアをインストールし、実際に動くプロセスとデータはコンテナの中、というイメージが今のところに認識です。

    最初の頃は「mariadb」、「redis」をbrew installしてローカルに置く状況を作らなくてもdockerの中で構築してくれるもの、と思っていた節があります。

    キャンセル

  • 2018/06/29 12:16

    Dockerあり・なしについての認識はおおむねその通りです。
    そもそもmariadbやredisやwordpressやtomcatやDjango等のDockerイメージを、自分で1から作らなくてもDocker Hubで共有されているものがあればそのまま利用できるというのが、Dockerによる環境構築の最大のメリットだと思います。
    ここまで簡単にできるから、いろいろなアプリやフレームワークを気軽にいくつでも試すことができる。これを体験してしまうと、もうDockerの無い時代へは戻れないですよね。
    なお、アプリの展開や削除が簡単になるという以外にも、Dockerコンテナごとにシステムリソース(ファイルシステム、プロセスツリー、メモリー空間、ネットワークインターフェース)が分離されることで、同一アプリを複数実行できるとか、Dockerイメージを適切にタグ付けすることで、イメージ(に含まれるソフトウェアや構成)のバージョン管理ができるなど、これらも大きなメリットですよね。

    キャンセル

  • 2018/07/02 10:25

    返信ありがとうございます。
    mariaDBやredisなどのイメージが共有されていて、それを使うことが出来るんですね。
    今回でいうとローカルのマシンにredisやmariaDBが存在しなくても、dockerがコンテナの中に自動でDockerHubから引っ張ってきてそれをコンテナの中で使える、ということですね。

    システムリソースの分離の所までは実際にまだ恩恵を受けるまで理解出来ていませんが、確かにDockerを一度使えば確実に便利だというのが体感出来ました。ありがとうございます。

    キャンセル

0

dockerありとなしで何が違うか簡単に説明すると

ランナー付きのプラモデルを単純に組み立てるか、
ポリウレタン樹脂を使ってプラモデルを塑像するかの違いです。

dockerさんは簡単に時間もかからず毎回同じプラモデルを作り上げますが、
それを人間がやると金型を作成してそこに樹脂を流し込んで固めて作らないと同じものができません。

dockerは、起動しているマシンにメモリ依存してしまう欠点がありますが、
dockerはコンテナ技術なので、どんなに中身をいじってもコンテナ内で完結します。

いらなくなったらゴミを残さず消せるため、作って消すことに大変優れています。
スポットでちょっと使いたいときや技術検証などの用途で使われていますね。

技術的には、仮想サーバ、コンテナ、サーバレスと大きく3つに別れています。
どれもすべて仮想技術という括りなので、やっていることはそう大差はありません。

単純にやりたいことをやれる手段が増えただけです。
そのうちの一つがコンテナ技術のdockerというわけですね。

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2018/07/02 10:29

    回答ありがとうございます。
    Dockerなしで環境構築する事が金型から作成する、ということは確かにありとなしでは全く便利さが違いますね。
    自分のマシンでいくつもの環境を作成して切り替える、という作業が必要になればより効果が実感出来るのでしょうか?
    まだ一つの環境を構築するだけにしか使っていなかったので、まだそこまでの認識には至りませんでした。
    ありがとうございます!

    キャンセル

同じタグがついた質問を見る

  • Docker

    803questions

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

  • docker-compose

    161questions