如何使用 Packer Salt provisioner 创建 docker 镜像?
How to use Packer Salt provisioner to create docker images?
如何使用 Packer Salt 配置器创建 docker 图像?
这是我的 packer.json
文件。我会在下方评论
{
"builders": [
{
"type": "docker",
"image": "enonic/docker-salt-masterless-ubuntu",
"export_path": "cassandra.tar" // Not sure what this is doing?
}
],
"provisioners": [
{
"type": "file",
"source": "/srv/salt/cassandra", // This is where the cassandra directory is on my host machine which is ubuntu
"destination": "/srv/salt/cassandra" // This is where I expect the cassandra directory on my host machine gets copied to inside a docker container
},
{
"type": "salt-masterless",
"local_state_tree": "/srv/salt/cassandra",
"custom_state": "/srv/salt/cassandra/init.sls",
"disable_sudo": true
}
]
}
sudo docker build packer.json
我得到以下错误
Build 'docker' errored: Failed to upload to '/srv/salt/cassandra' in container: Error response from daemon: lstat /var/lib/docker/aufs/mnt/0c6a422400a073624a66b00580a6b9e5551e82a06495c46b1f840b38ca55699d/srv/salt: no such file or directory
. exit status 1.
==> Some builds didn't complete successfully and had errors:
--> docker: Failed to upload to '/srv/salt/cassandra' in container: Error response from daemon: lstat /var/lib/docker/aufs/mnt/0c6a422400a073624a66b00580a6b9e5551e82a06495c46b1f840b38ca55699d/srv/salt: no such file or directory
如果我能得到一个简单的工作示例,说明如何从主机使用 salt state 文件并使用加壳器构建 docker 映像,那就太好了。我的 cassandra 状态文件与 https://github.com/salt-formulas/salt-formula-cassandra
相同
我的 top.sls
文件看起来像这样
base:
'client*-es-*':
- roles-elasticsearch
'client*-cassandra-*':
- roles-cassandra
'P@os:(Debian|Ubuntu) and P@roles:(elasticsearch|cassandra)':
- match: compound
- deb-common
'roles:elasticsearch':
- match: grain
- disk-raid0-3volumes
- disk-elasticsearch
- elasticsearch
- elasticsearch.cerebro
'roles:cassandra':
- match: grain
- disk-raid0-3volumes
- disk-cassandra
- cassandra
我只想为 cassandra 构建一个 docker 容器镜像,而不是为我的 top.sls
中的所有内容构建一个容器镜像。那我该怎么做呢?
我将您的示例调整得更简单,只需安装 Apache 2。
shell
provisioner 只是因为我不懂 salt 也没有花时间研究如何做 apt-get update
。
首先,基础镜像已经安装了 salt,所以使用 skip_bootstrap
。您不应将状态目录 上传到来宾(Docker 容器),因为这是自动完成的,所有这些都在文档Packer - Salt Masterless 中。 local_state_tree
应该指向盐州树 i.g 的底部。 /srv/salt
你的情况。
一个工作示例:
树
.
├── salt
│ ├── apache
│ │ └── init.sls
│ └── top.sls
└── template.json
Template.json
{
"builders": [
{
"type": "docker",
"image": "enonic/docker-salt-masterless-ubuntu",
"export_path": "apache2.tar"
}
],
"provisioners": [
{
"type": "shell",
"inline": [
"apt-get update"
]
},
{
"type": "salt-masterless",
"local_state_tree": "salt",
"skip_bootstrap": true,
"disable_sudo": true
}
]
}
top.sls
base:
'*':
- apache
apache/init.sls
apache2:
pkg.installed: []
service.running:
- require:
- pkg: apache2
您需要将 local_state_path
更改为 /srv/salt
。
如何使用 Packer Salt 配置器创建 docker 图像?
这是我的 packer.json
文件。我会在下方评论
{
"builders": [
{
"type": "docker",
"image": "enonic/docker-salt-masterless-ubuntu",
"export_path": "cassandra.tar" // Not sure what this is doing?
}
],
"provisioners": [
{
"type": "file",
"source": "/srv/salt/cassandra", // This is where the cassandra directory is on my host machine which is ubuntu
"destination": "/srv/salt/cassandra" // This is where I expect the cassandra directory on my host machine gets copied to inside a docker container
},
{
"type": "salt-masterless",
"local_state_tree": "/srv/salt/cassandra",
"custom_state": "/srv/salt/cassandra/init.sls",
"disable_sudo": true
}
]
}
sudo docker build packer.json
我得到以下错误
Build 'docker' errored: Failed to upload to '/srv/salt/cassandra' in container: Error response from daemon: lstat /var/lib/docker/aufs/mnt/0c6a422400a073624a66b00580a6b9e5551e82a06495c46b1f840b38ca55699d/srv/salt: no such file or directory
. exit status 1.
==> Some builds didn't complete successfully and had errors:
--> docker: Failed to upload to '/srv/salt/cassandra' in container: Error response from daemon: lstat /var/lib/docker/aufs/mnt/0c6a422400a073624a66b00580a6b9e5551e82a06495c46b1f840b38ca55699d/srv/salt: no such file or directory
如果我能得到一个简单的工作示例,说明如何从主机使用 salt state 文件并使用加壳器构建 docker 映像,那就太好了。我的 cassandra 状态文件与 https://github.com/salt-formulas/salt-formula-cassandra
相同我的 top.sls
文件看起来像这样
base:
'client*-es-*':
- roles-elasticsearch
'client*-cassandra-*':
- roles-cassandra
'P@os:(Debian|Ubuntu) and P@roles:(elasticsearch|cassandra)':
- match: compound
- deb-common
'roles:elasticsearch':
- match: grain
- disk-raid0-3volumes
- disk-elasticsearch
- elasticsearch
- elasticsearch.cerebro
'roles:cassandra':
- match: grain
- disk-raid0-3volumes
- disk-cassandra
- cassandra
我只想为 cassandra 构建一个 docker 容器镜像,而不是为我的 top.sls
中的所有内容构建一个容器镜像。那我该怎么做呢?
我将您的示例调整得更简单,只需安装 Apache 2。
shell
provisioner 只是因为我不懂 salt 也没有花时间研究如何做 apt-get update
。
首先,基础镜像已经安装了 salt,所以使用 skip_bootstrap
。您不应将状态目录 上传到来宾(Docker 容器),因为这是自动完成的,所有这些都在文档Packer - Salt Masterless 中。 local_state_tree
应该指向盐州树 i.g 的底部。 /srv/salt
你的情况。
一个工作示例:
树
.
├── salt
│ ├── apache
│ │ └── init.sls
│ └── top.sls
└── template.json
Template.json
{
"builders": [
{
"type": "docker",
"image": "enonic/docker-salt-masterless-ubuntu",
"export_path": "apache2.tar"
}
],
"provisioners": [
{
"type": "shell",
"inline": [
"apt-get update"
]
},
{
"type": "salt-masterless",
"local_state_tree": "salt",
"skip_bootstrap": true,
"disable_sudo": true
}
]
}
top.sls
base:
'*':
- apache
apache/init.sls
apache2:
pkg.installed: []
service.running:
- require:
- pkg: apache2
您需要将 local_state_path
更改为 /srv/salt
。