Docker撰写CoreOS

Dus*_*tin 39 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
Run Code Online (Sandbox Code Playgroud)

Fra*_*cis 51

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

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

sd-xx~ # mkdir /opt/
sd-xx~ # mkdir /opt/bin
sd-xx~ # curl -L https://github.com/docker/compose/releases/download/1.3.3/docker-compose-`uname -s`-`uname -m` > /opt/bin/docker-compose
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
100   403    0   403    0     0   1076      0 --:--:-- --:--:-- --:--:--  1080
100 7990k  100 7990k    0     0  2137k      0  0:00:03  0:00:03 --:--:-- 3176k
sd-xx~ # chmod +x /opt/bin/docker-compose

sd-xx~ # docker-compose
Define and run multi-container applications with Docker.

Usage:
  docker-compose [options] [COMMAND] [ARGS...]
  docker-compose -h|--help

Options:
  -f, --file FILE           Specify an alternate compose file (default: docker-compose.yml)
  -p, --project-name NAME   Specify an alternate project name (default: directory name)
  --verbose                 Show more output
  -v, --version             Print version and exit

Commands:
  build              Build or rebuild services
  help               Get help on a command
  kill               Kill containers
  logs               View output from containers
  port               Print the public port for a port binding
  ps                 List containers
  pull               Pulls service images
  restart            Restart services
  rm                 Remove stopped containers
  run                Run a one-off command
  scale              Set number of containers for a service
  start              Start services
  stop               Stop services
  up                 Create and start containers
  migrate-to-labels  Recreate containers to add labels
Run Code Online (Sandbox Code Playgroud)

  • 拿起当前的docker-compose https://github.com/docker/compose/releases (2认同)

小智 34

我已经创建了在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
Run Code Online (Sandbox Code Playgroud)

只需运行它 sudo

  • 但是,`jq`似乎安装在CoreOS上. (5认同)

gog*_*tad 23

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

  1. 将其作为一个整体安装
  2. 在单独的docker容器中运行

因为docker-compose您可能希望将其作为一个单元安装,就像您docker作为一个单元一样.有关CoreOS和systemd units章节的详细信息,请参阅Digital Ocean的优秀指南以了解更多信息.

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

安装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
Run Code Online (Sandbox Code Playgroud)

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

使用验证您的配置文件

coreos-cloudinit -validate --from-file path-to-cloud-config
Run Code Online (Sandbox Code Playgroud)

它应该输出类似的东西

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 #
Run Code Online (Sandbox Code Playgroud)

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

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

  • 您无需重新启动整个服务器即可将更改应用于cloud-config; 只需运行`coreos-cloudinit --from-file path-to-cloud-config`. (2认同)

小智 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"
Run Code Online (Sandbox Code Playgroud)

通过sudo coreos-cloudinit -from-url http-path-to/cloud-config.yml更新cloud-config 并重新启动系统后,您可以像使用其他机器一样使用docker -compose命令.

  • 现在有一个用于撰写的官方码头工具,[`docker/compose`](https://hub.docker.com/r/docker/compose/).此外,来自github [releases](https://github.com/docker/compose/releases)页面的`run.sh脚本使用此容器与`docker run`. (2认同)

Jul*_*fke 6

CentruyLabs创造了一个名为fig2coreos的rubygem

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

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


Ren*_*ado 5

简单的3 个步骤

sudo mkdir -p /opt/bin
Run Code Online (Sandbox Code Playgroud)

抓取官网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
Run Code Online (Sandbox Code Playgroud)

使可执行:

sudo chmod +x /opt/bin/docker-compose
Run Code Online (Sandbox Code Playgroud)

现在你有了docker-compose :)