2017-01-26 15 views
5

ドッカー製作で構築されたアプリケーションをデプロイしようとしていますが、間違った方向に向いているようです。ドッキング用コンテナのデプロイ

  1. 私はすべてローカルで働いています - docker-compose upは、適切なネットワークとホストを適切な場所に配置してアプリを起動します。
  2. 異なった.envファイルを使用するだけで、本番マシン上でコンテナとネットワークの同じ設定を実行できるようにします。私は、彼らがそこに着くとき、再びdocker-compose upを実行できるように期待していた、この時点で

    docker save [web image] [db image] > containers.tar 
    zip deploy.zip containers.tar docker-compose.yml 
    rsync deploy.zip [email protected] 
    
    ssh [email protected] 
    unzip deploy.zip ./ 
    docker load -i containers.tar 
    
    docker-compose up 
    

    、それはあたりとしてコンテナを再構築しようとします:

私の現在のワークフローは次のようになりますdocker-compose.ymlファイル。

私は何かが欠けているという独特の感情を得ています。私は完全なアプリケーションの上に出荷する必要があります代わりに、サーバーで画像を構築する?レジストリから画像を保存/ロードする場合、コンポジットコンテナをどのように起動しますか?

+0

Dに関連するものはありませんか? – Bauss

+2

@Bauss良いキャッチ、ちょうどドッカーのタグを入力します。 –

+1

docker-composeはdocker-compose.ymlからコンテナを再構築しようとしますが、これは '--build'で' docker-compose up'を呼び出さないと意味がありません。 私の唯一のアイデアは、あなたのprodボックスに 'docker images'をつ​​けて、画像名とタグがdocker-compose.ymlのものと一致していることを確認することです。 – Stratos

答えて

1

問題は、開発と生産で同じdocker-compose.ymlファイルを使用していたことでした。

アプリサービスでリポジトリ名やタグが指定されていないため、サーバー上でdocker-compose upを実行したときに、アプリケーションのソースコードディレクトリ(サーバー上に存在しない)にDockerファイルを作成しようとしました。

私はローカルのdocker-compose.ymlに明示的な画像フィールドを追加することでこの問題を解決しました。

version: '2' 
services: 
    web: 
    image: 'my-private-docker-registry:latest' 
    # no build field! 

ローカルdocker-compose buildを実行した後、Webサービスのイメージがリポジトリ名my-private-docker-registryとタグlatestで構築されています:

version: '2' 
services: 
    web: 
    image: 'my-private-docker-registry:latest' 
    build: ./app 

は、その後の生産のための代替コンファイルを作成しました。

次に、画像をリポジトリにプッシュする場合です。

docker push 'my-private-docker-registry:latest' 

そしてdocker pullを実行している、それは新しいイメージで、実行中のコンテナを停止し、再作成しても安全です。

関連する問題