도커 합성을 통해 항상 새로운 이미지에서 컨테이너를 다시 생성하는 방법은 무엇입니까?
내 도커 이미지는 Jenkins CI 서버에 구축되어 개인 도커 레지스트리로 푸시됩니다.제 목표는 항상 원래 빌드된 이미지 상태를 시작하는 도커 합성을 사용하여 환경을 프로비저닝하는 것입니다.
저는 현재 도커 컴포지트 1.3.2와 1.4.0을 서로 다른 기계에서 사용하고 있지만 이전 버전도 사용했습니다.
항상 사용했습니다.docker-compose pull && docker-compose up -d
레지스트리에서 새 이미지를 가져와 시작하는 명령입니다.저는 제가 선호하는 행동이 특정 시점까지 예상대로 작동했다고 생각하지만, 그 이후로docker-compose up
에서는 원래 빌드된 이미지를 매번 시작하는 대신 이전에 중지된 컨테이너를 다시 실행하기 시작했습니다.
이런 행동을 없앨 수 있는 방법이 있습니까?호출할 때마다 명령줄에서 무언가를 "잊지 않는" 것에 의존하지 않도록 docker-compose.yml 구성 파일에 유선으로 연결된 방식이 될 수 있습니까?
ps. 제 목표를 달성하는 방법을 찾는 것 외에도, 저는 이 행동의 배경에 대해 조금 더 알고 싶습니다.도커의 기본 아이디어는 불변의 인프라를 구축하는 것이라고 생각합니다.도커 컴포지의 현재 행동은 이 접근법과 충돌하는 것처럼 보입니다.아니면 제가 여기서 몇 점을 놓쳤나요?
docker-compose up --force-recreate
하나의 옵션이지만 CI에 사용하는 경우에는 구축을 시작할 것입니다.docker-compose rm -f
용기 및 볼륨을 중지 및 제거합니다(그 다음 위로 당김 및 위로 이동).
다음을 사용합니다.
docker-compose rm -f
docker-compose pull
docker-compose up --build -d
# Run some tests
./tests
docker-compose stop -t 1
컨테이너가 재생성되는 이유는 사용될 수 있는 모든 데이터 볼륨을 보존하기 위한 것입니다.up
훨씬 더 빠름).
CI를 수행하는 경우에는 원하는 것이 없으므로 모든 것을 제거하는 것만으로도 원하는 것을 얻을 수 있습니다.
업데이트: 사용up --build
에 추가된.docker-compose
1.7
제게 효과가 있었던 유일한 해결책은--no-cache
플래그:
docker-compose build --no-cache
그러면 레포에서 새 이미지가 자동으로 꺼집니다.또한 이전에 사용한 매개 변수로 미리 작성된 캐시 버전을 사용하지 않습니다.
현재 공식 문서에는 업에서 생성한 컨테이너, 네트워크, 볼륨 및 이미지를 중지 및 제거하는 바로 가기가 있습니다. 이미 중지되었거나 부분적으로 제거된 경우에는 다음과 같은 작업도 수행합니다.
docker-compose down
그런 다음 이미지 또는 도커 파일이 새로 변경된 경우 다음을 사용합니다.
docker-compose build --no-cache
마지막으로:docker-compose up
단일 명령: docker-compose down && docker-compose build --no-cache && docker-compose up
docker-compose up --build # still use image cache
OR
docker-compose build --no-cache # never use cache
합격할 수 있습니다--force-recreate
docker compose up
신선한 용기를 사용해야 합니다.
컨테이너를 재사용하는 이유는 개발 중에 변경 사항을 보존하는 것이라고 생각합니다.작성은 볼륨과 유사한 작업을 수행하며, 이 작업은 컨테이너 재생 간에도 유지됩니다(재작성된 컨테이너는 이전의 볼륨에 연결됨).예를 들어, 캐시로 사용되는 Redis 컨테이너가 있고 작은 변경을 할 때마다 캐시를 잃지 않으려는 경우에 유용합니다.다른 때는 그저 혼란스러울 뿐입니다.
당신이 컴포지트 파일에서 이것을 강제로 실행할 수 있는 방법은 없다고 생각합니다.
이는 불변의 인프라 원칙과 충돌합니다.반대 의견은 아마도 프로덕션에서 아직 Compose를 사용하지 않는다는 것입니다.또한 불변 인프라가 Docker의 기본 개념이라는 것에 동의하지는 않지만, 좋은 사용 사례/판매 포인트입니다.
docker-compose up --build --force-recreate
이를 통해 unbuntu AWS에서 3.5gb의 공간을 확보했습니다.
깨끗한 도커
도커 스톱 $(docker ps -qa) & & 도커 시스템 제거 -af --docker.
재구축
도커 제작
도커로 고정된 건물
도커업
과 --force-recreate
하는 것도해 볼 수 .
-V, --renew-anon-volumes Recreate anonymous volumes instead of retrieving
data from the previous containers.
어떤 버전에서 이 플래그를 사용할 수 있는지 잘 모르니 확인하십시오.docker-compose up --help
또한 컴포지트에 여러 서비스가 있으며 다음 중 하나만 강제로 빌드하려는 경우:
docker-compose build --no-cache <service>
때 Gitlab-ci를 .docker-compose down
,그리고나서docker system prune
한 후 합니다.docker-compose up -d
.
하지만 제가 방금 추가했습니다.docker-compose up --force-recreate
그리고 위의 모든 명령을 함께 수행했습니다. 저는 저를 위해 일했습니다!
$docker-compose build
만약 새로운 것이 있다면 그것은 다시 지어질 것입니다.
언급URL : https://stackoverflow.com/questions/32612650/how-to-get-docker-compose-to-always-re-create-containers-from-fresh-images
'programing' 카테고리의 다른 글
mariadb 테이블에서 정확하게 일치하는 행만 가져오는 중 (0) | 2023.09.01 |
---|---|
Cocoapods + 'x'에 대한 기본 모듈을 로드할 수 없습니다. (0) | 2023.08.27 |
구성 관리자를 사용하여 응용 프로그램을 다시 시작하지 않고 구성을 다시 로드합니다.섹션 새로 고침 (0) | 2023.08.27 |
AJAX의 비동기적 특성을 추상화하기 위한 유창한 Javascript 인터페이스 설계 (0) | 2023.08.27 |
부트스트랩 4 navbar 버튼 아이콘 색상을 변경하려면 어떻게 해야 합니까? (0) | 2023.08.27 |