카테고리 없음
DockerFile
개발하는 양파
2024. 6. 21. 02:24
dockerFile?
도커 이미지를 빌드하기위한 파일(일종의 레시피)
어떤파일실행?설치? 어떤os?같은걸 적어놓는 파일 빌드라는과정으로 이미지로 변환
필요한 파일을 다운받고 설정한데로 명령을 실행
후에 빌드된 이미지를 실행하면 컨테이너가 실행
왜 써?
- 앱을 컨테이너로 만들 때 이미지를 만드는 용도, 앱이 필요한것을 한곳에 담을수있음
- 누구나 dockerfile을 보고 똑같은 환경을 쉽게 만들수있음
- 앱 생성과정을 매번 똑같은 방식으로 자동화시킬수 있다.
# Dockerfile
FROM ubuntu:latest
MAINTAINER Your Name <your-email@example.com>
RUN apt-get update && apt-get install -y nginx
COPY index.html /usr/share/nginx/html
EXPOSE 80
CMD ["nginx", "-g", "daemon off;"]
Ubuntu 최신 버전을 기반으로 Nginx를 설치하고, index.html 파일을 Nginx의 HTML 디렉토리에 복사하는 예시
- FROM: 베이스 이미지를 선택
- MAINTAINER: 이미지를 만든 사람의 정보를 입력
- RUN: 이미지에 명령을 실행하여 파일을 추가하거나 삭제
- COPY: 파일을 이미지에 복사
- EXPOSE: 컨테이너가 노출할 포트를 설정
- CMD: 컨테이너가 실행될 때 실행할 명령을 설정
docker buildx build -t my-nginx:latest .
docker build -t my-nginx:latest . # 위 명령이 실행되지 않는 경우 실행
현재 디렉토리에서 Dockerfile을 기반으로 my-nginx:latest라는 이름의 Docker 이미지를 생성하는 예제
- -t의 t는 태그라는 뜻
docker run -d -p 80:80 my-nginx:latest
위에서 생성한 docker이미지를 cli를사용하여 컨테이너로 실행하는 명령어
my-nginx:latest 이미지를 기반으로 컨테이너를 실행하고, 80번 포트를 호스트 머신의 80번 포트로 맵핑하는 예제
docker stop my-nginx
my-nginx라는 이름의 컨테이너를 종료
Docker 이미지는 로컬에저장해서 볼수도있지만 Docker 레지스트리를 사용하여 다른 사용자와 공유할 수 있어요. Docker 레지스트리를 사용하면 Docker 이미지를 저장하고 공유할 수 있고, 다른 사용자가 이미지를 다운로드하여 사용할 수 있어요.
✔️ Dockerfile 의 명령어에 대해 알아봅니다.
- Dockerfile 명령어
- FROM: 베이스 이미지를 지정
- ex) FROM ubuntu:22.04
- MAINTAINER: Dockerfile을 작성한 사람의 정보를 입력
- ex) MAINTAINER naebaecaem <nbcamp@spartacoding.co>
- LABEL: 이미지에 메타데이터를 추가
- ex) LABEL purpose='nginx test'
- RUN: 이미지를 생성하는 동안 실행할 명령어를 입력
- 사용자를 지정하지 않은 상태라면, root 로 실행
- ex) RUN apt update && apt upgrade -y && apt autoremove && apt autoclean
- ex) RUN apt install openjdk-21-jdk
- CMD: 컨테이너를 생성할 때, 실행할 명령어를 입력
- 컨테이너를 생성할 때만 실행
- 추가적인 명령어에 따라 설정한 해당 명령어 수정 가능
- ex) CMD ["nginx", "-g", "daemon off;"]
- ENTRYPOINT: 컨테이너 시작할 때, 실행할 명령어를 입력
- 컨테이너를 시작할 때마다 실행
- 추가적인 명령어 존재 여부와 상관 없이 무조건 실행
- ex) ENTRYPOINT ["npm", "start"]
- ENV: 환경 변수를 설정
- 이미지 안에 각종 환경 변수를 지정
- ex) ENV STAGE staging
- ex) ENV JAVA_HOME /usr/lib/jvm/java-8-oracle
- WORKDIR: 작업 디렉터리를 지정
- ex) WORKDIR /app
- 디렉터리가 없으면 만들어서 지정
- COPY: 파일을 복사
- 호스트의 파일이나 디렉토리를 이미지 안에 복사
- Docker Context, 즉, 빌드 작업 디렉토리 내 파일만 복사 가능
- ex) COPY index.html /usr/share/nginx/html
- USER: 사용자를 설정
- Container의 기본 사용자는 root 에요. root 권한이 필요 없는 application이라면 다른 사용자로 변경하여 사용해야 해요.
- RUN ["useradd", "user"] USER user RUN ["/bin/bash, "-c", "ls"]
- EXPOSE: 컨테이너에서 노출할 포트를 지정
- ex) EXPOSE 80
- ex) EXPOSE 443
- FROM: 베이스 이미지를 지정
▶️ FastAPI 앱을 실행하는 예제