[구름 k8s] TIL 3-1-1

Peppie·2022년 10월 4일
0

1. Docker Image 생성

Dockerfile 명령

MAINTAINER

Docker image 빌드 작성자 이름과 이메일

LABEL

Docker image 작성 목적으로 버전, 타이틀, 설명, 라이선스 정보 기술
1개 이상 작성 가능

Docker image 생성 실습

Apache web server 환경에서 구동되는 계산기 web application image 생성

  • Apache web server를 base image로 하여 계산기 web application image 생성
  • image 생성을 위해 필요한 파일 디렉토리 생성 : mkdir calc-httpd
  • image 생성시 필요한 파일을 생성한 디렉토리에 복사 : index.html , calc.js
  • Dockerfile
# base image
FROM httpd:2

# image 작성자 정보
MAINTAINER ##### <######@######.com>

# web application 파일 복사
COPY index.html /usr/local/apache2/htdocs
COPY calc.js /usr/local/apache2/htdocs
  • image 생성 : docker build . -t calc-httpd:0.2
  • 만들어진 image로 container를 생성하여 실행 확인
    : docker run -dit -p 80:80 --name calc-web2 calc-httpd:0.2

2. Docker Volume

Docker Volume

  • Docker는 Union File system 사용
    • 하나의 이미지로부터 여러 container를 만들 수 있는 방법 제공
    • image에 변경된 내용 저장 가능
  • 데이터베이스, 웹 프로그램 등 업무에 사용하는 application에서 발생하는 데이터에 접근 및 이것을 공유하기 위해 Docker Volume 사용
    • 제공하는 서비스의 로직 (Logic, Algorithm)과 데이터는 반드시 분리
    • application에서 발생한 여러가지 데이터에 영향 주지 X 언제든 다른 container로 이전 가능하다면 운영자는 데이터를 안전하게 관리 및 운영 가능
    • Docker Volume은 container에서 생성, 재사용 가능; host 운영체제에서 직접 접근 가능
    • 보존되어야 하는 데이터를 유지(데이터 영속성과 지속성)하기 위한 메커니즘 제공
    • container 내부 데이터는 container의 lifecycle과 연관되어 container 종료시 삭제
    • Docker Volume을 사용하면 container가 삭제되어도 Volume은 독립적으로 운영되기 때문에 함께 삭제되지 X

Docker Volume 종류

Volume

Docker에서 권장하는 방법

  • docker volume create <볼륨 이름> 명령 통해 생성
  • volume은 docker 명령으로 관리
    • docker volume create : 볼륨 생성
    • docker volume inspect : 볼륨 상세 정보
    • docker volume ls : 볼륨 목록
    • docker volume rm : 볼륨 삭제
    • docker volume prune : 볼륨 삭제
  • 여러 container 간에 안전하게 공유
  • volume 드라이버를 통해 원격 호스트 및 클라우드 환경에 volume 내용 저장 및 암호화 가능
  • 새 volume으로 지정될 영역에 데이터를 미리 채우고 container에 연결하면 container 내에서 바로 데이터 사용 가능
  • -v 옵션에 의해 volume을 mount하면 inspect 정보 중 HostConfig.Binds 항목과 GraphDriver.Mounts 확인
< volume 실습 >

docker volume create my-share1 : 볼륨 생성

docker volume ls : 볼륨 목록 확인

docker inspect my-share1 : 생성된 볼륨 상세정보 확인

ls -lF /var/lib/docker/volume : 볼륨 저장 위치 내용 확인

sudo cp index.html /var/lib/docker/volumes/my-share1/_data
: 생성된 볼륨에 원하는 파일 복사 (선택 사항, 필요시 파일 복사)

docker run -dit --name server1 --mount source=my-share1,target=/mnt ubuntu:14.04
: 생성된 볼륨을 container 생성시 --mount 옵션으로 연결

docker run -dit --name server1 -v my-share1:/mnt ubuntu:14.04
: -v 옵션으로 볼륨 mount

docker volume rm my-share1 : my-share1 볼륨 삭제
(container에 mount된 상태에서는 삭제 불가)

blind mount

volume에 비해 사용 제한적

  • host 파일 시스템 절대경로:container 내부 경로를 직접 mount하여 사용 -> container 생성시
  • 사용자가 파일 또는 디렉토리를 생성하면 해당 host 파일 시스템의 소유자 권한으로 연결,
    존재 X 경우 자동 생성, 자동 생성 디렉토리는 root 소유
  • container 생성 시 지저하여 사용하고, container 제거시 bind mount는 해제도지만 host 디렉토리는 유지
< volume 실습 >

mkdir calc-web : bind mount에 사용할 디렉토리 생성 및 필요한 파일 복사

docker run -dit --name server1 --mount type=bind,source="$(pwd)",target=/mnt ubuntu:14.04
: bind mount, --mount 옵션으로 지정된 디렉토리 mount, 별도의 mount volume 생성 없이 지정된 디렉토리 mount

docker run -dit --name server2 -v "$(pwd)":/mnt ubuntu:14.04
: bind mount, -v 옵션으로 지정된 디렉토리 mount, 별도의 mount volume 생성 없이 지정된 디렉토리 mount

docker container inspect server1 -f "{{ .HostConfig.Binds }}" : bind mount 확인

tmpfs mount

tmpfs mount 방법은 임시적, host 메모리에서만 지속
=> container가 중지되면 tmpfs mount 제거 + 내부 기록 내용은 삭제

  • host 또는 container 쓰기 가능 계층에서 지속하지 않지만 중요한 파일을 임시로 사용하는 방법에 유용
  • container 실행시 지정하여 사용, container 제거시 자동 해제

nginx container에 volume을 통한 log 정보와 web application 정보 관리

volume으로 사용할 디렉토리 생성

  • mkdir webapp-log
  • mkdir calc-web

container 생성

docker run -dit -p 80:80 --name webservice -v "$(pwd)"/webapp-log:/var/log/nginx \
-v "$(pwd)"/calc-web:/usr/share/nginx/html nginx
  • web-app log 디렉토리는 webservice container에 log 정보 저장 목적으로 bind-mount
  • calc-web 디렉토리는 webservice container의 web application 저장 목적으로 bind-mount

0개의 댓글