220508 Today I Learned
일지
4일 연휴 너무 달콤했따
주요 키워드
Docker Udemy AWS Gitblog
오늘의 할일
- 220508 TIL 작성
- Docker 강의 끝내기
- 정보공유 스터디 자료작성
- Udemy AWS 모의고사 3회
- Showcase 항목개편
추가로 정리해야할 부분
블로그 글 내용 최신화
수업 정리
Private Docker Registry
Overview
- Docker privae repository
- Registry options
- build & tag an image
- docker login
- docker push
- Docker Registry
- ON AWS ECR
Create private D. repo on AWS
- Private repository for Docker = Docker Registry
- AWS ECR(Elastic Container Registry)
- 대충 생성버튼 누르고
- 레포 이름/my-app
- Repository per Image
- Can save diff. tags(versions) of the same image
- 대충 생성버튼 누르고
- 생성된 저장소를 클릭하고, view push commands
- docker login으로 로그인 되어있어야함 (자격증명?, 만약에 젠킨스에서 올린다면 젠킨스의 자격증명 제공)
-
aws ecr get-login-password –region ap-northeast-2 docker login –username AWS –password-stdin 596152156334.dkr.ecr.ap-northeast-2.amazonaws.com - 사전 조건
- AWS Cli 설치, Credentials 구성
-
- docker login으로 로그인 되어있어야함 (자격증명?, 만약에 젠킨스에서 올린다면 젠킨스의 자격증명 제공)
Image Naming in D. registries
registryDomain/imageName:tag
- In Dockerhub:
- docker pull mongo:4.2 > 앞의 도메인네임은 생략하고 사용됨
- docker pull docker.io/library/mongo:4.2 > 원본, 우리는 축약(shorthand) 형태로 사용중
- In AWS ECR
- docker pull 596152156334.dkr.ecr.ap-northeast-2.amazonaws.com/my-app:latest
- docker push my-app:1.0 > ECR이 아닌 도커허브로 보내려고함
- 따라서 이미지에 태그를 지정해서 ECR로 보내야함
- docker tag my-app:latest 596152156334.dkr.ecr.ap-northeast-2.amazonaws.com/my-app:latest
- docker tag = rename the image
- docker images로 확인하면 새로운 이미지가 복사되어있음
- docker push 596152156334.dkr.ecr.ap-northeast-2.amazonaws.com/my-app:latest
Make some changes to the App, rebuild&push a new version to AWS repo
- RUN의 mkdir의 경로 변경
- server.js 의 내용도 일부변경
- docker build -t my-app:1.1 .
- docker tag my-app:1.1 596152156334.dkr.ecr.ap-northeast-2.amazonaws.com/my-app:l.1
- docker push 596152156334.dkr.ecr.ap-northeast-2.amazonaws.com/my-app:l.1
- 변경, 추가된 layer들만 push 됨
- ECR은 한 REPO에서 약 1,000여개의 이미지 관리가능
Deploy containerized App
Overview
- Image from a privae repository
- Deploy multiple containers
- Deployment Server
- Depolying the app
- On the integration environment like Dev Server,
- pull my app from AWS ECR
- pull mongoDB,express from DockerHub
- On the integration environment like Dev Server,
- Docker-Compose 파일에 필요한 변경점 추가
- 이미지 정보, 포트정보, 등
- Private repo에서 pull 하기위해 서버의 login(자격증명제공)필요함
-
Public DockerHub는 별도의 로그인필요X
- docker-compose -f mongo.yml up
- 컴포즈 파일에 변수들을 입력해두었기 때문에 컨테이너 내부의 설정파일에서 (server.js) 일일히 포트를 입력&변경할 필요없음
Persisting Data w/Volumes
Overview;
- When do we need DV.?
- What is Docker Volumes?
- 3 Volume Types
-
DV. in docker-compose file
- DV.
- For data persistence
- Databases, other stateful Apps
When do we need DV?
- Container provide its own Virtual File System
- Data is gone! When restarting or removing the Con.
What is DV?
- Host File system(physical)-/home/mount/data
- Virtual File System(logical)-/var/lib/mysql/data
- Folder in phy. host FS is mounted into the virtual FS of D.
- Data gets automatically replicated
3 Volume Types
- docker run -v {HOSTPATH}:{CON.PATH}
- -v /home/mount/data:/var/lib/mysql/data
- Host Volumes
- U decide where on the host filesystem the references is made
- Host의 어떤 디렉토리를 연결할거야?지정가능
- docker run -v {Con.PATH}
- -v /var/lib/mysql/data
- Anonymous Volumes
- for each Con, a folder is generated that gets mounted
- /var/lib/docker/volumes/{random-hash}_data
- docker run -v name:/{CON.PATH}
- -v name:/var/lib/mysql/data
- Named Volumes
- U can reference the V by name
- 가장 많이 사용되고 사용되어야할것은 Named Volumes
- 해당 볼륨 사용으로인한 추가적인 이득이있다는데 그게뭐시여
DV in docker-composer
Named Volume
version: '3'
service:
mongodb:
image: mongo
ports:
- 27017:27017
volumes:
- db-data:/var/lib/mysql/data
mongo-express:
image: mongo-express
...(중간생략)
volume: #service랑 같은 들여쓰기수준
db-data #생성한?사용된? volume 나열
- service 수준의 volume에서 Named Volume 나열
- 이후 개별 컨테이너에서 해당 볼륨 가져다씀
- 컨테이너간 동일한 파일을 공유해야할 경우 유용
DV Demo
- docker-compose -f docker-compose.yml up
Define Named V in D-compose File 대충 볼륨설명이랑 비슷하니까 뭐..
Where the DV are located?
- Windows;
- C:/ProgramData/docker/volumes
- Linux;
- /var/lib/docker/volumes
- MacOS;
- /var/lib/docker/volumes
- Each Volume has unique hash/_data
Wrap UP
- 도커를 사용해서 컨테이너를 다루는 법을 다뤘음
- 실제로는 수십개, 수백개의 컨테이너를 다수의 서버에 배포 및 관리해야함
- 컨테이너들의 관리 = Container Orchestration
- Kubernetes
Leave a comment