Site icon Mr. 沙先生

Puppet 對於 Docker 佈署方式

在 Puppet Blog 提到一篇「The challenges of container configuration」怎麼用 Puppet 來佈署 Docker images

 

裡面主要是透過 image_build 這個 module 讓 Puppet 支援 docker,這篇講的是 build Docker image 的方式

 

使用 module install image_build

$ puppet module install puppetlabs/image_build

 

實作 Docker by puppet

以 nginx 為例

檔案結構會像這樣:

nginx
├── manifests
│   └── init.pp
├── metadata.yaml
└── Puppetfile

 

manifests/init.pp 就是用 Puppet 寫 nginx 的安裝方式

Service {
  provider => dummy
}

class { 'nginx': }

nginx::resource::vhost { 'default':
  www_root => '/var/www/html',
}

file { '/var/www/html/index.html':
  ensure  => present,
  content => 'Hello Puppet and Docker',
}

exec { 'Disable Nginx daemon mode':
  path    => '/bin',
  command => 'echo "daemon off;" >> /etc/nginx/nginx.conf',
  unless  => 'grep "daemon off" /etc/nginx/nginx.conf',
}

 

而 Docker metadata 的部份則要寫在 metadata.yaml

cmd: nginx
expose: 80
image_name: puppet/nginx

 

相依性的 module 是用 Puppetfile 處理

forge 'https://forgeapi.puppetlabs.com'

mod 'jfryman/nginx'
mod 'puppetlabs/stdlib'
mod 'puppetlabs/concat'
mod 'puppetlabs/apt'
mod 'puppetlabs/dummy_service'

 

然後就可以 build Docker

$ puppet docker build

如果你沒有安裝 image_build 的話,puppet 不支援 docker 這個 subcommand

 

查看是不是真的有 build 起來

$ docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
puppet/nginx        latest              e6000c720ef3        39 minutes ago      356.6 MB

 

Puppet 也可以輸出 Dockerfile

$ puppet docker dockerfile > Dockerfile

 

Puppet 跑 Docker run

$ puppet docker

 

除此之外還有 tag、expose、volume … 等等,Docker 有的在 image_build 都有支援,而且也能用 Hiera 存放 data

 

除了 image_build,另一個 puppetlabs-docker_platform 也是用來管理 Docker,支援 cluster、compose、registry。

Exit mobile version