카테고리 없음

20주차 정리

jjon-jonny 2024. 8. 22. 19:59

** 배포 (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

 sudo service docker restart

docker pull ubuntu:24.04

docker images

docker run -it -p 3000:3000 --name test ubuntu:24.04
docker ps -a
docker stop test

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 혹은 만들어진 컨테이너를 이미지화 하는  것