[Docker] Container

바울·2022년 8월 24일
0

Container란?

  • 컨테이너는 하나의 Application 프로세스

    컨테이너 1개 = Application 1개

  • 컨테이너 마다 cpu, memory, network, disk, postman, userip, 동작되는 애플리케이션도 모두 독립적으로 구성

docker host

  • 현재 도커 데몬이 동작되고있는 리눅스 커널이 있는 시스템

동작방식

  • app.js를 를 실행하기위한 컨테이너를 만들려면 기반이 되는 이미지 nodejs를 기반이미지 즉 참치를 담아서 옮기려면 냉동고가 필요하듯이 nodejs를 먼저 설치해 준후 거기에 app.js 를 담은 후 그 후 이 컨테이너가 실행될 때 app.js가 실행되도록

  • base image nodejs(uuid) 설비 -> app.js 집어넣음 source image -> app.js를 동작시키는 방법 -- 컨테이너 image(Dockerfile)

docker hub

  • 컨테이너를 저장해 두는 창고

  • 도커 허브에서 이미지가 있는지 확인해줌

    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: 컨테이너를 만들 수 있도록 도와주는 명령어 집합

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 hub)

  • registry : 여러 형태의 컨테이너 이미지가 모여있는 공간
  • private registry : 사내의 컨테이너 저장소
  • image 종류 : official images(docker에서 직접 관리하는 컨테이너 공식 컨테이너), verified publisher(벤더가 제공해주는 컨테이너), etc

private registry 구축

  • docker 공식이미지 registry : 컨테이너 이미지를 저장하고 서비스 해주는 그러한 컨테이너 레지스트리를 운영할 수 있도록 도와주는 컨테이너

    docker run -d -p 5000:5000 --restart always --name registry registry:2(레지스트리 컨테이너 동작 명령어)

  • private push시 localhost:5000/ubuntu:18.04처럼 앞에 호스트이름 포트넘버를 입력해 주어야함

  • private 컨테이너는 하나는 무료지만 두개 부터는 유료

0개의 댓글