Docker撰写CoreOS

时间:2015-03-16 21:04:38

标签: docker coreos docker-compose

我目前正在学习Docker,并且做了一个漂亮而简单的Docker Compose设置。 3个容器,都有自己的Dockerfile设置。我怎样才能将其转换为在CoreOS上工作,以便稍后我可以设置一个集群?

web:
  build: ./app
  ports:
    - "3030:3000"
  links:
    - "redis"

newrelic:
  build: ./newrelic
  links:
    - "redis"

redis:
  build: ./redis
  ports:
    - "6379:6379"
  volumes:
    - /data/redis:/data

10 个答案:

答案 0 :(得分:51)

取自https://docs.docker.com/compose/install/

唯一的问题是/ usr是只读的,但/ opt / bin是可写的并且在路径中,所以:

NSLog(@"x: %f y: %f ",self.view.bounds.size.width,self.view.bounds.size.height);
NSLog(@"x: %f y: %f ",self.view.frame.size.width,self.view.frame.size.height);

// outputs 
// x: 1024.000000 y: 748.000000 
// x: 1024.000000 y: 748.000000 

答案 1 :(得分:33)

我已经创建了在CoreOS上安装最新Docker Compose的简单脚本: https://gist.github.com/marszall87/ee7c5ea6f6da9f8968dd

#!/bin/bash
mkdir -p /opt/bin
curl -L `curl -s https://api.github.com/repos/docker/compose/releases/latest | jq -r '.assets[].browser_download_url | select(contains("Linux") and contains("x86_64"))'` > /opt/bin/docker-compose
chmod +x /opt/bin/docker-compose

只需使用sudo

运行它

答案 2 :(得分:23)

在CoreOS上安装或运行任何东西的正确方法是

  1. 将其作为一个单元安装
  2. 在单独的泊坞窗容器中运行
  3. 对于docker-compose,您可能希望将其作为一个单元安装,就像您将docker作为一个单元一样。有关CoreOS和systemd units章节的信息,请参阅Digital Ocean的优秀指南以了解更多信息。

    根据您的云提供商或自定义安装找到您的云配置,有关位置的信息,请参阅https://coreos.com/os/docs/latest/cloud-config-locations.html

    通过将docker-compose作为一个单元添加来安装docker-compose

    #cloud-config
    
    coreos:
      units:
        - name: install-docker-compose.service
          command: start
          content: |
            [Unit]
            Description=Install docker-compose
            ConditionPathExists=!/opt/bin/docker-compose
    
            [Service]
            Type=oneshot
            RemainAfterExit=yes
            ExecStart=/usr/bin/mkdir -p /opt/bin/
            ExecStart=/usr/bin/curl -o /opt/bin/docker-compose -sL "https://github.com/docker/compose/releases/download/1.9.0/docker-compose-linux-x86_64"
            ExecStart=/usr/bin/chmod +x /opt/bin/docker-compose
    

    请注意,我无法在curl语句中使用uname -suname -m扩展,所以我只是将它们替换为扩展值。

    使用

    验证您的配置文件
    coreos-cloudinit -validate --from-file path-to-cloud-config
    

    应输出类似

    的内容
    myhost core # coreos-cloudinit -validate --from-file path-to-cloudconfig
    2016/12/12 12:45:03 Checking availability of "local-file"
    2016/12/12 12:45:03 Fetching user-data from datasource of type "local-file"
    myhost core #
    

    请注意,coreos-cloudinit不会验证您的cloud-config中的内容块。你完成后重新启动CoreOS,你准备好了。

    更新:正如@Wolfgang评论,您可以运行coreos-cloudinit --from-file path-to-cloud-config而不是重新启动CoreOS。

答案 3 :(得分:7)

我还建议使用像dduportal中那样的docker容器中的docker-compose。

为了便于使用,我将我的cloud-config.yml扩展如下:

write_files:
 - path: "/etc/profile.d/aliases.sh"
   content: |
     alias docker-compose="docker run -v \"\$(pwd)\":\"\$(pwd)\" -v /var/run/docker.sock:/var/run/docker.sock -e COMPOSE_PROJECT_NAME=\$(basename \"\$(pwd)\") -ti --rm --workdir=\"\$(pwd)\" dduportal/docker-compose:latest"

通过 sudo coreos-cloudinit -from-url http-path-to / cloud-config.yml 更新cloud-config并重新启动系统后,您可以使用docker-compose像你这样的命令已经习惯了所有其他机器。

答案 4 :(得分:6)

CentruyLabs创建了一个名为fig2coreos

的rubygem

它将fig.yml转换为.service文件

自从docker-compose创建以来,不推荐使用fig,但语法似乎相同,因此它可能会起作用。

答案 5 :(得分:4)

在这里, 我找到的最佳方式:

{
    "files.exclude": {
        "**/*.js": true
    }
}

完成!

答案 6 :(得分:4)

简单 3个步骤

sudo mkdir -p /opt/bin

在官方网站https://docs.docker.com/compose/install/中抓取命令并将输出路径从 / usr / local / bin / docker-compose 更改为 / opt / bin

sudo curl -L "https://github.com/docker/compose/releases/download/1.9.0/docker-compose-$(uname -s)-$(uname -m)" -o /opt/bin/docker-compose

制作可执行文件:

sudo chmod +x /opt/bin/docker-compose

现在你有 docker-compose :)

答案 7 :(得分:3)

好吧,coreOS支持docker,但它是带有集群支持的裸骨linux,所以你需要为所有容器包含一个基本映像(使用FROM和在Dockerfile中你可能还需要运行RUN yum -y install bzip2 gnupg等。 ,)有你的应用程序和redis所需的bin和libs(最好采取一些ubuntu基础图像)

在这里你可以将它们全部放在一个容器/码头中或单独分开然后你需要链接容器和可选的卷安装 - docker有一些关于它的好注释(https://docs.docker.com/userguide/dockervolumes/

Atlast,您需要编写指定systemd单元的云配置。在您的情况下,您将有3个将由systemd启动的单元(systemd替换coreOS中的旧的旧系统)并将其提供给coreos-cloudinit(提示:coreos-cloudinit -from-file =。/ cloud-config -validate = false),你还需要在linux bootcmd上提供这个cloud-config以保持持久性。

答案 8 :(得分:1)

目前,使用docker-compose的最简单方法是CoreOS Vagrant VM。您只需要确保forward Docker port

如果您不特别使用docker-compose,则可以尝试运行Kubernetes的CoreOS。有多个options,我已实施one of those for Azure

答案 9 :(得分:0)

要在Fedora CoreOS中使用docker-compose,您可能会遇到python问题,但是从容器运行docker-compose效果很好。

有一个方便的bash包装器脚本,在以下官方文档中进行了记录:https://docs.docker.com/compose/install/#alternative-install-options在“安装为容器”部分下。