도커 - 1
업데이트:
Docker란
Docker는 애플리케이션을 신속하게 구축, 테스트 및 배포할 수 있는 소프트웨어 플랫폼이다.
그게 무슨말일까?
도커가 필요한 이유
예를 들어, 내가 nodejs로 express app을 열심히 만들어 돌리고 있다고 하자.
이걸 모종의 이유로 다른 서버에서 구동하고 싶은데, 다른 서버에는 어떻게 올릴 수 있을까?
기존의 방법이라면 신규 서버에서
- side-effect 없도록 기존 서버와 OS 일치시키기…
- yum install nodejs…
- cpy package.json, app…
- npm install -y…
- …etc
정말 조그만한 express app인데도 이런 귀찮은 절차가 필요하다.
그래서 도커가 나타났다.
도커는 VM이라고 생각하면 편하다.
(사실 프로세스 단위 컨테이너 격리 기술이어서 오버헤드가 큰 VM과는 비교할 수 없다.)
base-image라고 하는 리눅스가 있고, 그 리눅스 위에 우리가 필요한 절차들을 실행시킨다.
언제? Dockerfile의 빌드시점에..
아래와 같이 수행된다.
- DockerFile이라는 파일에 위 절차를 작성한다.
- 만든 DockerFile을 빌드해, image로 만든다.
- image로 Container를 생성한다.
혹자는 이 단계들을 도넛 굽기에 비유한다.
- 도넛 레시피를 작성한다.
- 도넛 레시피를 서점에 출간한다.
- 도넛을 만든다.
이 만들어질 도넛은 위의 레시피대로 잘 만들어질 것이다.
실제 형상
- Dockerfile 구조
1
vi Dockerfile
1 2 3 4 5
# Dockerfile의 내용 FROM mongo:6.0.5 # mongo 6.0.5 사용 MAINTAINER wichan7@naver.com # Dockerfile의 관리자를 나타내는 metadata ARG MONGO_PORT="27017" # MONGO_PORT 변수를 27017로 지정 EXPOSE $MONGO_PORT # 해당 이미지의 개방될 포트에 대한 힌트를 준다.
- 이미지 생성 명령어
1
docker build -t wichan-mongo:0.0.2 {directory}
- 이미지 기반으로 container 생성
1
docker run --name mongo-primary -d -p 27017:27017 wichan-mongo:0.0.2
- container 내부 접근
1
docker exec -it {containername} /bin/bash
추후 해야할 일
mongo-primary, mongo-secondary, mongo-hidden 또는 mongo-arbiter을 통해 이중화 및 backup 구성한다.
k8s container spec에 pod env를 작성하면, 컨테이너 구동 시점에 run.sh가 실행될 것이므로 yaml에서 설정한 설정 파일로 primary, secondary, arbiter가 자동 수행되도록 구성할 것이다.
댓글남기기