docker - 如何使用 cloud-init (cloud-config) 启动 docker 容器(或 docker-compose)

标签 docker docker-compose cloud-init

我尝试启动一个服务器,该服务器应该使用一个简单的“hello-world”容器运行 docker 和 docker-compose。我的 YAML 文件如下所示:

#cloud-config
ssh_authorized_keys:
  - ssh-rsa MY_SSH_KEY_HERE

package_update: true
package_upgrade: true

packages:
  - docker.io

runcmd:
  - [ sh, -c, "sudo apt install -y docker" ]
  - [ sh, -c, "sudo apt install -y docker-compose"]
  - [ sh, -c, "sudo service docker start" ]

rancher:
  services:
    rancher-server:
      image: hello-world
      restart: always
      ports:
      - 80:80
      environment:
        - TEST_VAR=TEST

Docker 已安装但无法启动镜像
root@test ~ # which docker
/usr/bin/docker
root@test ~ # which docker-compose
/usr/bin/docker-compose

> sudo docker ps
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES

顺便说一句:是否有必要包括 packages: docker.io ?

最佳答案

在此答案中,如果您不使用 Azure VM,则可以忽略将默认 azure 用户添加到 docker 组。但是请记住,要运行 docker,您必须将当前用户添加到 docker 组,否则您可能会收到权限被拒绝的错误。

#cloud-config

package_update: true

# Setup swap memory
disk_setup:
    ephemeral0:
        table_type: mbr
        layout: [66, [33, 82]]
        overwrite: True
fs_setup:
    - device: ephemeral0.1
      filesystem: ext4
    - device: ephemeral0.2
      filesystem: swap
mounts:
    - ["ephemeral0.1", "/mnt"]
    - ["ephemeral0.2", "none", "swap", "sw", "0", "0"]

# Enable Docker's swap limit support (System restart required)
bootcmd:
    - [ sh, -c, 'sudo echo GRUB_CMDLINE_LINUX=\"cgroup_enable=memory swapaccount=1\" >> /etc/default/grub' ]
    - [ sh, -c, 'sudo update-grub' ]

# Install latest stable docker and docker-compose
runcmd:
    - [ sh, -c, 'curl -sSL https://get.docker.com/ | sh' ]
    - [ sh, -c, 'sudo curl -L https://github.com/docker/compose/releases/download/$(curl -s https://api.github.com/repos/docker/compose/releases/latest | grep "tag_name" | cut -d \" -f4)/docker-compose-$(uname -s)-$(uname -m) -o /usr/local/bin/docker-compose' ]
    - [ sh, -c, 'sudo chmod +x /usr/local/bin/docker-compose' ]
    - [ sh, -c, 'sudo docker run -d nginx:latest' ]

# Add default azure user to docker group
system_info:
    default_user:
        groups: [docker]

# Restart the system
 power_state:
   delay: "now"
   mode: reboot
   message: First reboot
   condition: True

关于docker - 如何使用 cloud-init (cloud-config) 启动 docker 容器(或 docker-compose),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49232868/

相关文章:

docker - Reflex Golang与docker,docker-compose和makefile

docker - 如何在Docker容器中运行基于Netlogo平台代理的建模?

linux - 我可以在不使用 openstack 或 EC2 的情况下运行 cloud-init 环境吗?

windows - Powershell脚本适用于服务器,但不适用于cloudformation cfn-init函数

cloud-init - 附加 cloud-init write_files

docker - 为什么只有 `expose` 配置的服务能够与互联网通信?

docker - 使用 ocelot 和 docker 服务使用路由 ApiGateway 时出错

docker 。如何将参数传递给 FROM 子句?

docker - Windows 10上的Docker卷映射文件夹问题

mongodb - 为什么我无法在 docker-compose 中使用 azure 文件共享将 mongodb 数据存储在 Azure 容器实例中?