如何使用cloud-init安装docker?

时间:2014-06-25 21:22:23

标签: openstack user-data cloud-init

我想在Openstack中创建实例,在ssh之前已经安装了Docker。所以我很自然地对Cloud-init技术感兴趣,因为它允许我们在第一次启动时在虚拟机上安装软件包。所以现在我尝试在启动时在我的实例上安装Docker,这是我传递给用户数据的代码;

#cloud-config

packages:
   - docker.io

这显然不起作用,所以我怎样才能使它发挥作用?

4 个答案:

答案 0 :(得分:7)

还有一个码头脚本,可以#包括这对码头工人来说非常方便。 而不是#cloud-config,请使用

#include https://get.docker.com

答案 1 :(得分:6)

如果要从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应该更改其回购签名密钥,则您可以使自己确信更改是合法的,然后使用类似以下内容的新指纹:

$ 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]

答案 2 :(得分:4)

Docker Convenience脚本carries a warning for production环境的使用:

不建议在生产环境中使用这些脚本

以下是在所有环境下使用cloud-init在Ubuntu上安装Docker的两种可能方法。

完全安装:(gist reference

#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]

简化的安装:(gist reference

#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]

答案 3 :(得分:0)

如果只需要将docker添加到已部署的实例中,里卡多的解决方案就很棒。但是,如果您仍然需要#cloud-config(以自定义其他内容,例如预装的软件包),这是一个受他的启发的简单解决方案,只需添加以下命令:

#cloud-config
# ... more config here

runcmd:
  - curl -fsSL https://get.docker.com -o get-docker.sh; sh get-docker.sh