web-dev-qa-db-ja.com

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
39
Dustin

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で実行するだけです

34
marszall87

CoreOSで実際に何かをインストールまたは実行する適切な方法は、

  1. ユニットとしてインストールする
  2. 別のdockerコンテナーで実行する

docker-composeの場合、dockerをユニットとして持っているのと同じように、おそらくユニットとしてインストールしたいでしょう。詳細については、Digital OceanのCoreOSに関する優れたガイドと systemdユニット の章を参照してください。

クラウドプロバイダーまたはカスタムインストールに基づいてクラウド構成を見つけます。場所については 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

Curlステートメントでuname -sおよびuname -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を再起動する代わりにcoreos-cloudinit --from-file path-to-cloud-configを実行できます。

23
gogstad

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コマンドを使用できます。

7
derfranz

CentruyLabsは fig2coreos という名前のrubygemを作成しました

Fig.ymlを.serviceファイルに変換します

docker-composeが作成されたため、figは推奨されませんが、おそらく動作するように構文は同じようです。

6
Julian Kaffke

ここにある、私が見つけた最良の方法:

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

できた!

4
BBJ3

シンプル3ステップ

Sudo mkdir -p /opt/bin

公式Webサイトでコマンドを取得します https://docs.docker.com/compose/install/ から出力パスを/ usr/local/bin /に変更しますdocker-composeto/ 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ができました:)

4
Renato Prado

よく、coreOSはdockerをサポートしますが、クラスタリングサポートを備えたベアボーンlinuxであるため、すべてのコンテナのベースイメージを含める必要があります(FROMを使用し、DockerfileでRUN yum -y install bzip2 gnupgなどを実行する必要がある場合があります)。あなたのアプリとredisに必要なビンとライブラリがあります(ubuntuベースイメージをもっとよく撮ってください)

ここでは、それらすべてを1つのコンテナ/ドッカーに入れるか、または別々に行う場合は別々にすることができます。コンテナとオプションでボリュームマウントをリンクする必要があります-ドッカーにはそれに関するいくつかの良いメモがあります( https://docs.docker .com/userguide/dockervolumes /

最後に、systemdユニットを指定するクラウド設定を記述する必要があります。あなたの場合、systemdによって起動される3つのユニットがあり(systemdはcoreOSの古き良き初期化システムを置き換えます)、coreos-cloudinitにフィードします(ヒント:coreos-cloudinit -from-file =。/ cloud-config -validate = false)、永続性のためにlinux bootcmdでこのcloud-configも提供する必要があります。

3
resultsway

現在、docker-composeを使用する最も簡単な方法は、 CoreOS Vagrant VM です。 フォワードDockerポート を確認する必要があります。

docker-composeの使用に特に関心がない場合は、 Kubernetes を実行してCoreOSを試すことができます。複数の オプション があり、 Azureの1つ を実装しました。

1
errordeveloper