내가 뭘 잘못하고 있는지 모르겠지만 docker-compose up
먼저 시스템에서 오래된 컨테이너를 완전히 제거하지 않으면 레지스트리에서 최신 이미지를 사용할 수 없습니다 . docker-compose pull이 최신 이미지를 가져 왔음에도 compose가 이전에 시작된 이미지를 사용하는 것처럼 보입니다.
항상 새로운 이미지에서 컨테이너를 다시 생성하기 위해 docker-compose를 얻는 방법을 살펴 보았습니다 . 내 문제와 비슷해 보이지만 프로덕션 서버에서 사용할 수있는 솔루션을 찾고 있기 때문에 제공된 솔루션 중 어느 것도 나를 위해 작동하지 않으며 시작하기 전에 모든 컨테이너를 제거하고 싶지 않습니다. 다시 (가능한 데이터 손실?). 변경된 이미지의 새 버전을 감지하고 가져 와서 해당 새 이미지로 서비스를 다시 시작하기 위해서만 작성하고 싶습니다.
나는 이것을 위해 간단한 테스트 프로젝트를 만들었는데, 유일한 목표는 각각의 새로운 빌드에서 증가 할 버전 nr을 얻는 것입니다. 생성 된 nginx 서버로 이동하면 버전 nr이 표시됩니다 (로컬에서 예상대로 작동 함).
docker 버전 : 1.11.2 docker-compose 버전 : 1.7.1 OS : docker-toolbox를 사용하여 CentOS 7 및 OS X 10.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
젠킨스 서버에서 다음을 실행하여 이미지를 빌드하고 태그를 지정합니다.
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 rm -f
실행하기 전에 항상 a 를 수행 up
해야합니까? 아니면 여기서 곡물에 대해 뭔가를하고 있는데 이것이 작동하지 않는 이유입니까?
목표는 빌드 프로세스가 docker-compose.yml에 필요한 이미지의 태그가 지정된 버전을 빌드하고 생성하고,이를 개인 레지스트리로 푸시 한 다음 "release to production-step"에서 단순히 docker-compose를 복사하도록하는 것입니다. yml을 프로덕션 서버에 추가하고 프로덕션 docker-compose pull && docker-compose -f docker-compose.yml up -d
에서 새 이미지를 시작 하려면 a 를 실행하십시오 . 누구든지 이것에 대한 팁이 있거나 이러한 종류의 설정에 대한 모범 사례 자습서를 가리킬 수 있다면 많은 도움이 될 것입니다.
docker-compose up -d --force-recreate
작동하지 않았습니까?