20주차 정리
** 배포 (docker)
정의
ㄴ 컨테이너 기반의 가상화 소프트웨어
- 가상화
ㄴ host 시스템의 리소스를 기반으로 그 위에 가상으로 시스템을 만드는 것
예시) VMware, VirtualBox 등
ㄴ 클라우드 기술의 근간 기술
- 컨테이너
ㄴ Docker 에서 이 가상화를 부르는 단위
- 가상화의 필요성
1. 배포 환경의 독립화
ㄴ 한 개의 서버에 여러 개의 프로젝트를 구동한다고 가정해봄
예시) 운영체제상의 충돌, 패키지 버전 상의 충돌, 권한과 계정 및 데이터 등의 복잡성
ㄴ 실제로 원래는 1프로젝트 1서버가 원칙이다.
2. 개발 환경과 배포 환경의 독립화
ㄴ 배포는 특정 서버에다가 진행을 함
ㄴ 배포할 서버와 내 개발 환경이 서로 다르다면?
예시) 운영체제 설치와 업데이트, 패키지 설치, 디비 구축, git clone 등등
ㄴ 위 모든 과정을 가상화로 묶어서 준비해둘 수 있음
-Docker 만의 장점
ㄴ 대부분의 가상화 소프트웨어는 운영체제 가상화하는데 초점이 맞추어져 있음.
ㄴ Docker 는 운영체제 뿐만 아니라, 특정 소프트웨어만을 가상화하는 것도 가능함.
ㄴ 추가로 image 와 layer 라는 개념으로 훨씬 편하게 쓸 수 있음.
ㄴ image가 가상화를 실행하는 파일
ㄴ image 라는게 사실 만들어지는데 엄청 오래 걸림
ㄴ 다른 image를 기반으로 해서 layer를 추가하는 걸로 image 를 만들 수 있음.
ㄴ 마지막으로 docker-hub 의 존재
ㄴ docker image 를 공유하는 클라우드
sudo usermod -aG docker $USER
sudo chmod 666 /var/run/docker.sock
docker pull ubuntu:24.04
docker images
docker attach test
docker rm test
docker rmi ubuntu:24.04
** Docker 를 이용한 설계
1. 운영체제를 가상화 하는 것
ㄴ docker image 를 만들건데, 운영체제에 들어가서 모든 설정을 한뒤 이를 이미지로 만드는 것
ㄴ Volume 등을 써서 Database 의 Data Directory 를 처리하는게 중요함
ㄴ 한 서버에 여러 개의 프로젝트를 동시 구동할 수 있음
ㄴ 호스트 서버를 깨끗하게 유지할 수 있음
ㄴ 개발 환경, 배포 환경 신경쓰지 않고 개발할 수 있음
-> 발전하면 CI/ CD 이론
2. 운영체제가 아닌 소프트웨어 각각을 가상화하는것
ㄴ microservice
예시)Node.js 컨테이너, PostgreSQL 컨테이너
ㄴ 1번과는 다르게, 소프트웨어 단위로 되어 있으므로 관리가 더 용이함
ㄴ 만약 데이터베이스 버전을 바꿔야하는 경우 그냥 갈아 끼우는 형태로 하면 됨
-> docker-compose/쿠버네틱스
-우리가 원하는 과정
ㄴ 1번 과정
1.DB는 Volume 처리
2. 단순히 컨테이너 새로 만들면 바로 배포가 될 수 있게
dockerfile 혹은 만들어진 컨테이너를 이미지화 하는 것