1. 도커 복습
1.1 컨테이너
- 도커 컨테이너는 도커 이미지를 기반으로 실행되는 프로세스이다.
- 도커 컨테이너에는 BORA(Build Once, Run Anyware) 컨셉트가 있다.
1.2 컨테이너 설계
도커 컨테이너를 생성할 때 주로 주의해야 할 점은 다음 네가지
- 1 컨테이너당 1 프로세스
- 변경 불가능한 인프라(Immutable Infrastructure) 이미지로 생성한다.
- 경량의 도커 이미지로 생성한다.
- 실행 계정은 root 이외의 사용자로 한다.
1.3 파일 작성법
- Dockerfile 을 사용해 컨테이너를 생성한다.
- 컨테이너가 실행되기 까지 실행할 명령어를 처리 후 이미지를 생성하고, 생성한 이미지를 기반으로 컨테이너를 생성한다.
예제)
# Alpine 3.7 버전 golang 1.10.1 이미지를 사용
FROM golang:1.10.1-alpine3.7
# 8080 포트 오픈
EXPOSE 8080
# 빌드할 머신에 있는 main.go 파일을 컨테이너에 복사
COPY ./main.go ./
# 컨테이너 내부에서 명령어 실행
RUN go build -o ./go-app ./main.go
# 실행 계정을 nobody로 변경
USER nobody
# 컨테이너가 기동할 때 실행할 명령어 정의
ENTRYPOINT ["./go-app"]
위의 예제에서는 alpine 이미지를 사용했는데, 이미지 종류에 따라 용량과 용도가 다르다.
이미지 명 | 이미지 사이즈 |
scratch | 최소 (0 bytes) |
alpine | 작다 |
distroless | 작다 |
ubuntu | 크다 |
centos | 크다 |
Universal Base Image | 크다 |
scratch 이미지의 경우 정적인 프로그램만 실행이 가능하고, 쉘이 없기 때문에 로그인도 되지 않는다.
좀 더 도커에 익숙해지면, docker-compose.yml 을 사용하여 이미지 로드 및 컨테이너 실행까지 한번에 가능하게 된다.
더보기
해당 예제는 도커 공식 튜토리얼을 마치면 나오는 docker-compose.yml 파일이다.
version: "3.8"
services:
app:
image: node:12-alpine
container_name: getting-started-on-mac
command: sh -c "apk add --no-cache python2 g++ make && yarn install && yarn run dev"
ports:
- 3000:3000
working_dir: /app
volumes:
- ./:/app
environment:
MYSQL_HOST: mysql
MYSQL_USER: root
MYSQL_PASSWORD: secret
MYSQL_DB: todos
mysql:
image: mysql:5.7
container_name: mysql-5.7
volumes:
- todo-mysql-data:/var/lib/mysql
environment:
MYSQL_ROOT_PASSWORD: secret
MYSQL_DATABASE: todos
command: --character-set-server=utf8mb4 --collation-server=utf8mb4_unicode_ci
volumes:
todo-mysql-data:
실행은
docker-compose -f docker-compose.yml up -d
중단은
docker-compose -f docker-compose.yml down
으로 간편하게 사용이 가능하다.
1.4 이미지 빌드
- 위의 Dockerfile 이 있는 곳에서 docker image build -t [태그명] . 를 사용하여 이미지로 빌드가 가능하다.
- 생성된 이미지는 docker image ls 로 확인 가능하다.
- 이미지 삭제는 docker image rm [레퍼지토리:태그] 으로 삭제 가능하다.
- 혹은 docker rmi [레퍼지토리:태그]
1.6 도커 레지스트리로 이미지 업로드
- 이미지를 빌드하고 나면 자신의 도커허브에 (마치 깃허브 처럼) 자신의 이미지를 올릴 수 있다.
# 도커 허브 로그인
docker login
# 이미지 태그 변경
docker tag docker101tutorial {userName}/docker101tutorial
# 도커 허브에 이미지 업로드
docker push {userName}/docker101tutorial
# 도커 허브 로그아웃
docker logout
해당 예제는 기존에 작성한 글에서 가져왔다.
1.7 컨테이너 기동
- docker container run -d -p [자신의 포트]:[컨테이너의 포트] [레퍼지토리:태그]
- -d : background 실행
- -p : port 지정
기존에 https://blog.rgbplace.com/406 작성한 글과 조금 겹치는 부분이 많지만 복습을 위해 다시 정리해 보았다.
'Dev > Kubernetes' 카테고리의 다른 글
[Kubernetes & Docker] 4-1. GCP 에서 다시 한번 환경 설정 (0) | 2022.02.14 |
---|---|
[Kubernetes & Docker] 3-2. GKE 환경 셋팅 (0) | 2022.02.14 |
[Kubernetes & Docker] 3-1. 쿠버네티스 환경 선택 (0) | 2022.02.14 |
[Kubernetes & Docker] 2. 쿠버네티스 소개 (0) | 2022.02.14 |
[Kubernetes & Docker] 0. Docker Tutorial 다시 보기 (0) | 2022.01.22 |