읽기 전용 옵션 활용
도커에서 볼륨은 기본적으로 읽기/쓰기(read-write) 모드로 설정되어 있습니다. 하지만 읽기 전용 모드로 설정함으로써, 컨테이너 내에서 해당 볼륨의 파일을 수정할 수 없도록 할 수 있습니다.
이렇게 설정하면 호스트 머신에서 파일을 수정할 수 있지만 컨테이너에서의 쓰기가 금지됩니다.
:ro 추가
docker run -v /경로/내부:컨테이너내부:ro 이미지이름
위 명령에서 ro는 "read only"의 약어로, 해당 볼륨을 읽기 전용으로 설정합니다.
바인드 마운트 읽기 전용
바인드 마운트는 호스트 머신의 특정 폴더를 컨테이너에 연결하는 방식입니다. 기본적으로 컨테이너는 바인드 마운트된 데이터를 읽고 쓸 수 있습니다. 그러나 컨테이너 내부에서 파일을 변경할 수 없게 읽기 전용으로 전환하는 것입니다.
docker run -v /호스트_폴더:/컨테이너_경로:ro 이미지_이름
바인드 마운트는 도커에 의해 관리되는 볼륨은 아닙니다.
볼륨 관리 전략
자동 생성 vs. 수동 생성
도커는 필요한 경우 볼륨을 자동으로 생성합니다. 수동으로 생성하지 않아도 되지만, 필요에 따라 수동으로 볼륨을 생성할 수 있습니다.
보안 및 데이터 보호
민감한 데이터를 보호하기 위해 읽기 전용 볼륨과 바인드 마운트를 사용하며, 컨테이너 내부 데이터를 보호합니다.
데이터 보존 전략
볼륨을 삭제할 때 주의해야 합니다. 삭제 시 볼륨 내의 데이터가 손실됩니다. 데이터 보존이 필요한 경우 명명된 볼륨을 활용하고 데이터 백업을 고려합니다.
사용하지 않는 볼륨 삭제
사용하지 않는 볼륨을 주기적으로 정리하여 저장 공간을 최적화합니다. docker volume prune 명령을 사용하여 사용하지 않는 볼륨을 삭제할 수 있습니다.
Dockerfile COPY vs 바인드 마운트
도커 컨테이너를 개발 중에 바인드 마운트를 사용하여 코드 변경을 실시간으로 반영하고 있는데, 왜 Dockerfile에서도 코드를 복사(COPY)하는지 에 대한것입니다.
개발 중에는 바인드 마운트를 통해 코드 변경을 컨테이너에 실시간으로 반영하는 것이 편리합니다. 하지만 프로덕션 환경(실제 서버 환경)에서는 바인드 마운트를 사용하지 않을 가능성이 높습니다. 프로덕션 환경에서는 컨테이너가 코드의 스냅샷을 가져와 실행될 것이기 때문입니다.
COPY를 쓰는 이유
Dockerfile에서 코드를 복사함으로써 배포를 위한 이미지를 생성합니다. 이 이미지는 개발 중에 바인드 마운트를 사용하지 않고도 컨테이너를 배포할 수 있는 중요한 자산입니다. (스냅샷으로 사용이 가능하다)
요약
Dockerfile에서 코드를 복사하는 이유는 개발과 프로덕션 환경 간의 차이를 극복하고, 코드의 스냅샷을 가진 이미지를 생성하여 컨테이너 배포를 더 효과적으로 관리하기 위함입니다.
.dockerignore
COPY 명령으로 복사해서는 안 되는 폴더와 파일을 지정할 수 있습니다. 또한 지정 파일을 추가하여 지정파일이 존재하는지에 대한 유무도 확인가능합니다.
인수와 환경 변수
인수와 환경변수를 활용하면 모든것을 하드 코딩할 필요가 없기 때문에 보다 유연한 이미지와 컨테이너를 만들 수 있습니다. 대신 이미지를 빌드할 때 또는 컨테이너를 실행할 때만 동적으로 설정할 수 있습니다.
환경 변수
환경 변수는 키-값 쌍으로 구성되며, 대문자로 작성되는 것이 관례입니다.
설정을 고정하지 않고 동적으로 변경 가능하므로 컨테이너를 재사용할 때 특히 유용합니다.
환경 변수 설정 방법
Dockerfile 내의 ENV 명령
'ENV' 명령으로 환경 변수를 설정합니다. 예: 'ENV PORT 80'.
'--env 또는 -e' 옵션
docker run --env/-e
컨테이너를 실행할 때 '--env' 또는 '-e' 옵션을 사용하여 환경 변수 값을 설정합니다.
여러개의 환경변수를 지정할때 -e를 여러개 붙이고 지정하면 됩니다.
.env파일로 설정
.env파일을 이용하면 docker run' 명령에서 변경하는 대신 파일에서 값을 변경할 수 있다는 겁니다
예: PORT =80
빌드 타임 인수 (ARG)
빌드 타임 인수(ARG)는 이미지를 빌드할 때 사용되는 변수로, Dockerfile에 값을 동적으로 주입할 수 있습니다.
빌드 타임 인수를 활용하면 동일한 Dockerfile을 기반으로 서로 다른 이미지를 만드는데에 코드변경하지않고 다른 포트번호의 이미지를 생성가능하다.
인수 설정 방법
Dockerfile 내에서 'ARG' 명령
ARG를 사용하여 이미지 빌드 시 포트 번호를 동적으로 설정합니다.
예: 'ARG PORT=80'.
'--build-arg' 옵션
docker run --build-arg
이미지 빌드 시 '--build-arg' 옵션을 사용하여 인수 값에 다른 값을 지정하여 다른 이미지들을 생성할 수 있습니다.
'Docker' 카테고리의 다른 글
Docker 네트워킹 (교차) 컨테이너 통신 (0) | 2023.11.03 |
---|---|
도커 데이터 관리 및 볼륨/바인드 마운트 (2) | 2023.10.31 |
도커 이미지 공유하기 (2) | 2023.10.26 |
도커 이미지 & 컨테이너 관리 (0) | 2023.10.25 |