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한 데이터를 공유 가능함
'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 |