본문 바로가기

Cloud/Docker, Kubernetes

[2021/04 Docker 교육] 4일차

<5장 Dockerfile>

Dockerfile 로 컨테이너 생성하는 연습 해보면 좋을 듯

===========================================================

https://www.44bits.io/ko/post/building-docker-image-basic-commit-diff-and-dockerfile

보통 커스텀 image 를 만들 경우에는
docker build 를 사용한다

github 와 연동하여 자동 build를 하는 것도 가능
3일차에 실습 했었음

docker build -t {생성할 이미지명}
docker build -t {생성할 이미지명} -f {Dockerfile}

===========================================================

<Dockerfile 문법>

FROM
어떤 OS 에서 실행하도록 할지
FROM ubuntu:{tag}, centos:{tag}, busybox:{tag} 등


MAINTAINER
해당 Dockerfile을 만든 저자
이메일 주소를 쓰기도 한다
MAINTAINER {author_name}


ENTRYPOINT
컨테이너가 시작되었을 때 실행할 스크립트 혹은 명령어
ENTRYPOINT /bin/bash
ENTRYPOINT hello.sh


RUN
실행할 명령어
RUN은 여러개 적용 가능
RUN {command}


CMD
docker run 실행 시점에 적용할 명령어 나열
CMD는 하나만 적용 가능
CMD {exec} {parameter1} {parameter2}


USER
어떤 user 가 명령어를 수행하도록 할지
USER root, {일반유저} 등


LABEL
버전과 명령어 등의 정보를 이미지에 심을 때 사용
LABEL {key}={value}
LABEL description="This is tomcat image with jennifer agent"

===========================================================

<RUN / CMD / ENTRYPOINT>

https://blog.leocat.kr/notes/2017/01/08/docker-run-vs-cmd-vs-entrypoint

RUN이 CMD보다 우선순위가 높다

===========================================================

docker run 명령어 내에서 command와 entrypoint 등을 설정하는 방법도
공부하면 좋을 듯

https://www.daleseo.com/docker-run/

docker run -ditp 8080:8080 --name tomcat tomcat:9.0.45-jdk11

===========================================================

<chapter 06 Docker Storage>

https://docs.docker.com/storage/volumes/

docker run 시 -v 옵션을 사용하여
호스트와 컨테이너 간 데이터 공유 가능
docker run -ditv {host_dir}:{container_dir}:{read_write_mode} centos:latest

데이터 저장 전용 컨테이너를 따로 두어
다른 컨테이너 시작 시 볼륨을 불러오도록 할 수도 있다
서로 다른 컨테이너 간에 볼륨을 공유하는 것
docker run --volumes-from {container_name}

===========================================================

Docker 설치 시 3가지 네트워크 인터페이스가 기본으로 설치된다

  • Bridged Network (NAT)
  • Macvlan
  • host

Bridge 인터페이스 (default)

  • NAT를 사용하여 container를 외부(호스트 ) 네트워크로 포워딩
  • Container에 할당된 IP 확인은 docker inspect 명령어로
  • docker run -dit --net=bridge
    참고 : 로컬에서는 호스트와 VM 간의 통신을 위해 NAT 인터페이스를 사용한다

Macvlan 인터페이스

  • Container 와 호스트 간의 통신이 안된다
  • Container 와 다른 서브 인터페이스 간의 통신은 가능

host 인터페이스

  • Container에서 호스트의 네트워크 환경을 그대로 사용하는 것
  • docker run -dit --net=host

===========================================================

port forwarding (mapping)

  • docker run -p hostport:containerport