Docker撰写到CoreOS

我目前正在学习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 

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

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

 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 

我已经创build了一个简单的脚本在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运行它

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

  1. 安装它作为一个单位
  2. 在单独的泊坞窗容器中运行

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

根据您的云提供商或自定义安装find您的云configuration,请参阅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 

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

validation你的configuration文件

 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不会validation您的cloud-config中的内容块。 完成后重新启动CoreOS,然后就可以开始了。

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

我还build议docker集装箱docker集装箱,如dduportal 。

为了可用性,我扩展了我的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命令,就像你在其他机器上使用的一样。

CentruyLabs创build了一个名为fig2coreos的rubygem

它将fig.yml翻译为.service文件

无花果已被弃用,因为docker创build,但语法似乎是相同的,所以它可能工作。

简单3步骤

 sudo mkdir -p /opt/bin 

在官方网站https://docs.docker.com/compose/install/中获取命令,并将输出path从/ 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 🙂

好吧,coreOS支持docker,但是它是裸集linux支持集群,所以你需要包含所有容器的基本映像(使用FROM和在Dockerfile中,你可能还需要执行yum -y install bzip2 gnupg等),有你的应用程序和Redis需要的仓库和库(更好地采取一些Ubuntu的基础映像)

在这里,你可以把所有的人放在一个容器/docker或单独的,如果你单独做,那么你需要链接容器和可选的卷装入 – docker有一些关于它的好logging( https://docs.docker.com/userguide / dockervolumes / )

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

在这里,我发现了最好的方法:

 core@london-1 ~ $ docker pull dduportal/docker-compose core@london-1 ~ $ cd /dir/where-it-is-your/docker-compose.yml core@london-1 ~ $ docker run -v "$(pwd)":/app \ -v /var/run/docker.sock:/var/run/docker.sock \ -e COMPOSE_PROJECT_NAME=$(basename "$(pwd)")\ -ti --rm \ dduportal/docker-compose:latest up 

完成了!

目前,使用docker-compose的最简单的方法就是使用CoreOS Vagrant虚拟机 。 您只需确保转发Docker端口 。

如果你不是特别喜欢使用docker docker-compose ,你可以试试运行Kubernetes的CoreOS 。 有多种select ,我已经为Azure实现了其中的一个 。