Cloud Shell 개념
Google Cloud Shell은 Google Cloud Console에서 제공하는 브라우저 기반 터미널 환경.
- 사전 설치된 도구들: gcloud, kubectl, docker, git 등이 이미 설치됨
- 자동 인증: Google Cloud 프로젝트에 이미 인증된 상태
- 웹 기반: 별도 설치 없이 브라우저에서 바로 사용
Task 1. Create a Docker image and store the Dockerfile
목표: 제공되는 프로젝트, 도커 파일 생성 후 도커 이미지 빌드
1. Dockerfile이란?
Dockerfile은 Docker 이미지를 생성하기 위한 명령어들을 포함한 텍스트 파일
Dockerfile 기본 구조
# 베이스 이미지 지정
FROM golang:1.10
# 작업 디렉토리 설정
WORKDIR /go/src/app
# 파일 복사
COPY source .
# 패키지 설치 및 빌드
RUN go install -v
# 컨테이너 시작 명령어
ENTRYPOINT ["app","-single=true","-port=8080"]
2. Docker 이미지 Build
도커 이미지란?
Docker 이미지는 컨테이너를 생성하기 위한 읽기 전용 템플릿
도커 이미지 빌드 명령어
# 현재 디렉토리의 Dockerfile로 이미지 빌드
docker build -t valkyrie-app:v0.0.2 .
# 명령어 구성 요소 설명:
# docker build: 빌드 명령어
# -t: 태그 지정 옵션
# valkyrie-app:v0.0.2: 이미지명:태그
# .: 빌드 컨텍스트 (현재 디렉토리)
Task 2. Test the created Docker image
목표: 도커 실행하기
1. 도커 이미지 실행하기
기본 실행 명령어
#실행
docker run valkyrie-app:v0.0.2
#실행 (터미널 점유 x)
docker run -d valkyrie-app:v0.0.2
컨테이너 상태 확인
# 실행 중인 컨테이너 확인
docker ps
# 모든 컨테이너 확인 (중지된 것 포함) (-a)
docker ps -a
# 컨테이너 로그 확인
docker logs my-app
# 실시간 로그 확인 (-f)
docker logs -f my-app
2. 포트 설정하기
포트 매핑 이해
# 포트 매핑 기본 형식
docker run -p [호스트포트]:[컨테이너포트] 이미지명
# ↑ ↑
# 외부포트 내부포트
3. & 란?
Shell 백그라운드 실행 (&)
# Shell 백그라운드로 실행
docker run -p 8080:8080 valkyrie-app:v0.0.2 &
& 사용 시 특징:
- 터미널이 즉시 다른 명령어 입력 가능
- 터미널 세션에 종속됨 (터미널 종료 시 프로세스도 종료)
- jobs 명령어로 백그라운드 작업 확인 가능
Task 3. Push the Docker image to the Artifact Registry
1. Artifact Registry란?
Artifact Registry 개념
Google Artifact Registry는 Google Cloud에서 제공하는 완전 관리형 컨테이너 이미지 및 아티팩트 저장소
Docker Hub vs Artifact Registry
| 구분 |
Docker Hub |
Artifact Registry |
| 접근성 |
공개/비공개 |
비공개 (IAM 관리) |
| 인증 |
Docker 계정 |
Google Cloud IAM |
| 보안 |
기본적인 보안 |
고급 보안 기능 |
| 위치 |
글로벌 |
리전별 선택 가능 |
| 비용 |
공개 무료, 비공개 유료 |
사용량 기반 과금 |
2. Cloud Shell에서 Artifact Registry push 하는 방법
Step 1: 레포지토리 생성
Search 에서 Artifact Registry 검색 > 새로운 Artifact Registry 생성 > Docker 설정
Step 2: Docker 인증 설정
gcloud auth configure-docker us-east4-docker.pkg.dev
- Docker가 Artifact Registry에 인증할 때 gcloud 자격 증명 사용
- push/pull 시 자동으로 Google Cloud 토큰 사용
Step 3: 이미지 태그 재지정
# 현재 이미지 확인
docker images
# Artifact Registry 형식으로 태그 재지정
docker tag valkyrie-app:v0.0.2 \
us-east4-docker.pkg.dev/$PROJECT_ID/valkyrie-repo/valkyrie-app:v0.0.2
# 태그 결과 확인
docker images | grep valkyrie-app
태그 형식 이해:
us-east4-docker.pkg.dev/PROJECT_ID/REPOSITORY/IMAGE:TAG
│ │ │ │ │
│ │ │ │ └─ 버전 태그
│ │ │ └─ 이미지 이름
│ │ └─ 레포지토리 이름
│ └─ 프로젝트 ID
└─ Artifact Registry 호스트 (리전 포함)
Step 4: 이미지 푸시
docker push us-east4-docker.pkg.dev/$PROJECT_ID/valkyrie-repo/valkyrie-app:v0.0.2
Task 4. Create and expose a deployment in Kubernetes
1. 클러스터 인증하기
클러스터 인증 명령어
#리전 설정
gcloud config set compute/region us-east4
# 존 설정
gcloud config set compute/zone us-east4-a
# GKE 클러스터에 인증 설정
gcloud container clusters get-credentials valkyrie-dev --zone=us-east4-a
2. 왜 인증하는가?
Kubernetes 클러스터 접근 제어
- 보안: 권한이 있는 사용자만 클러스터 접근 가능
- 다중 클러스터: 여러 클러스터 중 특정 클러스터 선택
- 권한 관리: RBAC (Role-Based Access Control)을 통한 세밀한 권한 제어
3. k8s 리소스 배포하기
deployment.yaml 구조 이해
apiVersion: apps/v1
kind: Deployment
metadata:
name: valkyrie-dev
spec:
replicas: 3 # Pod 복제본 수
selector:
matchLabels:
app: valkyrie-dev # 관리할 Pod 선택 기준
template:
metadata:
labels:
app: valkyrie-dev # Pod에 붙일 라벨
spec:
containers:
- name: valkyrie-dev
image: {{수정할곳}}
ports:
- containerPort: 8080 # 컨테이너 내부 포트
service.yaml 구조 이해
apiVersion: v1
kind: Service
metadata:
name: valkyrie-dev
spec:
type: LoadBalancer # 외부 접근 가능한 서비스
ports:
- port: 80 # 서비스 포트
targetPort: 8080 # Pod 포트
selector:
app: valkyrie-dev # 연결할 Pod 선택 기준
Step 3: Kubernetes 리소스 배포
kubectl apply -f .
4. 배포 상태 확인하기
Deployment 상태 확인
# Deployment 목록 확인
kubectl get deployments
Service 상태 확인
# Service 목록 확인
kubectl get services