Docker 공식 홈페이지에 있는 튜토리얼을 따라해봤다.
image를 빌드하는법, container를 실행하는 법, data를 유지하고 코드에 적용하기 위해 volume을 사용하기, Docker Compose 사용법 등을 알 수 있다고 한다.
https://www.docker.com/101-tutorial
터미널에서 아래의 명령어를 실행하면
docker run -d -p 80:80 docker/getting-started
- -d : container 를 detached mode 로 실행한다.
- -p 80:80 : 호스트의 80번 포트를 컨테이너의 80번 포트로 mapping 한다.
- docker/getting-started : 사용할 image
Docker Desktop에 아래와 같이 컨테이너가 하나 생성되고, 자동으로 실행된다.
이 상태에서 브라우저에 http://localhost 로 접속하면 튜토리얼을 볼 수 있다.
첫 화면에는, container 와 image에 대한 간단한 설명이 나온다.
Container 는 호스트의 프로세스들과 완전히 분리된 프로세스라고 볼 수 있으며, 컨테이너는 리눅스에 아주 옛날부터 있던 kernel namespaces 와 cgroup 기능을 활용한다.
Image는 container 실행에 필요한 파일시스템을 제공한다. dependency, 설정, 스크립트, 바이너리, 그리고 환경변수나 기본 명령어, meta data 를 포함하기도 한다.
튜토리얼 본격 시작!
이 튜토리얼에선, Node.js 를 활용한 Todo List 를 관리를 해본다
먼저, 튜토리얼에서 제공해주는 소스코드를 다운받은 후 VS Code 로 열고 시작한다.
App의 Container Image 빌드하기
image 를 빌드하기 위해선, Dockerfile 이 필요하다. Dockerfile은 명령어 스크립트가 모인 간단한 text-based 파일이다.
1. pakage.json 파일과 같은 위치에 아래 코드를 포함한 Dockerfile 만들기
FROM node:12-alpine
WORKDIR /app
COPY . .
RUN yarn install --production
CMD ["node", "src/index.js"]
2. 아래 명령어로 container image 빌드하기
docker build -t getting-started .
이 명령어는 container image를 빌드하기 위해 Dockerfile을 사용한다. 이 명령어를 실행하고 나면 수많은 "레이어"들이 생성되는데, 이건 우리가 빌더에게 node:12-alpine image 부터 시작하라고 알려줬기 때문이다. 하지만, node:12-alpine image는 우리 로컬 컴퓨터에 없으므로, 먼저 이 image를 다운받아야한다.
-t 플래그는, image에 태그를 붙여준다. 사람이 알아보기 쉽게 하기 위함이다. 여기서 우리가 붙인 태그는 getting-started 이다.
명령어에서 마지막 . 은 Dockerfile 이 현재 디렉토리에 위치해있음을 알려주는 것이다.
* image 목록 확인하기
docker images
App Container 시작하기
image를 만들었으니, 이 image를 이용해 App 을 실행해보자!
1. 아래 명령어 입력
docker run -dp 3000:3000 getting-started
제일 처음에 입력했던 명령어랑 아주 비슷하다
-p 3000:3000 포트맵핑을 해주지 않으면 App을 실행할 수 없다고 한다.
2. 몇 초 후 http://localhost:3000 에 접속하면 App 실행화면을 확인할 수 있다.
3. ToDo List에 몇 가지 아이템을 추가해보자
App 수정하기
ToDo List에 item 이 하나도 없을 때 보이는 메시지를 수정하려고 한다.
1. src/static/js/app.js 파일의 56행을 아래와 같이 수정한다.
- <p className="text-center">No items yet! Add one above!</p>
+ <p className="text-center">You have no todo items yet! Add one above!</p>
2. 업데이트 된 버전의 image를 새로 빌드한다.
docker build -t getting-started .
Dashboard를 보면 container 가 하나 더 추가 돼 이제 3개의 container가 보인다.
3. 새로운 컨테이너를 실행해보자.
docker run -dp 3000:3000 getting-started
port is already allocated 에러 발생!
이는 3000 번 포트를 old container가 이미 사용하고 있기 때문에 발생하는 에러이다.
old container를 제거해야한다.
CLI 로 container 삭제하기
1. container ID 확인
docker ps
2. container 중지
docker stop <the-container-id>
3. container 삭제
docker rm <the-container-id>
* 아래 명령어로 container 중지와 삭제를 한번에 할 수 있다.
docker rm -f <the-container-id>
수정된 App 실행하기
1. 세 번째 등장하고 있는 아래 명령어를 다시 실행한다.
docker run -dp 3000:3000 getting-started
dashboard에서 에러가 났던 container가 다시 실행될 줄 알았더니, 그 container는 그대로 있고 잘 작동하는 새로운 container가 생겼다.
2. http://localhost:3000 으로 가서 수정된 내용이 잘 반영되었나 확인해본다.
이번 section에서 알 수 있는 것.
- image를 다시 빌드하고 실행하면, 원래 있던 ToDo List 아이템들이 사라진다
- 아주 작은 것을 바꾸는데 필요한 단계가 너무 많다.
다음 단계에선, 데이터를 유지하는 방법과, 간단하게 App을 변경할 수 있는 방법을 알아볼 것이다.
너무 길어져서 포스팅을 쪼개야겠다.
'공부기록 > 클라우드' 카테고리의 다른 글
Docker 공식 튜토리얼 따라해보기 (3) Multi-Conatiner _ MySQL 연결 (0) | 2020.08.16 |
---|---|
Docker 공식 튜토리얼 따라해보기(2) Volume 에 대하여 (0) | 2020.08.15 |