VM
자체 OS를 포함하고 있다. 하이퍼바이저 위에서 실행되는 완전한 운영체제를 가진 독립적인 환경
VM 장단점
가상화 , 완전한 정리 다양한 os 호스팅 가능, 성능 안좋음, 하드웨어 낭비
Container
- Host OS와 리소스 공유하고 격리된 프로세스를 실행하는 가벼운 가상화 단위
- OS에서 제공하는 자원격리 기술을 이용하여 컨테이너라는 단위로 서비스를 분리할 수 있게 만들어주고, 개발환경에 대한 걱정없이 배포가 가능
Container 장단점
가상화지만 운영체제는 호스트os와 공유, 가볍고 빠름, 보안과 격리에 제한
container를 쓰지 않으면, 버전 확인후 수동으로 설치해야함..^^ == 환경설정 개빡셈
container 사용하면, 이미지(=버전정보, docker한테 보내서 설치 자동으로 해줌><) 실행해서 개발자들이 동일한 환경에서 작업 가능
→ 또한 application을 배포할 경우, 필요한 소프트웨어와 설정을 이미지에 포함시킬 수 있다. 배포 과정이 자동화되어 편리하고 일관성이 있어 관리에도 용이
쿠버네티스가 도커 이제 더이상 지원안함… 왜? → 도커가 CRI를 지원하지 않아 호환성 문제가 발생, 전에는 dockershim을 사용했지만 유지보수 비용이 높다는 단점..
IAM User 생성 후, Access Key를 발급 !

# 설정한 인증정보 확인
> aws configure list
# profile 등록
> aws configure --profile <profile_name>
# 사용할 profile로 전환
> export AWS_PROFILE="<profile_name>"
# 전환됐는지 확인
> aws sts get-caller-identity
아래와 같이 전환된 걸 볼 수 있다 !


> git clone https://github.com/aws-cloud-clubs/2023-docker-handson-smwu
# Flask 서버 구동 -> http://127.0.0.1:5000/
> pip3 install flask
> python3 -m flask run
구동되는거 확인 !

> docker build -t <img_name> .
Image 빌드 됨 !

> docker run --name asc-2nd-container -p 5000:5000 <img_name>
에러남.. ^^
docker: Error response from daemon: Ports are not available: exposing port TCP 0.0.0.0:5000 -> 0.0.0.0:0: listen tcp 0.0.0.0:5000: bind: address already in use.
# 5000 사용 프로세스 확인
> lsof -i TCP:5000
# 프로세스 종료 명령어 실행
> kill -9 <PID>
# 빌드가 완료되면 이미지에 태그를 지정 가능
> docker tag <aws_account_ID>.dkr.ecr.<region>.amazonaws.com/asc-demo-repo:latest
Docker Tag 명령을 실행하는 이유는?
→ ECR에 푸시할 도커 이미지 이름은 ‘<aws_account_ID>.dkr.ecr..amazonaws.com/<image_name>’ 형식을 준수해야 하고, 이미지 버전 관리를 위해 태그를 변경 !
# ECR에 docker image push
> docker push <aws_account_ID>.dkr.ecr.<region>.amazonaws.com/asc-demo-repo:latest

> docker images
> docker rmi <img_name>
> docker pull <aws_account_ID>.dkr.ecr.<region>.amazonaws.com/asc-demo-repo:latest
Dockerfile?
→ docker image를 생성하는데 필요한 스크립트 파일