Docker에서는 인프라의 구성 관리를 Dockerfile 로 기술한다.
Dockerfile에서는 베이스가 되는 이미지에 각종 미들웨어를 설치 및 설정하고, 개발한 애플리케이션의 실행 모듈을 전개하기 위한
애플리케이션의 실행 기반의 모든 구성 정보를 기술한다.
Dockerfile은 텍스트 형식의 파일로, 에디터 등을 사용하여 작성한다.
확장자는 필요 없으며, "Dockerfile" 이라는 이름의 파일에 인프라의 구성정보를 기술한다.
| 명령 | 설명 |
| FROM | 베이스 이미지 지정 |
| RUN | 명령 실행 |
| CMD | 컨테이너 실행 명령 |
| LABEL | 라벨 설정 |
| EXPOSE | 포트 익스포트 |
| ENV | 환경변수 |
| ADD | 파일/디렉토리 추가 |
| COPY | 파일복사 |
| ENTRYPOINT | 컨테이너 실행 명령 |
| VOLUME | 볼륨 마운트 |
| USER | 사용자 지정 |
| WORKDIR | 작업 디렉토리 |
| ARG | Dockerfile 안의 변수 |
| ONBUILD | 빌드 완료 후 실행되는 명령 |
| STOPSIGNAL | 시스템 콜 시그널 설정 |
| HEALTHCHECK | 컨테이너의 헬스 체크 |
| SHELL | 기본 쉘 설정 |
주석은 맨앞에 # 을 붙여서 사용한다.
# 주석입니다
명령 인수
# 주석입니다
명령 인수 #역시 주석입니다
Dockerfile 작성
# 베이스 이미지 설정
FROM [이미지명]
FROM [이미지명] : [태그명]
FROM [이미지명] @ [다이제스트]
# ex
FROM centos:centos7
이렇게 Dockerfile에 작성할 시 베이스 이미지는 centos7 이다.
이미지명이나 태그명은 작성자가 임의의 값을 붙일 수 있기 때문에 Dockerfile을 수정해도 똑같은 이름으로 몇 번이든 이미지를 만들 수 있다.
이미지를 고유하게 특정할 때는 다이제스트를 이용한다. 다이제스트는 Docker Hub에 업로드하면 자동으로 부여된 식별자다.
Dockerfile을 이용해 Docker 이미지 만들기
docker build -t [생성할 이미지] : [태그명] [Dockerfile의 위치](상대경로 / 절대경로가능)
#예시
# Dockerfile
FROM centos:centos7
# sample1.0 라는 이름으로 도커이미지 생성
docker build -t sample:1.0 .
-> 베이스이미지는 centos7이면서, sample1.0 이름을 가진 이미지 생성된다.
# 이미지 생성 최초에는 Docker리포지토리에서 베이스이미지를 다운받기에 시간이 소요되지만,
# 두번째부터는 다운을 받지않는다. (베이스 이미지가 로컬에 있을 시 다운받지 않음)
docker build -t sample:2.0 .
# 우분투 베이스 이미지
FROM ubuntu:latest
# Nginx 설치
RUN apt-get update && apt-get install -y -q nginx
# 파일 복사
COPY index.html .
# Nginx 실행
CMD ["nginx", "-g", "daemon off;"]
Next.js 이미지를 만들고 도커 컨테이너화 시켜보기
1. create-next-app
2. touch Dockerfile
FROM node:16.16.0
WORKDIR /app
COPY package.json .
COPY . /app/
RUN rm package-lock.json && yarn install
EXPOSE 3000
CMD [ "yarn", "dev" ]
3.
docker build -t next-image .
4.
# 이미지 컨테이너 실행 명령어
docker run -d -p hostPort:containerPort --name <container-name> <image>
# -d 옵션은 detached로서 컨테이너를 백그라운드로 실행합니다.
# -p 옵션은 호스트 포트와 컨테이너 포트를 매핑합니다.
# hostPort는 호스트에서 노출되는 포트이며, containerPort는 컨테이너 내부의 포트
# --name 옵션은 컨테이너의 이름을 설정
# <container-name>은 설정하려는 컨테이너의 이름
# <image>는 실행하려는 이미지의 이름
# 예시
docker run -d -p 3010:3000 --name next-app next-image
# -d 옵션을 사용하지 않아 컨테이너가 백그라운드에서 실행되지 않았고, 현재 터미널 세션이 컨테이너와 연결되어 있을경우
# 명령어를 사용하여 현재 실행 중인 컨테이너 ID를 확인
docker ps
# 해당 컨테이너 중지
docker stop <CONTAINER ID>
'Docker' 카테고리의 다른 글
| Docker 웹서버 실행 / Docker 이미지 다운로드 명령어 (0) | 2023.04.06 |
|---|---|
| Docker 설치와 작동 확인 (0) | 2023.04.05 |