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

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

新規登録して質問してみよう
ただいま回答率
85.50%
docker-compose

docker-composeとは、複数のコンテナで構成されるサービスを提供する手順を自動的し管理を簡単にするツール。composeファイルを使用しコマンド1回で設定した全サービスを作成・起動することが可能です。

Docker

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

Q&A

2回答

1946閲覧

[Docker][docker-compose] docker-compose.yml内で、ベースになるimageに対して別のDockerfileを実行することは可能か

sabx

総合スコア200

docker-compose

docker-composeとは、複数のコンテナで構成されるサービスを提供する手順を自動的し管理を簡単にするツール。composeファイルを使用しコマンド1回で設定した全サービスを作成・起動することが可能です。

Docker

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

0グッド

0クリップ

投稿2018/11/12 09:25

編集2022/01/12 10:55

聞きたいこと

docker-compose.ymlとDockerfileで以下のようなことが実現可能か確認させてください。

  1. 基本となるベースのDockerイメージを作成(CentOS6ベース、yum updateやdatetimeの変更を実施。Baseイメージとする)
  2. Baseイメージ上にmysqlをインストールしたmysqlイメージ、Apacheをインストールしたapacheイメージを作成するが、mysql・apcheインストールの処理を別途Dockerfileに書き出す。
  3. 上記をmysql => apacheの順番で起動する

以上です。。。よろしくお願い致します。

(2018/11/13 追記)
すいません質問の内容が自分で後から見返してみても、自分の聞きたいことと乖離があったので再度質問させてください。。。

ローカルのDockerイメージ(例:Baseイメージ)に対して、別のDockerfileで定義した処理を実行し、再度別のイメージを作成するこをdocker-composeで管理することは可能でしょうか?

例えば、下のようなdocker-compposeがあるとします。

version: "3.3" services: db: image: base_ubuntu18 container_name: db environment: MYSQL_ROOT_PASSWORD: ${MYSQL_ROOT_PASSWORD} MYSQL_DATABASE: ${MYSQL_DATABASE} MYSQL_USER: ${MYSQL_USER} MYSQL_PASSWORD: ${MYSQL_PASSWORD} web: image: base_ubuntu18 container_name: web nas: container_name: nas image: base_ubuntu16 :

上記の場合、コンテナ名db、web、nasの大元になるイメージがそれぞれbase_ubuntu18、base_ubuntu16になっています。
(base_ubuntu18, base_ubuntu16にはweb, mysqlなどはインストールされていません)
base_ubuntu18、base_ubuntu16に対して、

  • web用のセットアップのDockerfile
  • mysql用のセットアップのDockerfile
  • nas用のセットアップのDokerfile

などを定義して、docker-composeに組み込むことは可能でしょうか?

すいませんが、よろしくお願い致します。

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

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

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

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

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

guest

回答2

0

1.2.の回答

  • imageの下準備をする(例:apt-get update -y)
  • コンテナを終了させる
  • commit しimage化する
C:\>docker run -it --name base-ubuntu ubuntu:latest bash root@3139ee1b1c95:/# apt-get update -y ## アップデートログは省略 Fetched 15.0 MB in 1min 5s (230 kB/s) Reading package lists... Done root@3139ee1b1c95:/# exit ← コンテナを抜ける C:\>docker commit base-ubuntu base sha256:da270ddce8dcac0b5c36ae0a8b0f6652f6c5d7f1f0d5a7c8f1e7cb998ada43c7 ↑baseの作成 C:\>docker images REPOSITORY TAG IMAGE ID CREATED SIZE base latest da270ddce8dc 24 seconds ago 110MB ←新しくできたimage ubuntu latest ea4c82dcd15a 3 weeks ago 85.8MB

上記ではupdateされたubuntuのbaseイメージが作成されるので、これを元にmysql・apacheのDockerfileを作成すれば良いと思います.

3の回答

docker-composeを使用し、linkなどの設定を行っても起動コンテナの順番は最下層から行ってくれます。
この場合はmysqlコンテナ→apacheコンテナの順番

しかし、起動順を厳守するだけであり、mysqlコンテナがサービス開始状態にならない状態で、apacheが起動してしまい、エラー等が発生するおそれがあります。

物理的な2台のマシンで例えると、mysql PCの電源を入れ、apache PCの電源を入れてもmysql PCの起動が遅く、apache PCのサービスが開始されてしまうみたいな感じです。

サービスの起動順を厳守したい場合には、シェルにて対象のコンテナが起動されているか確認します。公式にサンプルがあります。

公式のサービスはpostgresが起動しているか判断し、起動していなかったらsleepをするシェルです。

https://docs.docker.com/compose/startup-order/

追記

下記のようなディレクトリ構成にします。

text

1docker-compose.yml 2 + 「mysql」という名前のフォルダ 3 + Dockerfile ←mysqlを構築するDockerfile 4 + 「apache」という名前のフォルダ 5 + Dockerfile ←apacheを構築するDockerfile

docker-compose.yml のbuild対象をディレクトリ指定すれば、その配下のDockerfileでコンポーネントが走ります。ただし、上位のディレクトリは参照できません。docker-compose.ymlファイル配下にフォルダを作成してして、その内部にDockerfileを作成してください。

version: '3' services: database : build: ./mysql いろんな設定 app : build: ./apache

複数のコンテナを同時に起動するにはdocker-compose up -dを叩けば良いです。

docker-compose up -d

投稿2018/11/12 13:29

編集2018/11/13 02:27
mosapride

総合スコア1480

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

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

sabx

2018/11/13 01:26

ご回答ありがとうございます! すいません、、、自分で質問を見返して見たら、自分の聞きたいことと実際に聞いていることに乖離がありました。。。 Baseイメージはローカルに存在している状態で、そこからdocker-composeにて、 * mysql(apache, など)用のイメージの作成(Dockerfileにmysqlインストール用の定義を記載。それをdocker-compose内で利用する) * それらイメージからコンテナ起動 などを定義することはできるでしょうか?
mosapride

2018/11/13 02:21

コードがあるので追記します。
guest

0

投稿2018/11/12 13:16

euledge

総合スコア2404

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問