[英]Can I run a cloud-init environment without using openstack or EC2?
[英]How do I install docker using cloud-init?
我想在 Openstack 中创建实例,在 ssh 到它们之前已经安装了 Docker。 所以很自然地我对 Cloud-init 技术感兴趣,因为它允许我们在第一次启动时在虚拟机上安装包。 所以现在我试图在启动时在我的实例上安装 Docker,这是我传递给用户数据的代码;
#cloud-config
packages:
- docker.io
这显然不起作用,那么我怎样才能使它起作用呢?
如果您想从 Ubuntu 实例上的 Docker 存储库安装,并且您不太喜欢下载和执行任意 shell 脚本的想法,那么您只需要:
#cloud-config
apt:
sources:
docker.list:
source: deb [arch=amd64] https://download.docker.com/linux/ubuntu $RELEASE stable
keyid: 9DC858229FC7DD38854AE2D88D81803C0EBFCD88
packages:
- docker-ce
- docker-ce-cli
cloud-init 已经知道如何获取 GPG 密钥,如何添加 APT 源(即使它是 HTTPS),如何在安装软件包之前更新 APT,以及如何执行您在各种 shell 脚本中可以找到的所有其他内容这样做的重方法。
如果 Docker 应该更改他们的 repo 签名密钥,您可以让自己确信更改是合法的,然后使用以下内容获取新指纹:
$ curl -sL https://download.docker.com/linux/ubuntu/gpg | gpg
gpg: keybox '/home/ubuntu/.gnupg/pubring.kbx' created
gpg: WARNING: no command supplied. Trying to guess what you mean ...
pub rsa4096 2017-02-22 [SCEA]
9DC858229FC7DD38854AE2D88D81803C0EBFCD88
uid Docker Release (CE deb) <docker@docker.com>
sub rsa4096 2017-02-22 [S]
有一个docker脚本可以#include'd,这对docker来说非常方便。 而不是#cloud-config,使用
#include https://get.docker.com
注意:您不应使用 Docker 便捷脚本 ( get.docker.com
),它带有针对生产环境的警告:
不建议在生产环境中使用这些脚本
以下是在 Ubuntu 上使用 cloud-init 为所有不使用 Docker Convenience 脚本的环境安装 Docker 的三种方法。
#cloud-config
apt:
sources:
docker.list:
source: deb [arch=amd64] https://download.docker.com/linux/ubuntu $RELEASE stable
keyid: 9DC858229FC7DD38854AE2D88D81803C0EBFCD88
packages:
- apt-transport-https
- ca-certificates
- curl
- gnupg-agent
- software-properties-common
- docker-ce
- docker-ce-cli
- containerd.io
# Enable ipv4 forwarding, required on CIS hardened machines
write_files:
- path: /etc/sysctl.d/enabled_ipv4_forwarding.conf
content: |
net.ipv4.conf.all.forwarding=1
# create the docker group
groups:
- docker
# Add default auto created user to docker group
system_info:
default_user:
groups: [docker]
#cloud-config
packages:
- apt-transport-https
- ca-certificates
- curl
- gnupg-agent
- software-properties-common
# Enable ipv4 forwarding, required on CIS hardened machines
write_files:
- path: /etc/sysctl.d/enabled_ipv4_forwarding.conf
content: |
net.ipv4.conf.all.forwarding=1
# create the docker group
groups:
- docker
# Install Docker, for production, consider pinning to stable versions
runcmd:
- curl -fsSL https://download.docker.com/linux/ubuntu/gpg | apt-key add -
- add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable"
- apt-get update -y
- apt-get install -y docker-ce docker-ce-cli containerd.io
- systemctl start docker
- systemctl enable docker
# Add default auto created user to docker group
system_info:
default_user:
groups: [docker]
#cloud-config
packages:
- docker.io
# create the docker group
groups:
- docker
# Add default auto created user to docker group
system_info:
default_user:
groups: [docker]
如果您只需要将 docker 添加到已部署的实例中,Ricardo 的解决方案非常棒。 但是,如果您仍然需要#cloud-config
(自定义其他内容,例如预安装的软件包),这里有一个受他的回答启发的简单解决方案,只需添加以下命令:
#cloud-config
# ... more config here
runcmd:
- curl -fsSL https://get.docker.com -o get-docker.sh; sh get-docker.sh
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.