Dockerコンテナのホスト名をセットする

DockerやLXDみたいなコンテナ型だとホストOSのカーネルに依存してしまうので()
Dockerで動かしてるアプリのコンテナに対して同じことができると便利なんだけどsshd動かすのも頭悪いし-vでホスト側のパスをマウントしてそっちにプログラム置く方が楽かネ
あれ、photonos ってデフォルトだと 2376 ポート LISTEN してないのか。リモートのコンテナホストとして使うのはオプション的な感じなのかな
それとはべつにどういう隔離の仕方であったとしても rootfs をホストとは別に押し込めて実行できるようにしたものをオレはコンテナ仮想化って言うんだ!っていうなら止めはしないし納得はする。
ホストのパッケージ更新して再起動かけたらさっきまで元気に動いてたコンテナがコア吐くようになって辛い。そんなことあるのだろうか
再掲。ホストosと似たような構成のコンテナを軽量化するために、ホストと同じなファイルは共用しちゃうコンテナシステム、ってのは有るんだろうか?
dockerホストがCentOS, コンテナがUbuntuという構成で、コンテナ側で「コンパイル時にlinux-headersがいるソフト」があるとして、そいつのために用意すべきheaderとはCentOSで動いてるkernelのヘッダーなのか?
開発環境の Docker化以外とめんどくさいな。ソースコードのディレクトリをホストからマウントする場合、その中に展開されるライブラリやら何やらがホストのとコンテナのとで混ざる。コンパイルされるようなライブラリは互換ないし・・・ 混ぜるな危険で済む話ではあるがはてさて。
頑張って Docker で Unity のビルド鯖作ろうとしてたが、コンテナ・ホスト間のやり取りがシンドすぎたので諦めた。 Itamae とかでレシピ作ろうかなぁ。
「自宅ではUbuntu( Serverのdockerホスト上にX11が動くコンテナを立ち上げてその上でi3wm)を使ってます」
Dockerでコンテナのインスタンスとしては違うはずなのに、シェルの履歴が引き継がれてるの不思議と思ったけど、.ash_historyがホスト側に残ってるだけなので不思議じゃなかった
dockerをjenkinsで立てて、コンテナ内のjenkinsからホストのjenkinsをsockファイル経由で弄るついでにgitフォルダ上でやれば設定値のバージョン管理もできると。
開発環境のdocker化、コンテナ自体は割とすぐ出来たけど繋ぎ込みというかホストとのやりとりどうするかとかタスク的なものをどうやって実行するかとか考え出すと沼だな。たのしいやっくのけがり
コンテナはホストの/etc/resolv.confを巧妙に維持しますって書いてあるけど、コンテナ内のresolv.conf見たら127.0.0.11しか書いてない コンテナ -> 127.0.0.11 -> host(resolv.conf)なのかね。あんまり良く分かってない。
network_mode: hostすれば一応ホスト側で定義してるの使えるけどコンテナ間で解決できなくなるし…
linuxホストでcuiのlinuxゲスト動かすのにコンテナでも準仮想化でもなく完全仮想化で動かしたい場面って結構限定的な気がするんだけどなんでOpenVZよりKVMの方が世間的に流行ってるんだろう

概要

PHPのレガシーコードで環境判定にApacheの定数を使っていることがあるので、
Docker環境でもそのスクリプトがそのまま動くよう環境設定を行うことが
ときどきあるのでメモとして残しておきます。

Dockerの設定

docker-compose.ymlの例を記載します。

開発環境の例)

docker-compose.yml
version: '2'
services:
  httpd:
    image: httpd:2.4
    container_name: 'httpd'
    command: /usr/local/apache2/bin/httpd -DFOREGROUND -DDev
    ports:
      - '80:80'
      - '443:443' 

※ 開発以外の環境は、「 -DDev 」を「 -DTest 」や「 -DProd 」に変更する

環境判定

.htaccessで判定する例を記載しておきます。

.htaccess
<IfDefine Dev>
  # 開発環境
  SetEnv APP_ENV development
</IfDefine>
<IfDefine Test>
  # テスト環境
  SetEnv APP_ENV testing
</IfDefine>
<IfDefine Prod>
  # 本番環境
  SetEnv APP_ENV Production
</IfDefine>

phpでの判定例を記載しておきます。

environment.php
<?php

switch (getenv('APP_ENV')) {
  case 'development':
    echo '開発環境';
    break;

  case 'testing':
    echo 'テスト環境';
    break;

  case 'production':
    echo '本番環境';
    break;

  default:
    throw new ErrorException('環境を判定できません');
}

参考サイト

docker-compose.yml
 httpd:
  image: httpd:2.4
  container_name: "httpd"
  command: /usr/local/apache2/bin/httpd -DFOREGROUND -DTEST
  ports:
   - '80:80'
   - '443:443'
[紹介元] PHPタグが付けられた新着投稿 – Qiita Dockerコンテナのホスト名をセットする

  • コメント

    1. 匿名希望
      2018/01/17(水) 18:54:25

      DockerやLXDみたいなコンテナ型だとホストOSのカーネルに依存してしまうので()

    2. 匿名希望
      2018/01/17(水) 18:54:25

      Dockerで動かしてるアプリのコンテナに対して同じことができると便利なんだけどsshd動かすのも頭悪いし-vでホスト側のパスをマウントしてそっちにプログラム置く方が楽かネ

    3. 匿名希望
      2018/01/17(水) 18:54:25

      あれ、photonos ってデフォルトだと 2376 ポート LISTEN してないのか。リモートのコンテナホストとして使うのはオプション的な感じなのかな

    4. 匿名希望
      2018/01/17(水) 18:54:25

      それとはべつにどういう隔離の仕方であったとしても rootfs をホストとは別に押し込めて実行できるようにしたものをオレはコンテナ仮想化って言うんだ!っていうなら止めはしないし納得はする。

    5. 匿名希望
      2018/01/17(水) 18:54:25

      ホストのパッケージ更新して再起動かけたらさっきまで元気に動いてたコンテナがコア吐くようになって辛い。そんなことあるのだろうか

    記事に戻る

関連記事