컨테이너는 하나의 Application 프로세스
컨테이너 1개 = Application 1개
컨테이너 마다 cpu, memory, network, disk, postman, userip, 동작되는 애플리케이션도 모두 독립적으로 구성
app.js를 를 실행하기위한 컨테이너를 만들려면 기반이 되는 이미지 nodejs를 기반이미지 즉 참치를 담아서 옮기려면 냉동고가 필요하듯이 nodejs를 먼저 설치해 준후 거기에 app.js 를 담은 후 그 후 이 컨테이너가 실행될 때 app.js가 실행되도록
base image nodejs(uuid) 설비 -> app.js 집어넣음 source image -> app.js를 동작시키는 방법 -- 컨테이너 image(Dockerfile)
컨테이너를 저장해 두는 창고
도커 허브에서 이미지가 있는지 확인해줌
docker search nginx
도커 허브에서 이미지를 하드디스크로 가져옴
docker pull nginx:latest(이미지이름)
이미지를 실행
docker run -d --name web -p80:80 nginx:latest
run 대신 create, start도 가능
MSA(Miceo Service Architecture) 환경의 Polyglot 애플리케이션 운영
polyglot programming: 다양한 언어를 사용하여 프로그래밍 하는 것
애플리케이션 기능마다 가장 적합한 필요한 효율적인 언어를 하나하나 컨테이너로 만들어 하나의 e-commerce platform을 만듬
각각의 Application Service에 맞춰 컨테이너를 만들어 낸다
Dockerfile: 컨테이너를 만들 수 있도록 도와주는 명령어 집합
- # 주석
- FROM 컨테이너의 BASE IMAGE(운영환경)
- MAINTAINER 이미지를 생성한 사람의 이름 및 정보
- LABEL 컨테이너이미지에 컨테이너의 정보를 저장
LABEL maintainer="bawool bawool@gmail.com"
키 벨류 형태로- RUN 컨테이너 빌드를 위해 base image에서 실행할 commands
- COPY 컨테이너 빌드시 호스트의 파일을 컨테이너로 복사
- ADD 컨테이너 빌드시 호스트의 파일(tar, url 포함)을 컨테이너로 복사
- WORKDIR 컨테이너 빌드시 명령이 실행될 작업 디렉터리 설정
- ENV 환경변수 지정
- USER 명령 및 컨테이너 실행시 적용할 유저 설정
- VOLUME 파일 또는 디렉토리를 컨테이너의 디렉토리로 마운트
- EXPOSE 컨테이너 동작 시 외부에서 사용할 포트 지정
- CMD 컨테이너 동작 시 자동으로 실행할 서비스나 스크립트 지정
- ENTRYPOINT CMD와 함께 사용하면서 command 지정 시 사용
레이어는 적게 사이즈는 작게!
docker 공식이미지 registry : 컨테이너 이미지를 저장하고 서비스 해주는 그러한 컨테이너 레지스트리를 운영할 수 있도록 도와주는 컨테이너
docker run -d -p 5000:5000 --restart always --name registry registry:2(레지스트리 컨테이너 동작 명령어)
private push시 localhost:5000/ubuntu:18.04처럼 앞에 호스트이름 포트넘버를 입력해 주어야함
private 컨테이너는 하나는 무료지만 두개 부터는 유료