何が間違っているのかわかりませんが、docker-compose up
最初にシステムから古いコンテナを完全に削除しないと、レジストリから最新のイメージを使用できません。docker-compose pullが新しいイメージをフェッチしたにもかかわらず、composeは以前に開始されたイメージを使用しているようです。
私が見て、常に新鮮なイメージから容器を再作成するために、ドッキングウィンドウ-コンを取得する方法?これは私の問題に似ているように見えましたが、本番サーバーで使用できるソリューションを探していて、開始する前にすべてのコンテナーを削除したくないため、提供されているソリューションはどれも機能しません。再び(データ損失の可能性?)。変更されたイメージの新しいバージョンを検出し、それらをプルしてから、それらの新しいイメージでサービスを再起動するためだけに、composeを作成したいと思います。
このための簡単なテストプロジェクトを作成しました。このプロジェクトでは、新しいビルドごとにバージョンnrを増やすことが唯一の目標です。作成されたnginxサーバーを参照すると、バージョンnrが表示されます(これはローカルで期待どおりに機能します)。
dockerバージョン:1.11.2 docker-composeバージョン:1.7.1 OS:docker-toolboxを使用してCentOS7とOSX10.10の両方でテスト済み
私のdocker-compose.yml:
version: '2'
services:
application:
image: ourprivate.docker.reg:5000/ourcompany/buildchaintest:0.1.8-dev
volumes:
- /var/www/html
tty: true
nginx:
build: nginx
ports:
- "80:80"
volumes_from:
- application
volumes:
- ./logs/nginx/:/var/log/nginx
php:
container_name: buildchaintest_php_1
build: php-fpm
expose:
- "9000"
volumes_from:
- application
volumes:
- ./logs/php-fpm/:/var/www/logs
jenkinsサーバーで次のコマンドを実行してイメージをビルドしてタグ付けします
cd $WORKSPACE && PROJECT_VERSION=$(cat VERSION)-dev
/usr/local/bin/docker-compose rm -f
/usr/local/bin/docker-compose build
docker tag ourprivate.docker.reg:5000/ourcompany/buildchaintest ourprivate.docker.reg:5000/ourcompany/buildchaintest:$PROJECT_VERSION
docker push ourprivate.docker.reg:5000/ourcompany/buildchaintest
ビルドが完了し、バージョンnrがバンプされるたびに、リポジトリに新しいバージョンタグが取得されるため、これは想定どおりの動作をしているようです。
私が今走ったら
docker-compose pull && docker-compose -f docker-compose.yml up -d
内容がdocker-compose.ymlとnginxおよびphpサービスを構築するために必要なDockerfilesのみである私のコンピューター上のフォルダーでは、取得する出力は、レジストリでタグ付けされているか、表示されている最新のバージョン番号ではありませんdocker-compose.yml(0.1.8)にありますが、それ以前のバージョンは0.1.7です。ただし、pullコマンドの出力は、新しいバージョンのイメージがフェッチされたことを示しています。
Pulling application (ourprivate.docker.reg:5000/ourcompany/buildchaintest:latest)...
latest: Pulling from ourcompany/buildchaintest
Digest: sha256:8f7a06203005ff932799fe89e7756cd21719cccb9099b7898af2399414bfe62a
Status: Downloaded newer image for docker.locotech.fi:5000/locotech/buildchaintest:0.1.8-dev
私が走った場合のみ
docker-compose stop && docker-compose rm -f
次に、 docker-compose up
コマンド、新しいバージョンを期待どおりに画面に表示しますか。
これはdocker-composeの意図された動作ですか?つまり、本番サーバーでも、再docker-compose rm -f
実行する前に常に実行する必要がありup
ますか?それとも私はここで穀物に対して何かをしているのですか、それが機能していない理由ですか?
目標は、ビルドプロセスでdocker-compose.ymlに必要なイメージのタグ付きバージョンをビルドして作成し、それらをプライベートレジストリにプッシュしてから、「本番環境へのリリース」でdocker-composeをコピーすることです。 ymlを本番サーバーに接続し、を実行docker-compose pull && docker-compose -f docker-compose.yml up -d
して新しいイメージを本番環境で開始します。誰かがこれに関するヒントを持っているか、この種のセットアップのベストプラクティスチュートリアルを指摘できる場合は、それも非常に高く評価されます。
docker-compose up -d --force-recreate
動作しませんでしたか?