docker
DockerDay 16

Docker in Docker

More than 1 year has passed since last update.

Docker in Docker

本記事では Docker の中で Docker を使う技を紹介します。

Docker in Docker とは?

Docker コンテナの中で Docker コンテナを動かす技術です。
Docker の中で Docker を動かすには特権モード (privileged) を使います。
特権モードは Docker の機能のオプションの1つとしてデフォルトで存在します。

何がうれしいの?

Docker コンテナを管理するサーバ(以下、Docker管理サーバ)を Docker で動かしたい場合に使うと非常に便利です。
通常の使い方としては Docker 管理サーバをホストにインストールして・・・、という運用になります。
しかし、管理サーバ自体のインストール自体も Docker でやりたいなー、と Docker 使いとしては思うわけです。

Docker in Docker の例として Dokku Alternative (dokku-alt) という Heroku のようなホスティング機能を Docker で実現できるサーバを Docker の上に構築する方法を紹介します。

dokku-alt って何?

dokku-alt はローカル環境に Heroku 的なホスティングサーバを構築できる OSS です。
dokku-alt のメリットは Dockerfile を書く必要がないことです!
通常、 Docker 環境を構築するためには Dockerfile に設定を書きますが、
dokku-alt では Procfile というアプリの実行設定を書きます。
Procfile の代わりに(通常の) Dockerfile を使うこともできます。
git push するだけでアプリケーションを配備できます。

dokku-alt の構築

以下の手順で dokku-alt をインストールします。
ホストには既に Docker がインストールされているものとします。

  1. dokku-alt のインストール

    $ sudo docker run --volume=/home/dokku --volume=/var/lib/docker --name=dokku-alt-data busybox:latest
    
  2. dokku-alt の実行

    $ sudo docker run -d --name=dokku-alt --hostname=my-domain.com --volumes-from=dokku-alt-data --publish=10022:22 --publish=80:80 --publish=443:443 --privileged ayufan/dokku-alt:latest
    
  3. ssh 情報の取得

    $ sudo docker logs dokku-alt
    
    dokku.1 | SSH Login:  
    dokku.1 |   user: root  
    dokku.1 |   password: XXXXXXX
    dokku.1 |   ip: 10.0.xx.xx 172.17.xx.xx  
    dokku.1 | Starting dokku daemon...
    
  4. 初期設定

    $ ssh -p 10022 root@172.17.xx.xx "curl -L https://github.com/(YOUR_NAME).keys | while read f; do echo $f | dokku access:add; done"
    
  5. アプリのデプロイ

    $ git clone https://github.com/heroku/node-js-sample.git
    $ cd node-js-sample
    $ git remote add dokku dokku@172.17.xx.xx:node-js-sample
    $ ssh -p 10022 root@172.17.xx.xx "dokku domains:set dokku.172.17.xx.xx.xip.io"
    $ git push dokku master
    
  6. 動作確認

    $ curl -v http://node-js-sample.dokku.172.17.xx.xx.xip.io
    

まとめ

  • まだ Dockerfile を手で書いてるの?
  • dokku-alt 楽しい!

参考文献

宣伝

会社のエンジニアブログでも Docker の記事を書いてます。