티스토리 뷰

Docker를 사용하여서 간단한 서버를 MSA처럼 구성하여서 사용하고 있습니다.

docker file 즉 image를 사용하는 방법에 대해서 알아보도록 하겠습니다.

 

한가지 알고 넘어가야 할 것은 Docker를 사용한다는 것은 Docker Image를 이용해서 Container를 실행한다는 것입니다.

 

Docker file의 구성

파일의 이름은 Dockerfile입니다. 이 파일에 구성된 내용을 가지고 Docker Image를 만들게 되는 것이고요.

기본 구조는 명령어의 인자의 형식으로 구성이 되어 있으며, 위에서 부터 순차적으로 동작하는 방식입니다.

각각 명령어들이 독립적으로 실행되어서 다음에 실행되는 명령에 영향을 미치지 않고 현재 동작하는 부분이 이전에 영향을 받지 않으므로 작성하는데 이 부분은 주의 해야 합니다.

 

* 주석은 #을 사용하며 #으로 시작하는 라인은 build 할 때 제외가 됩니다.

또한 .dockerignore 파일에 명시되어 있는 파일들은 build에서 제외가 됩니다.

 

만들어 봅시다.

ubuntu:14.04를 이용하여 data폴더에 파일을 복사한 image를 만들어 볼겁니다.

다음과 같이 간단하게 만들수 있습니다.

FROM ubuntu:14.04
COPY ./ /data

build는 다음과 같이

$ sudo docker build ./

 

그럼 추가적인것들을 알아 봅시다.

1. FROM

image를 build 할 기본 image를 지정합니다. 내가 만들고 싶은 이미지의 기본 이미지이다. ubuntu 같은 것들을 사용 가능함.

 

2. MAINTAINER

image를 만든 사람에 대한 정보를 넣어 줍니다.

 

3. RUN

docker image가 생성되기 전에 수행 할 쉘 명령어 입니다.

RUN mkdir -p /data
RUN [“mkdir”, “-p”, “/data”]

이런 형태로 만들수 있습니다.

 

4. CMD

컨테이너가 시작되었을 때 실행할 실행 파일 또는 셸 스크립트입니다. 

해당 명령어는 DockerFile내 1회만 쓸 수 있습니다.

여러개를 넣을 수는 있지만 마지막에 있는 것만 실행된다고 합니다.

CMD ["executable","param1","param2"] – 명령어 형식
CMD ["param1","param2"] – ENTRYPOINT의 기본 인자로서 사용
CMD 명령어 param1 param2 - 셀 형식

이렇게 됩니다.

 

5. LABEL

image에 metadata를 추가 할 경우에 사용합니다.

LABEL
LABEL <키>=<값> <키>=<값> …

이런 형태로 사용 가능

 

6. EXPOSE

컨테이너가 실행중에 외부에 노출되는 포트입니다.

이때 포트는 컨테이너가 실행되는 호스트의 포트가 아니라 컨테이너의 포트를 의미하게 됩니다.

EXPOSE에 명시된 컨테이너의 포트와 호스트상의 임의의 포트가 연결되어서 외부에서 컨테이너에 접근 할 수 있게 되는겁니다.

EXPOSE 9999

 

7. ENV

Dockerfile안에서 사용할 환경변수를 지정합니다.

그리고 Dockerfile을 이용해서 만들어진 파일안에서도 이 값을 환경 변수로 사용 할 수 있습니다.

ENV GOPATH /go
ENV PATH /go/bin:$PATH

 

8. ADD

파일을 이미지에 추가합니다.

ADD hello-entrypoint.sh /entrypoint.sh
ADD hello-dir /hello-dir
ADD zlib-1.2.8.tar.gz /
ADD hello.zip /
ADD http://example.com/hello.txt /hello.txt
ADD *.txt /root/

 

 

9. COPY

directory 내용을 container의 /data로 복사하라는 명령입니다.

ADD와는 달리 압축 파일을 추가할 때 압축을 해제하지 않으며, 파일 URL도 사용 할 수 없습니다.

 

10. VOLUME

VOLUME은 디렉터리의 내용을 컨테이너에 저장하지 않고 호스트에 저장하도록 설정합니다. 

데이터 볼륨을 호스트의 특정 디렉터리와 연결하려면 docker run 명령에서 -v 옵션을 사용해야 합니다. 

VOLUME /data
VOLUME ["/data", "/var/log/hello"]

하지만 VOLUME으로는 호스트의 특정 디렉토리는 연결할 수가 없는데 이 부분은 다음과 같이 사용합니다.

$ sudo docker run -v /root/data:/data example

 

11. ENTRYPOINT

container가 시작되었을 때에 스크립트 혹은 명령을 실행하도록 합니다.

ENTRYPOINT ["/home/hello/hello.sh"]

이런식이 되겠죠? ㅎㅎ

 

12. WORKDIR

RUN, CMD, ENTRYPOINT, COPY, ADD 명령어가 실행되는 작업 디렉토리를 설정한다. Dockerfile안에서 여러번 사용되면 직전에 사용됐던 WORKDIR을 기준으로 상대경로로 이동한다.

 

 

댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
«   2024/05   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
글 보관함