본문 바로가기
CS(Computer Science)/소프트웨어공학

4. Docker2

by 동욷 2023. 2. 6.

#Docker #DockerFile

DockerFIle

  • docker image를 만들기 위해 내리는 command를 모아둔 text 파일
  • docker build command를 사용하여 docker 파일로부터 container 생성
  • command를 자동으로 생성할 수 있는 명령어 모음집

Dockerfile -> Docker image -> Docker Container

원래 기본 docker container 작업 과정

  • image -(run) -> container -(exec) -> inside the container -(do jobs)
  • -> exit -> commit -> save a new image

Dockerfile 기본 구문

  • FROM , ADD , RUN, CMD, ENTRYPOINT, ENV

FROM : base image 지정

ADD <source > <destination in container> : 파일들 복사 (COPY)

  • ADD는 <source>로 url 사용 가능, COPY와 ADD는 서로 비슷

RUN : base image 위에 추가 SW 계층 설치

CMD : container 안에서 실행하려는 command

ENTRYPOINT : CMD와 유사

  • Docker는 /bin/sh -c를 default entrypoint로 함
  • 그러나 -c 뒤에 입력할 command는 default가 없음
  • docker run -it ubuntu bash에서 entrypoint가 /bin/sh -c , image는 ubuntu , command 는 bash
  • docker run -it ubuntu <cmd> : <cmd>는 the entrypoint의 parameter
  • CMD에 비해 ENTRYPOINT는 내가 만든 image를 다른 사람이 run 할 때, 또는 run이 시작될때 다른 command를 입력하여 dockerfile의 CMD에 지정된 명령을 생략할 수 없게 할 때 사용

ENV : container에서 사용할 environment 변수 지정

Dockerfile 예

FROM ubuntu

## for apt to be noninteractive

ENV DEBIAN_FRONTEND noninteractive

ENV DEBCONF_NONINTERACTIVE_SEEN true

RUN apt-get update

RUN apt-get install –y apache2

ADD . /var/www/html

ENTRYPOINT apache2ctl –D FOREGROUND

ENV env_var_name <변수 이름>

docker build . –t <image name> // dockerfile로부터 image 만들기

docker run -it -p <host port #:container port#> -d <image>

docker run -it -p <port #:port #> -v <local dir : mounting point dir in container> -d <image>

docker run -it -p 81:80 –v ~/dockerfile:/var/www/html -d swedemo/test

Docker Volume

  • Container는 read-only app이 기본이다
  • Container는 cgroup 즉 자신만의 OS를 사용하며, 다른 container의 OS와 별도의 자원, 즉 DRAM 영역, CPU 시간을 사용하도록 되어 있고, 디스크와 같은 persistent storage를 사용하지 않고 기본적인 in-memory 사용
  • Container run : container filesystem read-only layer 위에 read-write layer로 만들어진 virtual filesystem으로서 시작, 만들어진 파일은 in-memory file system에 쓰이다 종료시 사라짐
  • 데이터 유실의 단점을 해결하기 위해서 -> 호스트 OS의 파일 시스템을 mount하는 container volume기능 추가

그러나 volume 기능은 잘못된 코딩 또는 바이러스에 의해 Container의 filesystem 간섭없어 보안이 뛰어난 장점이 훼손될 수도 있음

  • docker volume create <volume name> : /var/lib/docker/volumes 에 docker volume 생성
  • docker run --mount source = <volume name> , destination = <path in container> <image name> : 원하는 docker volume을 마운트하여 container에서 호스트 기계의 persistent 스토리지에 데이터 저장하고 여러 컨테이너들 사이에서 persistent한 데이터를 공유 가능함


 

728x90

'CS(Computer Science) > 소프트웨어공학' 카테고리의 다른 글

6. Network Virtualization  (0) 2023.02.06
5. Docker3  (4) 2023.02.06
3. Docker  (0) 2023.02.06
2.Git/Github  (0) 2023.02.06
1.SW development models  (0) 2023.02.06