
가상화 vs 컨테이너
계층의 차이
가상화는 hardware emulation부터 emulate함
하드웨어 cpu의 가상모드를 켜야한다
vmware가 firmware 수준까지 지원
컨테이너와 다르게 hardware emulation과 kernel이 무겁게 올라가는 형태, utility들이 탑재
application과 관련된 파일들만 최적화하여 사용
경량화된 가상화 기술
host수준에서 봤을 때 VM은 하나의 프로세스로 돌아가는 것 처럼 보임
내부 사설망을 만들어
cpu와 memory를 스케쥴링 해줌
인터넷 기반 컴퓨팅

인프라, 플랫폼, 소프트웨어를 서비스하는 세가지로 분리할 수 있음
IaaS : 네트워크 서버부터 설계해서 올려야 하는, 인프라 배포, app 배포, 직접 관리까지 해야 하는 self-service, 주요 고객들이 IT 인프라 관계자
PaaS : 주요 타겟층이 개발자, 개발자들의 플랫폼을 자동화시킴, 고객은 app만 배포만 하면 되고 관리에 신경 쓸 필요가 없음(관리형 서비스, serverless)
SaaS : app 배포를 할 필요조차 없음 사용만 하면 됨, 일반 enduser
유형에 따른 관리 범위
성능을 위해 front, back, db 분리
커널까지를 가상화해서 지원
main service와 관련된 프로그램만 동작
application container의 특징 : pid = 1인 프로세스가 stop된다면 application conatiner도 stop, run이면 run(application container(메인 서비스)의 lifecycle과 application container(docker container)와 일치한다)
이미지와 실행한 상태(컨테이너) 방식으로 동작

4가지 카테고리
restful api로 번역 후 클라이언트 창으로 알려줌
base image : 어떠한 application이든 상관없이 common한 base image를 제공, 기본 fileset을 제공, binary(readonly)
하나의 가상머신에 여러개의 이미지 배포 가능, 외부의 inbound 리퀘스트를 받아서 진행하려면 같은 IP를 사용하지만 host 번호는 unique 해야 함

dockerhub 서버의 id가 각각 ubuntu, kasmweb, balenalib인 유저가 올린 이미지(/앞이 id)
rm에 -f 옵션을 주면 강제삭제
exec 컨테이너에 remote 명령 실행할 때 사용
running 중인 상태에서는 -it(interactive connect) 추가해줘야함
작업을 제한적으로만 할 수 있음
connect 없이도 container의 명령 실행 가능

dockerfile이 존재하는 path에 있어야 함


dockerfile로 이미지 만들어보기
docker-compose를 사용해 build와 배포를 한꺼번에 할 수 있음
docker compose up
down 중지시키면서 삭제
stop 중지
docker에서 사용하는 최상위 directory
rsync를 이용해 aws 서버의 디렉토리를 동기화해 현재 디렉토리(docker_class)에 복사해옴
docker compose up을 사용해 현재 경로의 docker compose 파일(yaml파일)에 정의된 모든 서비스를 시작하기 전에 필요한 이미지를 새로 빌드하고(--build, dockerfile이 변경되거나 새 종속성이 추가되었을 수 있기 때문) 빌드한 후 백그라운드 모드에서(-d) 실행
전에 만들었던 nginx 이미지가 docker compose 파일 안에 frontend가 바인딩할 포트번호(80)을 사용하고 있기 때문에 오류가 뜸
systemctl을 사용해 nginx 이미지를 중단하고 지운 후 다시 실행
docker compose를 사용하여 실행 중인 MySQL 컨테이너에 접속하고, 데이터베이스에 테이블을 생성하고 데이터를 삽입
docker compose exec -it mysql mysql -uroot -ppassword test
docker compose exec : 실행 중인 Docker Compose 서비스에 명령어를 실행
-it : 대화형 모드와 TTY를 활성화
mysql : MySQL 서비스의 이름
mysql -uroot -ppassword : MySQL 클라이언트를 사용하여 root 사용자와 password 비밀번호로 로그인
test : 접속할 데이터베이스 이름

버튼을 누르면 mysql의 데이터가 뿌려짐, 적용이 되지 않을때는 docker compose를 중단 후 재시작