Katacoda를 이용한 Docker 공부 2일차 정리

이 포스트는 Korea Azure User Group에서 진행하는 Docker/Container 스터디 그룹에 참여하며 작성했습니다.

스터디를 진행한 Katacoda 강좌: Docker & Containers(https://katacoda.com/courses/docker)

진행한 강의 목록

  • Dockerizing Node.js
  • Optimise Builds With Docker OnBuild
  • Ignoring Files During Build
  • Create Data Containers

스터디는 Katacoda의 화면을 참조하되, 실습은 제 개인 PC에서 VM을 구성해서 진행했습니다. 따라해볼 수 있는 것만 별도로 정리했습니다.

구성환경

  • Windows 10 Pro 1809
  • Hyper-V
  • CentOS 7.6.1810 (Kernel 4.20.2-1.el7)

내용 정리

Docker Image는 기본이미지로 시작할 수 있으며, 앞선 Nginx 뿐만 아니라, Node.js와 같은 어플리케이션도 가능하다. 방법은 앞선 강의에서 Nginx를 이용한 것처럼, Dockerfile과 어플리케이션에 필요한 구성 요소들만 있으면 된다.

# Dockerfile을 작성한다.
[root@docker-master ~]# vi Dockerfile
FROM node:10-alpine # 기본 이미지

RUN mkdir -p /src/app # 컨테이너 내 폴더 생성

WORKDIR /src/app # 컨테이너내 작업할 공간 지정

COPY package.json /src/app/package.json # Host에서 컨테이너로 지정한 파일을 경로로 복사

RUN npm install # 명령어 실행

COPY . /src/app # 컨테이너 내부로 데이터 복제

EXPOSE 3000 # 포트 설정

CMD [ "npm", "start" ] # 명령어 실행

Onbuild는 생성한 이미지를 기반으로 다른 이미지를 생성할때 사용하는 옵션이다.

# Dockerfile을 작성한다.
[root@docker-master ~]# vi Dockerfile
FROM node:7-onbuild # onbuild 이용하는 것을 선언
EXPOSE 3000 # 신규로 생성하는 이미지에 사용할 포트번호 기재

git을 사용할때 .gitignore처럼 업로드하지 않아도 되는 파일의 목록을 기재하는 것과 같이, Docker에서도 동일하게 존재한다. .dockerignore를 이용하면 되며, 해당 파일안에 포함되지 않아도 되는 파일 혹은 경로를 기재하면 된다.

# .dockerignore 을 작성한다.
[root@docker-master ~]# vi .dockerignore
.git
password.txt

컨테이너의 데이터는 기본적으로 컨테이너 내부에 저장이되지만, 구동하려는 어플리케이션의 성격(WEB/DB 등)에 따라 저장소를 Host에 매핑해서 이용할 수 있습니다(-v 옵션 사용). 하지만, 컨테이너는 언제든지 움직일 수 있기 때문에(swarm/k8s) 데이터 저장용 컨테이너(busybox)를 구성해서 이용할 수 있다.

# 데이터 컨테이너 생성
[root@docker-master ~]# docker create --name data busybox
# 파일을 컨테이너 내부로 복사
[root@docker-master ~]# docker cp test.txt data:/config/
# 서비스 컨테이너에서 데이터 컨테이너 마운트
[root@docker-master ~]# docker run --volumes-from data centos ls /config
test.txt
# 데이터 컨테이너 내보내기
[root@docker-master ~]# docker export data > data.tar
# 데이터 컨테이너 가져오기
[root@docker-master ~]# docker import data.tar