◈ Data Container
- 여러 컨테이너에 데이터를 공유하고자 하는 경우 데이터 컨테이너 또는 볼륨 컨테이너를 만들고 , “—volume-from 공유 컨테이너명 ˮ 옵션을 사용하여 볼륨을 공유할 수 있다
- 이때까지는 우분투에 데이터를 보관했으나 이제 데이터를 보관하는 컨테이너를 만드는 것
- 데이터 컨테이너는 시작시킬 필요가 없음
◆ 암시적 Volume
ㄴdocker volume create my-data
ㄴ호스트 컴퓨터의 /var/lib/docker/volumes/my-data
-v <호스트 볼륨>:<컨테이너 디렉토리>
-v /share-data // 호스트볼륨이 없기에 임의로 볼륨이름을 생성, 제공함
-v <호스트 디렉토리 or 파일명>:<컨테이너 디렉토리 or 파일명>
docker volume 방식에서 volume 이름을 임의로 만들어 줌
$ docker inspect share-container
도커 볼륨으로 외부에서 디렉토리에 저장되고 share컨테이너에 저장되고 해당 컨테이너와 공유하는 data-1컨테이너에도 저장되기에 이중으로 연결된 내용을 확인 할 수 있다
data1컨테이너에서 파일을 만들고 종료하여 컨테이너를 정지한 후
data-2컨테이너를 만들어서 제대로 연동이 되어 있는 지 확인
이렇게 2단계로 연동을 하면 좀더 안정적으로 데이터 보관이 가능하다
★ Auto Scaling
- 클라우드 환경에서 자원의 수를 자동으로 조정하여 애플리케이션의 성능을 최적화하고 비용 효율성을 높이는 기술
- 특정 조건을 지정하여 서버를 늘리거나 줄이는 작업을 자동으로 하는 작업
- web은 사용자가 늘면 자동으로 생성하고 줄면 자동으로 줄이나, 다른 웹에서 쓴 데이터를 다른 웹에서도 쓰고 볼 수 있어야 하니 다른 곳에 데이터를 저장해서 그걸 전부 모든 웹에 연결시키면 데이터가 남아있음
◆ Bind Mount
세부 내용은 암시적 볼륨과 동일 하며 특정 볼륨과 연결하는 정도의 차이
◆ 데이터 지속성을 위한 Volume 구성
- 마이그레이션 : 다른 프로그램에서 데이터를 옮기는 것 (한글에서는 excel로 데이터를 옮기는 느낌)
ㄴ a데이터를 b데이터로 넘길 때 중간 데이터를 test파일로 넘기는 것
데비안 계 현재 os 확인하는 방법
◆ nignx log
- 데이터의 로그를 실시간 확인 및 유지를 위한 컨테이너
ㄴ 이렇게 컨테이너를 제작 후 연결된 ip주소를 웹에 접속 시 access.log에 남게된다
ㄴ 8011 포트로 접속 성공 시에 access.log에 남음
◈ Docker File
- Docker 에서 동작하는 컨테이너의 구성 정보를 프로비저닝 (Provisioning) 한 텍스트 template 파일
ㄴ 프로비저닝 : 사용자의 요구에 맞게 시스템 자원을 할당 , 배치 , 배포해 두었다가 필요 시 시스템을 즉시 사용할 수 있는 상태로 미리 준비해 두는 것
- 컨테이너에 설치해야 하는 패키지 , 소스 코드 , 명령어 , 환경 변수 설정 등을 기록한 하나의 파일
- Docker 이미지는 컨테이너가 런타임 환경으로 동작하기 위해 필요한 특정 기술 또는 서비스를 사전에 구축한 환경
- 애플리케이션 배포에 필요한 컨테이너 인프라를 코드 형태로 정의한 파일이다.
이러한 개념을 IaC(Infrastructure as Code) 라고 한다 .
- 원하는 환경의 Docker Image 개발에 필요한 Instration( 명령 ) 을 포함한 텍스트 파일
- docker build: Dockerfile 을 사용하여 docker image 생성 과정을 트리거하는 Docker CLI
- Image registry: 생성된 이미지를 public or private 하게 저장할 수 있는 영역
☆ 이론은 11번 pdf를 보고 실습을 11-01번 pdf로 실행한다
◆ Docker Build
- 도커에서 이미지를 생성하는 명령어
- 도커파일은 기본적으로 Dockerfile이라는 설정 파일을 기반으로 이미지를 생성 (디폴트 값, 대문자 D 사용)
- 도커는 Dockerfile의 지침을 순차적으로 수행하여 이미지를 생성,
이 과정에서 각 단계는 새로운 레이어로 생성되어, 변경 사항이 있을 때만 해당 레이어를 다시 빌드
ㄴ도커 파일에서 이미지로 실행되는 순서
ㄴ 도커 빌드를 제작하여 확인하기 위한 기본 웹파일 제작
ㄴ /home/ubuntu/sample/index.html // 웹파일의 기본 위치
ㄴ 디폴트 Dockerfile 파일 제작
ㄴ이런 형식으로 도커허브에서 실행하여 이미지를 구축
$ docker build -t mywebserver:1.0 . // 현재 디렉토리에 Dockerfile이 없다면 .이 아닌 파일명을 써야함
ㄴ 이렇게 도커이미지를 만든다
ㄴ 컨테이너 제작 완료 시 8001포트로 접속하면 index.html로 연결된 내용을 확인 할 수 있다
ㄴ history를 확인하면 이미지생성과정을 볼 수 있다
◆ Docker File 명령어
★11번 파일의 Docker file 명령어를 잘 확인 한다
RUN에서 레이어 수가 감소하면 다운되는 수도 줄기에 용량이 감소한다
-y를 붙이지 않으면 목록을 가져와 출력하여 묻는데 데이터를 사용하기에 명령어 사용으로 조금이라도 줄일 수 있음
CMD에서 운영체제는 shell만 정상작동하면 연결된다 ( /bin/bash 등)
CMD는 entrypoint와 비슷
copy는 add와 비슷
ARG = 매개변수
◆ 도커파일 최적화
- 빠른 컨테이너 구성을 위한 "최소한의 설정과 구성" 을 권장
- Docker 에서 제공되는 base image 들도 해당 이미지의 지향점에 필요한 프로그램 , 라이브러리 , 실행 파일 만을 보유한다
- 이미지 내부에 불필요한 파일을 포함하지 않기 위해 “.dockerignoreˮ 의 사용으로 빌드와 관련 없는 파일을 이미지 내부에 넣지 않는다 .
- 작성 시 불필요한 패키지 설치를 피하고 , 설치된 패키지 파일은 autoremove, clean 등의 명령을 통해 제거하면 경량화에 효과적
ch11디렉토리에 다른 디렉토리를 만들어서 sample의 index를 복사한 후 도커파일을 제작
ㄴ기본도커파일명이 아니기에 -f 하여 파일명 입력 필요
도커파일을 이용하여 myweb이라는 이미지 생성
도커파일1을 cp 명령어로 2로 복사하여 내용 수정
우분투 14.04버전은 apt만 있으면 인식하지 못하기에 apt-get으로 다운로드 설정
ㄴ설치 밑의 세부분은 캐시파일 삭제를 의미
새 버전의 이미지 생성
캐시파일 삭제만으로 어느정도의 용량이 감소함을 확인할 수 있다
이번에는 도커파일1 을 3으로 복사 후 내용 수정
ㄴ 베이스 이미지를 우분투에서 알파인으로 변경
엄청나게 용량이 줄어든 것을 확인 할 수 있다
용량이 줄었기에 보관도 사용도 편해지는 게 알파인 버전이다
기본에 2.0은 설치까진 동일하나 이후 캐시파일을 삭제하고 3.0은 처음부터 설치되는 베이스 이미지의 용량이 적다
- Alpine Linux 를 사용하면 생성되는 최종 이미지의 크기와 복잡성을 줄이는데 도움이 되어 성능이 향상되고 빌드 시간이 빨라진다 . 또한 최종 이미지에 존재할 수 있는 잠재적인 취약점의 수를 줄여 보안 향상도 기대할 수 있다 .
◇ scratch
- 아무것도 없는 빈 Image // 내부 실행을 위한 3가지 방법
ㄴ가 . 정적 바이너리 실행파일 생성을 위한 gcc 활용
ㄴ나 . busybox 컨테이너의 실행 도구를 cp
ㄴ다 . 실행 파일이 있는 rootfs.tar.xz 를 cp
ㄴ먼저 c컴파일러를 사용하기 위해 gcc를 인스톨
ㄴ printf = 화면에 출력하라 (알아서 줄을 바꿔주지 않기에 \n을 추가)
gcc프로그램을 이용하여 소스파일을 기계어프로그램으로 번역하여 바꾼다 (-o 하여 이미지생성하여 입력)
이렇게 바로 실행가능한 파일로 변경된다
app.js | ||
Node.js | go-to-lightweight | shell script |
OS | OS | Linux(쉘) |
도커파일우분투를 제작하여 내용을 입력한 후 도커파일 스크래치로 복사하여 내용 수정 (FROM을 스크래치로)
각 버전의 도커이미지 생성
우분투와 스크래치의 용량을 확인 할 수 있다
★ Scratch 이미지
- 가장 기본 패키지조차 없는 완전 빈 박스
- 일반적으로 Go, Rust, C 같이 정적으로 컴파일 된 바이너리를 실행하는 데 사용됨
이제 출력확인 후
2.0은 오류발생을 확인 할 수 있는데
여기서 2.0을 삭제 (수정하여 재 제작할 예정) // docker rmi -f lightweight:2.0
도커파일의 CMD 형태를 exec형태로 수정 한 후 빌드하여 2.0 이미지 생성하면
정상 작동되는 것을 확인 할 수 있다
이미지 파일을 열고 컨테이너로 그 위에 레이어를 쌓고 그걸 이미지로 만들어서 또 위에 레이어를 쌓는다
'AWS 교육 > Docker-AWS (월)' 카테고리의 다른 글
241111_Docker Compose, Jenkins, Maven, Tomcat, github (0) | 2024.11.11 |
---|---|
241104_도커 - 파일 최적화, 컴포즈 (0) | 2024.11.04 |
241021_Docker Volume (0) | 2024.10.21 |
241014_connect 명령어, 프록시 (0) | 2024.10.14 |
241007_Docker Network 브릿지, namespaces, DNS서버, 지정 (0) | 2024.10.07 |