Developing

패스트캠퍼스 캐시백 챌린지 50일차 본문

Devops/Fastcampus 캐시백 챌린지

패스트캠퍼스 캐시백 챌린지 50일차

DEV_BLOG 2022. 6. 6. 18:05

수강 인증샷

 

 

도커 레이어 아키텍쳐와 도커 볼륨과 관련된 클립을 수강하는식으로 챌린지를 진행하였다. 전체 강의중에서 가장 깊이있어보이는 난이도에 해당하는 것 같았다.제대로 이해하고 넘어가기 위해서 나중에 실습과 이론부분들을 따로 다시금 복습하려고 한다. 다음 포스팅으로는 Docker log , Image build와 관련된 내용을 포스팅하려고 한다.

 

 

도커 레이어 아키텍쳐

 

  • 도커 이미지를 빌드할때 dockerfile이라는 명세서를 기반으로 도커 이미지가 빌드된다. 이미지를 자세하게 보면 layer로 구성되어있고 dockerfile내의 여러 명령어들이 순차적으로 layer가 쌓이듯이 저장된다.

⇒ 예를들어 ubuntu image base면 layer1처럼 쌓이고

⇒ 우분투 운영체제에서 필요로하는 패키지들을 설치해주는 내용이 layer2에 쌓이며,

⇒ python 관련된 이미지패키지여서 해당 내용이 layer3에

⇒ source code 복사한내용을 layer 4에

⇒ container의 entrypoint 명령어를 변경한다하면 layer 5에 저장된다.

 

⇒ layer구조를 취하여 얻는 장점이 있다.추후에 이미지에 변경사항을 가한다고 하면, layer 4를 변경한다하면 layer 1~3은 변경사항이 필요가없고 branch가 따지며 new layer 4 , new layer 5가 생성이 된다.

⇒ 이런식으로 도커 이미지의 여러 버전들이 생긴다 하더라도 저장공간을 차지하지 않는 레이어 구조를 가지고 있다.

 

  • docker run으로 이미지를 실행하면 이후에 컨테이너는 2가지 레이어를 가지게 된다. Image Layer과 Container Layer를 가지게 된다.

⇒ Image Layer는 이미지를 불러들여서 사용하는 것이기에 항상 동일하고 읽기 전용으로 사용하게 된다. 읽기전용 이미지레이어에는 변경사항을 가할 수 없게 된다.

⇒ 따라서 컨테이너 상에서 새로운 파일을 쓰거나할때에는 Container Layer의 파일을 쓰게 되어 Read Write 권한을 갖는다.

⇒ Container가 종료되면 Container Layer는 삭제되게 된다. Container에 있던 내용들이 전부 삭제되기에 보존시켜주려면 mount등의 작업을 해주면 된다.

 

호스트 볼륨

  • 호스트의 디렉토리를 컨테이너의 특정 경로에 마운트한다.
# 호스트의 /opt/html 디렉토리를 Nginx의 웹 루트 디렉토리로 마운트
$ docker run -d \\
  --name nginx \\
  -v /opt/html:/usr/share/nginx/html \\
  nginx
  • host의 /opt/html 디렉토리가 컨테이너의 /usr/share/nginx/html 디렉토리 경로로 마운트 되어 컨테이너를 실행시킬 수 있다.

 

볼륨 컨테이너

  • 특정 컨테이너의 볼륨 마운트를 공유할 수 있다.
$ docker run -d \\
  --name my-volume \\
  -it \\
  -v /opt/html:/usr/share/nginx/
  html \\
  ubuntu:focal

# my-volume 컨테이너의 볼륨을 공유
$ docker run -d \\
  --name nginx \\
  --volumes-from my-volume \\
  nginx

 

도커 볼륨

  • 도커가 제공하는 볼륨 관리 기능을 활용하여 데이터를 보존한다.
  • 기본적으로 /var/lib/docker/volumes/$(volume-name)/_data 에 데이터가 저장된다.
# web-volume 도커 볼륨 생성
$ docker volume create --name db

# 도커의 web-volume 볼륨을 Nginx의 웹 루트 디렉토리로 마운트
$ docker run -d \\
  --name fastcampus-mysql \\
  -v db:/var/lib/mysql \\
  -p 3306:3306 \\
  mysql:5.7

 

읽기 전용 볼륨 연결

  • 볼륨 연결 설정에 :ro 옵션을 통해 읽기 전용 마운트 옵션을 설정할 수 있다.
# 도커의 web-volume 볼륨을 Nginx의 웹 루트 디렉토리로 읽기 전용 마운트

$ docker run -d \\
  --name nginx \\
  -v web-volume:/usr/share/nginx/html:ro \\
  nginx

 

 

https://bit.ly/3L3avNW

 

패스트캠퍼스 [직장인 실무교육]

프로그래밍, 영상편집, UX/UI, 마케팅, 데이터 분석, 엑셀강의, The RED, 국비지원, 기업교육, 서비스 제공.

fastcampus.co.kr

* 본 포스팅은 패스트캠퍼스 환급 챌린지 참여를 위해 작성되었습니다.