Blueshiftプロジェクトにおいて、PuppetはPuppetを実行するための一連の新しいDockerイメージをreleased to Docker Hubにリリースした。
これらのDockerイメージの例には(単独動作もしくはPuppetDBと連携する)Puppet Serverを実行するPuppet Serverのイメージと連携するPostgreSQLのイメージを含むPuppetDBが含まれる。また、これらと併せて二つのエージェントイメージがあり、一つはUbuntu Xenial Puppetエージェントパッケージをベースにしたもので、もう一つはスリム化されたAlpineリリースである。
Blueshiftは異種混合のソフトウェアの管理の問題への解のデモであり、Puppetを新しいソフトウェアスタックを管理する統一的な方法として用いるものである。BlueshiftはConsul、CoreOSやMesosといったテクノロジと統合する方法についてのPuppetコミュニティからの情報が含まれている。BlueshiftはPuppet社内部からの成果物も含む。
PuppetはDockerでPuppetを用いる方法の例についても提供している。例には現在、VMware Photon OS、Red Hat CentOS AtomicとCoreOS上のDockerでのPuppetの使用方法が含まれている。また、Docker Composeを用いてPuppetのインフラを立ち上げる方法の例も含まれている。
あるBlueshiftプロジェクトの例で、Gareth Rushgrove氏はPuppetを用いてDockerコンテナを管理する方法のデモを行っている。Puppet DockerモジュールはDockerの初期リリース付近にリリースされ、その時からコミュニティでメンテナンスされている。
最初のステップはPuppet Dockerのサンプルモジュールをインストールすることである。
# puppet module install garethr-docker
最もシンプルに、Dockerモジュールによりマニフェストに一行書くだけでDockerをインストールすることができる
include 'docker'
必要なだけマニフェストには複数のイメージを定義することができる。この例ではUbuntuのイメージが用いられている。
docker::image { ‘ubuntu':
image => 'trusty',
}
これらの単純なDockerコンテナにはPuppetを簡単に適用することができる。Docker versionコマンドの実行により、バージョンの詳細とともにDockerがインストールされていることを確認できる。
# puppet apply /vagrant/docker_example.pp
# docker version
Client version: 1.5.0
Client API version: 1.17
Go version (client): go1.4.1
Git commit (client):a8a31ef
OS/Arch (client): linux/amd64
Server version: 1.5.0
Server API version: 1.17
Go version (server): go1.4.1
Git commit (server): a8a31ef
#
Docker psコマンドは実行されているコンテナがないことを示している。
# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
#
Docker imageコマンドはDockerイメージが作成されたことを示している。
# docker images
REPOSITORY TAG IMAGE ID CREATED VIRTUAL SIZE
Ubuntu trusty d0955f21bf24 3 weeks ago 188.3 MB
Ubuntu trusty-20150320 d0955f21bf24 3 weeks ago 188.3 MB
Ubuntu latest d0955f21bf24 3 weeks ago 188.3 MB
Ubuntu 14.04 d0955f21bf24 3 weeks ago 188.3 MB
Ubuntu 14.04.2 d0955f21bf24 3 weeks ago 188.3 MB #
Dockerモジュールは個々のDockerコンテナの実行と管理をサポートしている。コンテナはホスト上の初期化システム(例えばsystemdやsysvinit)、もしくはDocker組み込みのプロセスマネージャの管理下で実行することができる。次に二つの単純なDocker runリソースを追加する。
docker::run { 'helloworld':
image => 'ubuntu',
command => '/bin/sh -c "while true; do echo hello world; sleep 1; done"',
}
docker::run { 'goodbyecruelworld':
image => 'ubuntu',
command => '/bin/sh -c "while true; do echo goodbye cruel world; sleep 1; done"',
}
puppet apply
を用いて、Dockerコンテナ内で実行される二つのサービスを更新することができる。Docker psコマンドは二つのシンプルなサービスが現在実行されていることを示している。
# Puppet apply /vagrant/docker_example.pp
Notice: Compiled catalog for localhost in environment production in 0.93 seconds
Notice: /Stage[main]/Main/Docker::Run[helloworld]/File[/etc/init.d/docker-helloworld]/ensure: created
Notice: /Stage[main]/Main/Docker::Run[helloworld]/Service[docker-helloworld]/ensure: ensure changed ‘stopped’to ‘running’
Notice: /Stage[main]/Main/Docker::Run[goodbyecruelworld]/File[/etc/init.d/docker-goodbyecruelworld]/ensure: created
Notice: /Stage[main]/Main/Docker::Run[goodbyecruelworld]/Service[docker-goodbyecruelworld]/ensure: ensure changed ‘stopped’ to ‘running’
Notice: Finished catalog run in 1.11 seconds
# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
27b9ca786f9b ubuntu:14.04 “/bin/sh -c ‘while t 18 seconds ago Up 17 seconds jolly_wright
4ec0c0225714 ubuntu:14.04 “/bin/sh -c ‘while t 18 seconds ago Up 17 seconds focused_wright
#
Docker attachコマンドとコンテナIDを用いてサービスの一つにアタッチすることで、Dockerで実行しているサービスを見ることができる。
# docker attach 27b9ca786f9b
goodbye cruel world
goodbye cruel world
goodbye cruel world
^C#
#
# docker attach 4ec0c0225714
hello world
hello world
hello world
^C#
#
Dockerモジュールはボリュームのマウント、環境変数の設定、特権コンテナの実行やポートの開放のような動作もサポートしている。PuppetはDocker exec機能を用いて実行中のコンテナのコンテキスト内でコマンドを実行することもできる。
docker::exec { 'helloworld-uptime':
detach => true,
container => 'helloworld',
command => 'uptime',
tty => true,
}
Rate this Article
- Editor Review
- Chief Editor Action