본문 바로가기
Docker

[Docker] DockerFile 정리

by 미소여우 2022. 4. 11.
728x90
Docker도 알아야 하는 개념이 많지만, 내 글에서는 일단 사용법 위주로 정리하려고 한다. (자꾸 잊어 먹어서 찾는게 너무 일이다..)

DockerFile이란

 

간단 예제

먼저 아무 디렉토리를 만들어 그 안에다가 DockerFile을 만들어 작업해주자.

home이나 상위 경로 아무데다 했더니 문제가 발생했는데, DockerFile을 찾을 때 상위 경로에서 하위 경로까지 다 탐색을 하게 되면서 문제가 발생할 수 있기에 DockerFile이 위치한 경로를 파악하여 사전에 차단해준다고 한다.

Warning Avoid using your root directory, /, as the root of the source repository. The docker build command will use whatever directory contains the Dockerfile as the build context (including all of its subdirectories). The build context will be sent to the Docker daemon before building the image, which means if you use / as the source repository, the entire contents of your hard drive will get sent to the daemon (and thus to the machine running the daemon). You probably don't want that.

 구글링하여 내용을 찾아본 바로는, 빌드 전 도커 데몬에게 빌드 컨텍스트를 보내는데 이 컨텍스트는 현재 디렉토리부터 하위 다 뒤져보게 되기에 그렇게 하지말라고 하는 듯 하다.

FROM ubuntu:18.04

RUN apt-get -y update
RUN apt -y update
RUN apt install -y software-properties-common
RUN add-apt-repository ppa:deadsnakes/ppa
RUN apt install -y python3.7
RUN apt-get install -y python3-pip
RUN apt install git -y
RUN python3.7 -m pip install --upgrade pip

RUN useradd atk
USER atk

WORKDIR /home/atk
ADD kospeech /home/atk/
  • FROM ubuntu:18.04: 어떤 이미지를 갖고 쓸건지 정하는 것이다. 여기서 ubuntu:18.04를 불러 왔다.
  • RUN을 통해서 명령어들을 실행시킬 수 있다. 나는 파이썬 3.7을 설치하기 위해서 apt를 update해주고, 저장소 추가해주고, 이후 3.7버전을 설치하도록 하였다.
  • ubuntu 설치 시 기본적으로 root로 작동하는데, 나는 사용자를 추가하기 위해서 useradd를 사용했다.
  • WORKDIR는 컨테이너로 생성 시, 위치하고 싶은 디렉토리를 정해줄 때 사용한다.
  • ADD를 활용해 내 로컬 컴퓨터에 있는 폴더를 컨테이너에 둘 수 있도록 하였다. COPY하고 ADD가 있는데, 추후 정리하겠다. 사용법으로 ADD [내 컴퓨터에서 옮길 파일 or 폴더] [컨테이너 디렉터리]

이후 다음과 같은 명령어로 빌드해주면 된다.

docker build -t 이미지명:태그(선택) .

현재 디렉토리에 있는 DockerFile을 가지고 빌드한다 이해하면 된다. 정상적으로 수행되면, docker images를 통해 나만의 이미지가 완성된다.

주의사항

ADD, COPY 등이 호스트의 파일이이나 디렉토리를 옮길 수 있는 것이라 했는데, 상대 경로는 먹히지 않는다. 이유는 위에 적은 내용처럼 도커 데몬에 현재 빌드 컨텍스트를 보내기 때문이다. 따라서 내가 옮기고 싶은 내용이 있는 곳에 DockerFile을 만들고 작업하자. 또는 docker-compose를 작성하여 빌드 컨텍스트를 지정해줄 수 있다.

참고

https://github.com/docker/compose/issues/1398

728x90

댓글