몽자비루 ㅣ 2024. 4. 23. 18:22
- 무엇을 컨테이너로 만드는가?
- 개발한 프로그램 (애플리케이션, 실행파일) 과 운영환경을 모두 컨테이너로 만듬.
- MSA (Micro Service Architecture) 환경의 plyglot 애플리케이션 운영
- MSA : 작고, 독립적으로 배포가능한 각각의 기능을 수행하는 서비스로 구성된 프레임워크
- polyglot programming : 다양한 언어를 사용하여 프로그래밍하는것
- 컨테이너를 만드는 방법과 docker file의 정의
- dockerfile : container를 만들 수 있도록 도와주는 명령어 집합
- 쉽고, 간단, 명확한 구문을 가진 text file 로 top-down 해석
- 컨테이너 이미지를 생성할 수 있는 고유의 지시어(instruction)를 가짐
- 대소문자를 구분하지 않으나, 가독성을 위해 사용함.
$mkdir build
$cd build
$vi hello.js
$vi dockerfile
FROM node:12
COPY hello.js /
CMD ["node", "/hello.js"]
$docker build -t imagename:tag .
ㄴ . 은 현재 디렉토리에 있음을 의미함.
- dockerfile 문법
- # : comment, 간단한 설명 작성가능
- FROM : 컨테이너의 base image(운영환경) 정의
항상 가장 먼저 정의해야 함 (top down 방식)
- MAINTAINER : 컨테이너 빌드한 이름 등을 참조해서 넣을 수 있음
- LABEL : 컨테이너 이미지에 컨테이너의 정보를 저장함.
- RUN : base image에서 지원해주는 명령을 컨테이너를 빌드할 때 실행해줌.
- COPY : 컨테이너 빌드 시 호스트의 파일을 컨테이너로 복사 (컨테이너 빌드 시점)
- ADD: 컨테이너 빌드 시 호스트의 파일(tar, url 포함) 을 컨테이너로 복사
ㄴ copy와 add의 경우, 컨테이너 빌드한 시점에, host의 파일을 컨테이너 안에 복사할 때 사용
- WORKDIR : 컨테이너 안에서 명령이 실행될 작업 디렉터리 설정.
- ENV : 컨테이너 안에서 환경변수 지정
- USER : 명령 및 컨테이너 실행 시, 적용할 유저 설정 (보안적 관점과 연결됨)
- VOLUME : 컨테이너가 동작될 때 volume mount 할 수 있도록 지원.
보통 컨테이너에서 애플리케이션 데이터가 저장되는 공간을 볼륨으로 선언.
- EXPOSE : 컨테이너 동작 시, 외부에서 사용할 포트 지정
- CMD : 컨테이너가 실행될 때 자동으로 동작 시켜주고 싶은 명령어 추가.(서비스 및 스크립트 지정)
- ENTRYPOINT : cmd와 함께 사용하면서 commmand 지정 시 사용.
ㄴ cmd는 컨테이너를 실행할 때, 명령어를 치환할 수 있음.
ㄴ entrypoint는 컨테이너를 실행할 때, 명령어 치환을 차단함.
- 내가 만든 컨테이너 배포
- docker host / docker hub
- $docker build -t imagename:tag . : 이미지화 된 컨테이너가 HDD에 들어가있음.
- $docker login : 컨테이너를 허브에 넣기 위해 인증(login)
- $docker push imagename:tag : 컨테이너를 허브에 넣음 (다른사람이 사용할 수 있게됨)
- 예시