Docker Container 만들기
무엇을 컨테이너로 만드는 건가요?
Container란 개발한 애플리케이션과 운영환경이 모두 들어있는 독립된 공간
컨테이너 하나가 하나의 애플리케이션이면 애플리케이션은 동작하기 위해서는 운영환경과 같은 기본 환경이 필요하며 그 환경이 컨테이너에 구비되어있다.
컨테이너를 만들기 위해서는 운영환경(python)과 소스코드(python 소스코드)와 명령어가 필요하다.
각각의 컨테이너를 만들어서 MSA환경의 Polyglot애플리케이션 운영
개발한 프로그램과 실행환경을 모두 컨테이너로 만든다.
애플리케이션을 구현하는데 가장 적합한 언어를 선택해서 하나의 플랫폼을 구현할 수 있다.
각각의 Application Service에 맞춰 Container를 만들어 낸다!
폴리글랏(Polyglot) 은 여러 언어를 구사하는 것을 말한다. 즉, 폴리글랏 프로그래밍은 '패러다임을 달리 하는 여러 개발 언어를 자유롭게 구사하는 것'이라고 할 수 있다. 일반적으로 프로그래머는 하나의 언어를 배우게 된다
컨테이너 어떻게 만들까? Dockerfile?
컨테이너는 Dockerfile(Container를 만들 수 있도록 도와주는 명령어 집합)을 이용해서 컨테이너를 빌드한다.
Dockerfile은 쉽고, 간단, 명확한 구문을 가진 text file로 Top-Down해석으로 이루어진다.
컨테이너 이미지를 생성할 수 있는 고유 지시어를 가진다.
대소문자 구분하지 않으나 가독성을 위해 사용한다.
mkdir bulid
cd bulid
vi dockerfile
FROM python:latest
COPY hello.py
CMD "python", "/hello.py"
docker build -t 이미지이름:태그
#
주석
FROM
가장 먼저 나오는 컨테이너의 basis이미지 운영환경이 된다.
MAINTAINER
이미지를 생성한 사람의 이름 및 정보, 키와 벨류 형태로 넣어주어야 한다.
LABEL
컨테이너이미지에 컨테이너의 정보를 저장
COPY
빌드하는 시점에 Host에 있는 파일을 컨테이너로 복사
ADD
빌드하는 시점에 Host에 있는 파일(tar, url포함)을 컨테이너로 복사
RUN
컨테이너 빌드를 위해 base image에서 실행할 commands
예로 pip명령어를 가지고 라이브러리를 설치하는 경우 사용한다.
base image에서 지원해주는 명령을 컨테이너를 빌드할때 실행해준다.
WORKDIR
컨테이너 안에서 작업디렉토리를 알려준다. 컨테이너 빌드시 명령이 실행될 작업 디렉터리 설정
ENV
컨테이너 안에서 환경변수를 만들때 사용한다. 컨테이너가 다 빌드된 후에는 환경변수가 남아 있다.
USER
명령 및 컨테이너 실행시 적용할 유저 설정, 유저를 설정하지 않을 시는 기본으로 root로 설정된다. 하지만 보안을 위해서는 user를 설정해서 switch하는 개념을 익힐 필요가 있다.
VOLUME
컨테이너가 동작 될때 애플리케이션 데이터가 저장되는 곳을 설정, 컨테이너가 동작할 때 실행되며,
볼륨 마운트할 수 있도록 도와준다.
EXPOSE
컨테이너 동작 시 외부에서 사용할 포트 지정, 애플리케이션 서비스가 네트워크를 기반으로 한다면 포트를 열어야 한다.
그 경우 Docker File에서 port를 입력해주어야 한다.
그리고 나중에 container를 실행할 때 Port Forwarding을 통해서 서비스를 연결 시켜 줄 수 있다.
CMD
컨테이너 동작 시 자동으로 실행할 서비스나 스크립트 지정.
옵션이나 Argument 함께 사용, CMD는 컨테이너를 Running할 때
CMD "python", "/hello.py"
/hello.py를 다른 걸로 바꿔서 쓸수 있다.
ENTRYPOINT
CMD와 함께사용하면서 Command 지정 시 사용, ENTRYPOINT는 치환하지 못하도록 차단한다.
ENTRYPOINT는 명령어
CMD는 명령어 또는 명령어 Argument 또는 명령어 Option Argument
ENTRYPOINT와 CMD를 같이 사용할 수도 있다.
그 경우 ENTRYPOINT는 명령어를 CMD는 Option과 Argument를 적는다.
docker bulid -t 이름:태그 .
내가 만든 컨테이너를 배포하는 방법
docker bulid -t 이름:태그 .
컨테이너 빌드하기 .은 현재 디렉토리에 있는 파일을 기준으로 작업해라의 의미이다.
docker login
허브에 올리기 위해서 로그인
docker push 이름:태그
허브에 올린다.
https://www.youtube.com/watch?v=9qnD8aODu-4&list=PLApuRlvrZKogb78kKq1wRvrjg1VMwYrvi&index=11