도커에 대해 많이 들어왔지만, 그동안 사용할 일이 없어서 따로 학습을 하지 않았다.
이번에 기능테스트 자동화를 진행하며, 프로젝트 덩치가 점점 커지면서, 테스트를 실행하는 환경이 따로 필요하다는것을 느꼈다.
하지만 자동화 테스트 환경을 로컬에 직접 설치해서 본 업무에 영향을 주기 싫었다. (jdk 버전관리 등등...)
원래는 vm을 생각했지만, vm에 올리기엔 배보다 배꼽이 더 커지는 경향이 있어서...
그래서 생각난것이 바로 Docker!
얼핏 듣기로는 Docker가 리눅스 커널의 기능을 사용하기때문에 윈도우에서는 돌아가지 않는다- 라고 해서, 우분투를 깔아야하나 라고 걱정하고 있었지만 다행히 윈도우도 지원한다.
윈도우에서 어떻게 돌아가는지는 모르겠지만, (무지 궁금하지만!) 우선 간단하게 도커를 사용해본다음 생각하도록 하자.
-- 공식 Docker! 메뉴얼
docs.docker.com/docker-for-windows/
-- 공식 Docker! 가이드
튜토리얼 시작
Getting-Started image를 실행해서 container화하자!
docker run -d -p 80:80 docker/getting-started
// -d 백그라운드에서 실행
// -p 80:80 호스트의 80포트를 컨테이너의 80포트에 맵핑
// docker/getting-started 사용할 이미지
컨테이너 란?
호스트 시스템의 모든 프로세스와는 분리 된 시스템의 또 다른 프로세스이다.
이때 Linux의 커널네임스페이스와 cgroup을 활용한다.
컨테이너 이미지란?
컨테이너를 실행할때는 독립적인 파일시스템을 사용한다. 이 사용자정의 파일시스템은커넽이너 이미지에서 제공한다. 이미지에는 컨테이너의 파일시스템이 포함되어 있으므로 애플리케이션을 실행하는데 필요한 모든 항목(모든 종속성, 구성, 스크립트, 바이너리 등)이 포함되어야 한다. 이미지에는 컨테이너에 대한 다른구성(환경변수, 실행할 기본명령 등)도 포함된다.
나의 80번포트와 컨테이너의 80번포트를 맵핑했으므로, 80번포트로 접속해보자.
와- 이미지를 다운받고 그저 실행했을 뿐인데 웹서버가 떠있고, 그 안에는 도커 가이드 문서가 있다.
가이드를 따라서 실행을 해보니.. 80번 포트로 접속했을때 웹사이트가 뜨는것을 볼 수 있었지만, 아직까지 내가 무엇을 한건지 잘 와닿지 않았다. 그래서.. 이 이미지가 어떻게 구성되어있는지 궁금해서 방법을 찾아보니..
//cmd에서 실행!
docker image inspect docker/getting-started
명령어의 결과로, 아직은 잘 와닿지 않았지만, 대충 이미지의 내용은 amd64 cpu에 linux기반, NGINEX위에 웹사이트가 올라가있는 형태인것으로 추측된다.
이제 컨테이너에 직접 application을 올려보자!
가이드에서는 zip를 다운로드 하지만, 실제 프로젝트의 경우 일반적으로 저장소를 복제한다.
앱의 컨테이너 이미지
응용 프로그램을 빌드하려면 Dockerfile이 필요하다. Dockerfile은 container image를 생성하는데 필요한 텍스트 기반 스크립트이다.
1) package.json과 같은 폴더에 Dockerfile파일을만든다.(주의! 확장자가 없어야 한다.)
아래의 내용을 입력한다.
FROM node:12-alpine
WORKDIR /app
COPY . .
RUN yarn install --production
CMD ["node", "src/index.js"]
node:12-alpine : 빌더에게 해당 이미지에서 시작하고싶다고 지시했으나, 이미지가 없어서 다운로드했다.
이미지를 다운로드 한 다음에 application에 필요한 의존성을 설치하기 위해 application을 복사하고 yarn명령어를 사용했다(?)
CMD는 컨테이너를 시작할 때 실행할 수 있는 기본 명령을 지정한다.
2) Dockerfile이 존재하는 위치에서 docker build 명령을 사용하여 컨테이너 이미지를 빌드한다.
(혹은 .대신 Dockerfile이 위치하는 경로를 입력해 주면 되겠다.)
docker build -t getting-started .
-t옵션은 이미지에 태그를 지정한다. 이름을 getting-started로 지정했기 때문에 컨테이너를 실행할때 해당 이미지를 참조할 수 있다.
. 는 Dockerfile이 존재하는 위치이다.
App을 Container로 시작하자.
docker run -dp 3000:3000 getting-started
d와 p옵션을 기억하시는지? 바로 백그라운드화와 port지정 옵션이다 합쳐서 사용이 가능하다.
명령어를 사용한 후 3000번 포트로 접근해보자.
Add Item을 사용하여 새로운 항목을 넣어보자. Backend에서 이를 저장해주므로 새로고침해도 결과가 유지되는것을 확인할 수 있다. 서버단까지 구현이 되어있는 프로젝트인가보다.
이야기로만 들었던 도커의 간단한 예제를 실행해 보았다.
특히.. 이미지를 컨테이너로 띄워서 간단하게 웹서비스를 실행할 수 있다는점이 놀라웠다....!비록 내가 원하는것은 repository를 컨테이너로 띄우는것은 아니지만.. 이런 사용법이 있다는것을 알게되어서 기부니가 조크든요.
'Today I learned' 카테고리의 다른 글
2021 01 06 - Jsoup 우여곡절기 (JSoup을 이용한 String to Element) (0) | 2021.01.06 |
---|---|
2020 01 05 - Appium With Docker! (0) | 2021.01.05 |
2021 계획 (0) | 2021.01.01 |
2020 12 20 - 악성코드 분석로직 설계 (0) | 2020.12.20 |
2020 12 17 아파치 예제모듈 실행 (0) | 2020.12.17 |
댓글