dockerを本番環境に入れて浮彫になった問題点

dockerを本番環境に入れて浮彫になった問題点

おはこんばんにちは、サーバ担当のtakeuchiです。

弊社では8月初旬より、一部のサーバでdockerを使ったコンテナ管理をしており、その運用で問題になった内容の一部を、本日は紹介してみようと思います。

dockerとは?

Docker(ドッカー)はソフトウェアコンテナ内のアプリケーションのデプロイメントを自動化するオープンソースソフトウェアである。 –Wikipedia

image07

「Dockerとは、Docker社が開発しているオープンソースのコンテナ型仮想化ソフトウェアである。 Linux上でLXC(Linux Container)の技術を活用し、コンテナ型の仮想環境を作成するものだ。 Dockerの主な特徴は、以下の通りである。 コンテナの作成からプロダクトのインストール・設定するまでの手順を、“Dockerfile”というテキストファイルに定義できる(インフラのコード化)。」
引用:Dockerが注目されている理由を探る

docker実践備忘録

利用方法

dockerの重要コンセプトである「Immutable Infrastructure(仮想環境上で稼働させることで、ホストOS自体への変更を行わないようにして安定的にアプリケーションを稼働させる仕組み)」とはかけ離れますが、主にVPS(バーチャル・プライベート・サーバ)の代替として使用しています。

また、クラウド上でサーバを展開する場合にも使用しており、1つのdocker imageを使い回すことでベースのOSを気にせず、どのクラウドサービスでも基本的にサーバを展開できます。(但しLinux系に限る)

サービスサーバ以外ではステージング環境、検証環境へも流用しており、複数のディストリビューションの上で動作させています。

なぜ、こんな事が必要か?

dockerを知っている方には釈迦に説法ですが、docker imageを使い回す事で、安定したサーバ基盤(含むアプリケーション)を短時間で大量に立ち上げる事ができます。

イマドキのサーバ管理はオープン、クローズを問わずクラウド上に必要数に応じてサーバを展開し、尚かつ、漏れなく、無駄無く、安全にサービス提供まで「短時間」で構築する必要があります。「無駄無く」するには、不要になったらさっさと閉じるまでを考慮に入れなければ行けません。

すぐに閉じると判っているものに構築時間を費やすのは無駄です。だから短時間にサーバを立てる事は非常に重要なのです。

運用で良く使ったコマンド

dockerイメージ一覧取得

起動中のコンテナ一覧取得

すべてのコンテナ一覧取得

index.docker.ioからイメージを検索

IMAGEからコンテナを起動

ホストの/var/wwwを、コンテナの/var/htmlからアクセスできるようにマウント

ホストのポートとコンテナのポートをポートフォワーディング

起動しているコンテナに接続

コンテナをファイル出力

ファイルからイメージを取り込み

運用して分かった問題点

250px-The_Thinker,_Rodin

Dockerfileを使わない

yumやaptなどのリポジトリを使い、パッケージのインストールをしないため、Dockerfileを使いません。
最新版がインストールされるという点で、これらはとても有効です。

ですが実際問題、バックポートでパッチが当てられ、パッケージの挙動が変わってしまう場合があります。

これらに対応するため、本番とは別に、docker image生成サーバを設け、各種パッケージを内包し作成したimageを、本番へデプロイする形式にしています。
※独自リポジトリを設ける場合、使用しても問題ないと思います。

docker save/loadを使わない

弊社の環境だけかもしれませんが、save/loadがうまく動きませんでした。
このため、imageの別サーバへ移す場合には、docker import/exportを使っています。

本番でimage保存をせず、importのみ

ゴミが溜まるため、基本的にdocker image生成サーバで作られたimageをimportして使っています。

どうやってサービスを立ち上げるか?

image内にstart.shを作り、そこにサービスの立ち上げ、rsyncコマンドなどをぶち込んでいます。
立ち上げ時は以下のようにdocker runコマンドを実行し、

またstart.sh内は下記のように記述してます。

start → restartとしているのは、うまく立ち上がらないことが多々あるためです。
※あまりよろしくない設定だと思いますので、今後よりよい設定があれば変更します。

AWSとの相性の問題

インスタンスガチャではないですが、立ち上がる物理サーバに依ってはdockerが立ち上がりません。自動化する場合、うまく考えないといけないです。

最後に

あくまでVPSの延長として、使用した場合ですので、本記事は全てのdockerユーザに当てはまるわけではありませんが、困った開発者やサーバ管理者の参考になればと思います。
image04

※編集部注:インスタンスガチャとは「インスタンス起動回数をガチャを引いた回数」、「高性能のサーバーが引ければ当たり」。クラウドサーバーのサービスは性能の大きく異なるサーバ群が存在し、インスタンス生成時にくじ引きのような確率で高性能サーバを引き当てる事があるため、このように言われているようです。

コメント