티스토리 뷰
0. Dockerfile
:: Docker 이미지를 만들기 위한 스크립트 (Instruction / 명령어 집합)
:: 각 명령어는 Docker 이미지의 하나의 레이어(Layer)로 변환
:: 실행할 프로그램(앱) + 앱을 구동할 엔진 + 구동을 보조해줄 Bins/Libs 정의
- 구성 요소
1. Application 파일 (구동 코드)
2. Environment Variables (환경 변수
3. Runtime Environment (런타임 환경)
:: 애플리케이션을 실행하기 위한 OS나 런타임 환경(예: Java, Python 등)의 버전 및 설정을 정의
4. 서드파티 라이브러리
5. Cut-down OS
:: 실제로 컨테이너 내에서 실행되는 최소한의 운영 체제 (예: Alpine Linux).
Ex)
# FROM :: Base 이미지 설정 (예: Python 3.9)
FROM python:3.9-slim
# WORKDIR :: 작업 디렉토리 생성
WORKDIR /app
# 요구사항 파일 복사 및 의존성 설치 (COPY는 복사, RUN은 빌드 시 수행 명령어)
COPY requirements.txt .
RUN pip install --no-cache-dir -r requirements.txt
# 애플리케이션 코드 복사
COPY . .
# 환경 변수 설정
ENV APP_ENV=production
# 외부와 통신할 포트 열기
EXPOSE 5000
# 애플리케이션 실행 명령어
CMD ["python", "app.py"]
0.1. Docker Image 업로드 방식
- Docker Image 를 안착시키기 위한 방법 2가지
1. SCP | Docker Image 결과 | -> Tar 로 압축 | -> SCP (Secured Copy) 통해 EC2 로 전달 | -> EC2 내 실행 |
2. ECR | -> ECR 업로드 | -> EC2 내 ECR 로부터 다운로드 |
- ECR에 업로드된 이미지는
-> ECS를 통해 EC2와 연결-> 배포 파이프라인 구축
-> Terraform을 통해 EC2와 연결 -> 배포 파이프라인 구축
1. Docker Workflow
1. Develop | 2. Test Java | 3. Build Java | 4. Build Docker Image | 5. Push | 6. Pull | 7. Run |
Java에 관련된 절차 | Docker에 관련된 절차 | |||||
CI 절차 | CD 절차 |
- 3개 타입의 인스턴스 :: (1) Local + (2) Github Actions / Jenkins + (3) Server
:: CI / CD 전략 혹은 인프라 구성 => 각 인스턴스에 4개의 절차의 배치
- Develop :: (1) Local 에서 수행 ← 불변(고정) 절차
- Test Java :: (1) Local 혹은 (2) Github Actions / Jenkins 에서 수행 ← 가변 절차
- Build Java :: 위와 동일
- Build Docker Image :: 위와 동일
- Push Docker Image to Registry :: 위와 동일
- Pull Docker Image from Registry :: 위와 동일
- Run Docker Image :: (3) Server 에서 수행 ← 불변(고정) 절차
2. CI (Continuous Integration)
:: 테스트 및 자바 빌드 & 이미지 빌드
:: Build && Push
2.1 Build Docker Image
// -t :: 빌드한 이미지를 태그로 지정 my-app:1가 이미지 이름, 태그
docker build -t my-app:1.0 .
:: Docker 이미지는 docker build 명령어를 통해 생성
:: 현재 디렉토리의 Dockerfile을 기반으로 이미지를 빌드
:: Docker Image 는 매 Instruction 마다 Layer 로 구성되며 이 중간 과정을 Cache함
2.2. Push Docker Image to Registry
- Docker Image 를 → Docker Registry(도커 저장소)에 업로드
1. Docker Hub에 Push
// 1. Docker Hub에 계정을 만들고 로그
docker login
// 2. 이미지를 Docker Hub에 푸시
// 주의점 :: Docker Hub에서 이미지 이름을 username/repository로 지정 필요
docker push my-app:1.0
2. AWS ECR에 Push하기
- AWS ECR 사용 시, 레지스트리를 생성 및 인증 설정 필요
aws ecr get-login-password --region us-west-2 | docker login --username AWS --password-stdin <aws_account_id>.dkr.ecr.us-west-2.amazonaws.com
- 푸시
// 1. ECR 리포지토리를 생성
aws ecr create-repository --repository-name my-app
// 2. 이미지를 ECR 리포지토리로 푸시
docker tag my-app:1.0 <aws_account_id>.dkr.ecr.us-west-2.amazonaws.com/my-app:1.0
docker push <aws_account_id>.dkr.ecr.us-west-2.amazonaws.com/my-app:1.0
3. CD (Continuous Deployment)
:: Push && Run
3.1 Pull Docker Image from Registry and Run Docker Image on Host
1. Pull
:: 어플리케이션 실행하려는 서버 내 Docker Registry(도커 저장소)에서 → Docker Image 다운로드
docker pull my-app:1.0
2. Run
:: 어플리케이션 실행하려는 서버 내 앞서 다운받은 Docker Image 실행 = Container
docker run -d -p 5000:5001 --name my-app-container my-app:1.0
- -d :: 컨테이너를 백그라운드에서 실행
- -p :: 컨테이너의 포트를 호스트 머신에 매핑(5000:5001은 호스트의 포트 5000과 컨테이너의 포트 5001을 연결)
- --name: 컨테이너의 이름 지정
- my-app:1.0: 실행할 이미지의 이름과 태그
docker ps // 컨테이너 실행 확인
// 종료
docker stop my-app-container
// 삭제
docker rm my-app-container
참고
ASAC 수업자료
Docker Images
Ever wondered what happens behind the scenes when you build a Docker🐳 image? Docker image layers🗂️ — a fundamental concept that powers…
harshilsays.medium.com
'정리용 > Docker' 카테고리의 다른 글
[Docker] 5. 명령어 분류와 Dockerfile 최적화 (0) | 2025.02.22 |
---|---|
[Docker] 1.1.1 Docker 질문 (0) | 2025.02.21 |
[Docker] 3. Docker Network (0) | 2025.02.21 |
[Docker] 2. Docker 컨테이너 (0) | 2025.02.21 |
[Docker] 1.1 Docker 개념 (0) | 2025.02.21 |
- Total
- Today
- Yesterday
- Nginx
- useReducer
- useCallback
- asac7기
- memo
- useState
- ASAC
- useMemo
- asac#asac7기
- acas#acas7기
- git
- react
- useEffect
- asac7
- ssh
- useContext
- useLayoutEffect
- useRef
- acac
- asac7#asac
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | ||||||
2 | 3 | 4 | 5 | 6 | 7 | 8 |
9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 | 17 | 18 | 19 | 20 | 21 | 22 |
23 | 24 | 25 | 26 | 27 | 28 |