본문 바로가기
IT/Kubernetes

[Docker] dockerfile build (with sample)

by rapker 2023. 4. 8.
반응형

참고

nginx가 설치된 ubuntu 이미지를 dockerfile로 만들어 봅니다.

샘플은 문서 하단에 있습니다.

요약

#작업경로 생성 후 이동

mkdir sampledocker
cd sampledocker/

큰 의미가 있지는 않지만 그냥 아무 파일도 없는 곳에서 작업을 하고 싶어서....

 

 

#dockerfile 생성

vi dockerfile

dockerfile의 내용

FROM ubuntu:18.04  
LABEL maintainer="rapker@cloocus.com"
RUN apt-get update 
RUN apt-get install -y nginx 
WORKDIR /etc/nginx  
CMD ["nginx", "-g", "daemon off;"] 
EXPOSE 80

#도커파일 빌드

docker build --force-rm --tag mynginx:0.1 .

 

#컨테이너 실행

docker run -dit --name port_open_server -p 8080:80 mynginx:0.1

 

#nginx 접근 테스트

host에서 접근

 

host 외부에서 접근

 

 

 

자세히

 

#dockerfile 키워드 의미

Dockerfile Keyword - Docker docs

Dockerfile 구문 및 옵션 - DongDongE_Blog

FROM 베이스 이미지 지정 FROM ubuntu:18.04

LABEL 작성자 정보 LABEL maintainer="rapker@http://cloocus.com/"  
RUN 빌드타임에 쉘 스크립트 실행 RUN apt-get updateRUN apt-get install -y nginx -y 옵션으로 빌드중 키 입력 방지
WORKDIR 컨테이너 실행 시 해당 경로로 이동 WORKDIR /etc/nginx  
CMD 컨테이너 실행 시 해당 cmd 실행 CMD ["nginx", "-g", "daemon off;"] nginx를 foreground로 실행
EXPOSE host와 연결할 port설정 EXPOSE 80  

 

#도커파일 빌드

가장 기본적으로 사용하는 빌드방법

  • dockerfile이 있는 곳으로 이동
  • docker build 실행

docker build --force-rm --tag mynginx:0.1 .

  • -force-rm : 이미지 빌드중 생성되는 임시 컨테이너 삭제
  • -tag : 빌드된 이미지의 네이밍
  • . : dockerfile의 경로

 

#자세한 빌드 옵션

docker build [options] path | url | -

docker build options

docker build path | url

 

#컨테이너 실행

docker run -dit --name port_open_server -p 8080:80 mynginx:0.1

  • dit : -d -i -t 옵션을 요약해서 사용
    • d : daemon (background)으로 실행
    • i : interactive - 컨테이너와 상호작용 - 입출력 허용
    • t : tty(teletypewriter) - 터미널 환경처럼 사용
  • -name : 실행할 컨테이너의 이름
  • p : host에 8080 port로 들어오면 컨테이너에 80으로 전달
  • mynginx:0.1 : [이미지 이름]:[태그]

host외부에서 container에 접근이 가능하게 하려면 --cap-add-NET_ADMIN 옵션을 추가해야 한다는 글도 있었지만

해당 옵션을 사용하지 않아도 host 외부에서 웹페이지 접근이 가능했음

(제반 환경 차이가 있었을지도 몰라서 기록용으로 남겨둠)

docker run --cap-add=NET_ADMIN -dit --name port_open_server -p 8080:80 mynginx:0.1

 

#특이사항

이미지 만들 때 nginx는 foreground로 실행 (CMD ["nginx", "-g", "daemon off;"]) 하도록 빌드하고

만들어진 이미지를 실행할 때 container는 background로 실행 (docker run -d) 하는것이 핵심

왜 이렇게 해야 되는지 설명된 글은 찾지 못했지만

추측으로는

  • container 내부에는 nginx 외 다른 application을 실행하지 않도록 하고
  • container 자체는 daemon으로 띄워만 놓으면 되기 때문
    • foreground로 실행시킬 이유도 딱히 없고...

Dockerfile Samples

FROM ubuntu:20.04   
RUN apt-get -y update 
RUN mkdir -p /app 
COPY . /app 
WORKDIR /app 
RUN apt-get -y install curl
CMD ./AppServer
EXPOSE 7777
FROM ubuntu:20.04   
RUN apt-get -y update 
RUN mkdir -p /app 
COPY . /app 
WORKDIR /app 
RUN apt-get -y install curl
#ENV SIGN_ID rapker
#ENV SIGN_PW rapker
#ENV SERVER_ADDR 15.164.240.10
#ENV SERVER_PORT 30039
CMD ./AppServer-AutoSignId $SIGN_ID -AutoSignPw $SIGN_PW -ServerAddr $SERVER_ADDR -ServerPort $SERVER_PORT
#EXPOSE 7777
FROM ubuntu:20.04   
RUN apt-get -y update 
RUN mkdir -p /app 
COPY . /app 
WORKDIR /app 
#RUN mkdir -p /etc/ssl/certs && ln -s /etc/pki/tls/certs/ca-bundle.crt /etc/ssl/certs/ca-certificates.crt
RUN apt-get -y install curl
#ENV SPACE_ID 1001
CMD ./AppServer -AppType Server -OwnerUserID $OWNER_ID -SpaceId $SPACE_ID -SpaceName $SPACE_NAME -SpaceJsonUrl $SPACE_JSON_URL
#CMD ["./AppServer", -AppType Server -SpaceId 1001"]
EXPOSE 7777
반응형
LIST