나는 docker-compose newbie 질문을 가지고 있습니다. Docker 이미지를 생성하고 내부 Artifactory 저장소로 푸는 기존 Jenkins 빌드가 있습니다. Maven/Docker와 두 개의 Docker 파일을 사용하여 구동됩니다. 하나는 응용 프로그램 용이고 다른 하나는 볼륨/데이터 컨테이너 용입니다.Dockerfiles와 docker-compose.yml 사이의 숫자 사용자 아이디 동기화 중입니까?
앱 :
FROM centos
RUN useradd -u 6666 -ms /bin/bash foouser
COPY src/main/resources/home/foouser/.bashrc /home/foouser/
RUN chown -R foouser:foouser /home/foouser
USER foouser
COPY src/main/resources/opt/myapp/bin/startup.sh /opt/myapp/bin/
WORKDIR /home/foouser
ENTRYPOINT /opt/myapp/bin/startup.sh && /bin/bash
데이터 컨테이너 :
FROM centos
# Environment variable for the path to mount/create. Defaults to /opt/data
ENV DATA_VOL_PATH="/opt/data"
# Make sure the user id is the same as the container using the volume, otherwise we may run into permission issues on
# the container mounting the volume.
RUN useradd -u 6666 -ms /bin/bash foouser && \
mkdir -p "$DATA_VOL_PATH" && \
chown -R foouser:foouser "$DATA_VOL_PATH"
VOLUME [ "$DATA_VOL_PATH" ]
내가 레이블처럼 물건을 생략 등 간결에 대한 Dockerfiles이 같은 모양. 따라서이 Dockerfiles에서 빌드 한 이미지는 로컬 Artifactory 저장소에 저장됩니다. 우리는 이러한 이미지를 인스턴스화하기 위해 Rancher/Cattle을 사용하고 있습니다. Rancher에 Artifactory Repo를 추가하여 거기에서 끌어낼 수 있습니다. 목장의 고정 표시기-compose.yml 파일은 다음과 같은 :
# The data/volumes container for the data.
data:
image: data-image
# App
myapp:
image: app-image
environment:
DATA_VOL_PATH:
volumes_from:
- data
내가 (위의 DATA_VOL_PATH 같이) 고정 표시기-작성에서 환경 변수를 전달할 수 있다는 것을 알고,하지만 난 가지 방법으로 혼란 스러워요 작업. Docker 빌드를 실행하면 Dockerfile의 명령이 실행되고 그 이후에는 이미지가 변경되지 않습니다. 이미지를 기반으로 컨테이너를 인스턴스화하면 올바르게 이해 한 경우 새로운 쓰기 가능한 UFS 레이어가 만들어집니다. 그래서 데이터 컨테이너의 경우 볼륨이 실제로 생성되면 변경할 수 없습니다. 맞습니까? 이 가정이 맞다면 1) 두 개의 서로 다른 시스템 (Docker 이미지 생성을위한 Maven과 컨테이너 클러스터 인스턴스 생성을위한 Rancher)에서 사용자 ID를 가장 효과적으로 동기화하는 방법과 2) 생성을 유도하는 것이 더 낫습니다. docker-compose.yml의 데이터 볼륨 컨테이너 전체? 그러면 Docker-compose.yml에서 데이터 컨테이너의 Dockerfile 내용을 어떻게 복제 할 수 있습니까?
나는 이것이 매우 일반적인 시나리오라고 가정하므로 거기에 몇 가지 "모범 사례"솔루션이 있어야합니다. 감사.
귀하의 질문에 혼란이 있습니다. 볼륨은 작성자가 아닌 컨테이너에 의해 작성되며, 원하는 사용자에게 볼륨을''채울 수 있습니다. 두 컨테이너에서 동일한 사용자가 있으므로 IO 사이에 아무런 문제가 없어야합니다. 호스트 시스템의 모든 것에 대해 질문은 왜 호스트 시스템에서 필요한 것이 있습니까? 동일한 UID로 실행되는 컨테이너를 사용하여 도커 이미지를 만들 수 있습니다. 그러나 어쨌든 호스트 시스템에 생성 된 동일한 UID를 가질 수 있습니다. UID를 제어하지 않는 다른 컨테이너를 사용하는 경우에만 문제가 발생합니다. –
올레그, 나는 Dockerfile과 docker-compose.yml의 사용 사이의 상관 관계에 대해 약간 혼란 스럽다. 그래서 질문 자체가 혼란 스러울 수있다. 어쩌면 나는 질문을 다시하고 다른 끝에서 시작해야 할 것입니다. 명명 된 볼륨이이를 수행하는 데 선호되는 방법 인 것 같습니다. 나는 아직도 혼란 스럽지만 약간 계몽 된 방식으로 대답합니다 :-) – user2337270
당신은 답을 얻지 못하고 있습니다. 사람들이 당신이 묻는 것을 이해하지 못한다는 것을 의미합니다.나는 당신이 반복적으로 배울 것을 제안 할 것입니다 : 당신의 젠킨스 (Jenkins) 빌드를 떠나서 docker.com에 대한 튜토리얼 몇 개를 먼저 읽은 다음, 자신의 컨테이너 몇 개를 만들고 함께 작성하십시오. 그 순간 당신은 기본을 이해하게 될 것이고 당신은 젠킨스 (Jenkins)의 셋업을 이해할 수있을 것입니다. 그 순간에도 여전히 열려있는 문제가있는 경우 사용자 정의 Jenkins/maven/설정에 대한 세부 정보가 없으면 한 번에 가장 중요한 질문을 하나 물어보십시오. –