카테고리 없음

Dockerfile 작성(이전 완료)

ㅈ현 2022. 6. 19. 07:17

1. Dockerfile

앞에서 컨테이너를 실행시키려면 image가 필요 했다.
이 이미지는 docker hub 에 올라와있는 공식 이미지를 받을 수도 있고, 직접 Dockerfile이란 파일을 만들어 관리할 수도 있다.
만들어진 Dockerfile은 docker build 명령어를 통해 빌드할 수 있고 이렇게 빌드된 이미지는 docker push 명령을 통해 개인 registry 또는 Docker hub에 올릴 수 있다.
Dockerfile의 자세한 작성방법은 Dockerfile Reference를 참조할것

2. example

데이터가 같이 있는 flask 이미지를 하나 만들어 보겠다.
데이터는 다음과 같은 구조를 가진다.

working directory

 
 

app_file 밑에 Image, Js, Library, Python, data의 디렉토리가 존재하고 각각 아래에 데이터들이 존재한다

이제 이미지를 만들 Dockerfile 이다.

FROM python:3.7.7			
WORKDIR /app				
COPY ./app_file .

RUN apt-get update -y		
RUN apt-get upgrade -y 	
RUN apt-get install vim -y	 
RUN python -m pip install --upgrade pip		
RUN pip install -r ./Library/python_install_module_list.txt	

EXPOSE 5000
 

3. FROM 

기본 이미지는 python3.7.7로 하겠다는 의미.

4. WORKDIR 

컨테이너에서 작업 디렉토리는 /app으로 하겠다는 의미. (없으면 만든다)
컨테이너 내부에서 실행하는 cd 명령이다.
컨테이너 내부에서 cd /app명령을 실행한것과 동일함.

5. COPY 

호스트의 app_file 디렉토리 내용을 컨테이너의 workdir(/app)으로 복사한다.

6. RUN 

컨테이너 내부에서 실행할 명령을 선언한다.
RUN은 이미지를 빌드할때(만들때) 한번 실행하고 이후 실행되지 않는다.

7. EXPOSE 

컨테이너의 포트 노출은 5000으로 하겠다는 의미이며 호스트에서 5000포트를 노출한다는게 아닌 컨테이너가 5000포트로 받는다는 것이다.
docker run -p 5000:5000의 의미가 아니란것!!
결국 호스트에서 컨테이너로 넘겨줄 포트를 따로 지정해줘야한다.
ex) docker run -p **:5000
하지만 -P 옵션을 통해 호스트의 랜덤한 포트와 매핑할 수 있다.

8. docker build

다 만들어진 Dockerfile은 이제 build를 해야한다.
아래 빌드 예시이다. 

asdf

 

docker build -t jhkimdocker/jhmariadb:v5 .
  • docker build : 빌드할때 사용하는 명령이다
  • -t [username]/[repository][:TAG] : 이미지에 태그를 다는 옵션
    • jhkimdocker 라는 유저의 이름으로 jhmariadb 저장소에 올리고 TAG는 v5로 하겠다.
  • . : Dockerfile의 위치를 현재 디렉토리로 하겠다. 만약 다른곳에 있는 디렉토리 또는 다른 파일명을 사용할 시 -f 옵션을 쓰면 된다.
    • -f 옵션 사용시 . 의 의미: 현재 디렉토리를 build context로 사용하겠다는 의미다.
docker build -t jhkimdocker/jhmariadb:v5 -f dir1/dir2/Dockerfile .

 

빌드가 완료되면 docker images 명령을 통해 생성된 이미지를 확인할 수 있다.