본문 바로가기
React/Next.js

[NextJS] Ubuntu Docker(도커) 이미지 빌드·컨테이너 실행 하기

by 검은냥냥이 2023. 6. 1.

간단 설명

목록 설명
Dockerfile Dockerfile은 도커 이미지를 빌드하기 위한 빌드 지시사항들을 포함한 텍스트 파일입니다.
Dockerfile은 컨테이너 이미지를 구성하는 데 필요한 모든 단계와 명령을 정의합니다.
.dockerignore 도커 빌드 과정에서 제외할 파일과 디렉토리를 지정하는 파일입니다. Dockerfile을 작성할 때 모든 파일이나 디렉토리를 이미지에 포함시키는 것은 필요하지 않을 수 있습니다. 특정 파일이나 디렉토리를 이미지 빌드 과정에서 제외할 수 있습니다.
docker-compose 여러 컨테이너로 구성된 멀티 컨테이너 애플리케이션을 정의하고 구성하기 위해 사용되는 도구입니다.
애플리케이션의 서비스, 네트워크, 볼륨, 환경 변수 등을 정의할 수 있습니다.

 

Docker 설치하기

sudo apt update
sudo apt install apt-transport-https ca-certificates curl gnupg-agent software-properties-common

종속성 설치

 

curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -
sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable"

리포지토리 GPG키를 가져와서 시스템에 등록합니다.

 

sudo apt update
sudo apt install docker-ce docker-ce-cli containerd.io

Docker 설치하기

 

apt list -a docker-ce

설치 가능한 버전 확인

 

sudo apt install docker-ce=<VERSION> docker-ce-cli=<VERSION> containerd.io

특정 버전 입력하여 설치하기

 

# 서비스 상태
sudo service docker status
# 서비스 시작
sudo service docker start
# 서비스 재시작
sudo service docker restart
# 서비스 중단
sudo service docker stop

서비스 상태 명령어

 

Docker 완전삭제

docker container stop $(docker container ls -aq)
docker system prune -a --volumes

도커 이미지, 볼륨 등 중단 및 제거

 

# Docker 삭제
sudo apt purge -y docker-engine docker docker.io docker-ce docker-ce-cli
sudo apt autoremove -y --purge docker-engine docker docker.io docker-ce

# 잔여 폴더 및 파일 삭제
sudo rm -rf /var/lib/docker /etc/docker
sudo rm /etc/apparmor.d/docker
sudo groupdel docker
sudo rm -rf /var/run/docker.sock

Docker 제거

 

Dockerfile 파일 만들기

Dockerfile

위 사진처럼 프로젝트 폴더 내부에 "Dockerfile" 이름으로 파일을 만들면 됩니다.

 

# Node Stable 18.16.0 경량화(alpine) 버전
FROM node:18.16.0-alpine

# 디렉토리 지정
WORKDIR /home/ubuntu/inepung-nextjs-typescript-frontend2

# 의존성 설치
# package.json, yarn.lock 복사
COPY package.json ./
COPY yarn.lock ./

# 패키지 설치
RUN yarn

# 필요한 모든 파일을 복사
COPY . .

# NextJS 빌드
RUN yarn build

# 컨테이너 포트 3000 설정
EXPOSE 3000

# 실행
CMD [ "yarn", "start" ]

위 내용을 넣어 저장해줍니다. 필요한 경우 부분 수정하여 사용하시면 됩니다.

 

.dockerignore

"Dockerfile"과 같이 내부에 ".dockerignore" 파일을 만들어줍니다.

 

node_modules
.next

패키지를 설치하기 때문에 위 폴더를 예외처리 합니다.

 

Docker Image 생성

docker build -t test .

"-t" 태그 옵션으로 "test" 이미지 이름을 주고 마지막 "." 점 표시는 경로를 의미합니다. 

 

docker images

docker images

이미지 리스트 확인

 

자주사용하는 명령어

명령어 설명
docker images 현재 시스템에 저장된 도커 이미지 목록을 표시합니다.
이미지의 REPOSITORY(저장소), TAG(태그), IMAGE ID(이미지 식별자), CREATED(생성일자), SIZE(크기) 등의 정보를 제공합니다.
docker pull 이미지명:태그 도커 허브나 도커 레지스트리에서 특정 이미지를 다운로드합니다.
이미지명과 태그를 지정하여 원하는 이미지를 가져올 수 있습니다.
docker build -t 이미지명:태그 . Dockerfile을 기반으로 도커 이미지를 빌드합니다.
-t 옵션을 사용하여 이미지에 이름과 태그를 지정합니다.
"." 점은 현재 디렉토리에 있는 Dockerfile을 사용한다는 의미입니다.
docker push 이미지명:태그 로컬에서 빌드한 도커 이미지를 도커 레지스트리에 업로드합니다.
이미지명과 태그를 지정하여 업로드할 이미지를 지정합니다.
docker tag 이전이미지명:태그 새이미지명:새태그 기존의 이미지에 새로운 이름과 태그를 지정하여 이미지를 태깅합니다.
이미지를 다른 태그로 복사하거나, 이미지에 다른 이름과 태그를 부여할 때 사용합니다.
docker rmi 이미지명:태그 특정 도커 이미지를 삭제합니다.
이미지명과 태그를 지정하여 삭제할 이미지를 선택합니다.
이미지를 삭제하기 전에 해당 이미지를 사용하는 모든 컨테이너를 중지(stop)해야 합니다.
docker save -o 저장할파일명 이미지명:태그 도커 이미지를 파일로 저장합니다.
이미지명과 태그를 지정하여 저장할 이미지를 선택합니다.
docker load -i 파일명 저장된 도커 이미지 파일을 로드하여 시스템에 이미지를 추가합니다.
파일명은 docker save로 저장한 이미지 파일입니다.

 

Docker Run 하기

docker run -d -p 3000:3000 test

Docker 실행하기 "-d"는 백그라운드 실행입니다. 해당 명령어가 없으면 실행 로그가 화면 보이고 이탈하면 실행이 꺼져서 유지가 되지 않습니다. 직접적으로 확인할때 사용하시면 될것 같습니다. "-p"는 포트를 지정하여 컨테이너간의 포트를 매핑합니다. "test"는 실행 컨테이너 이름 입니다.

 

자주사용하는 명령어

명령어 설명
-d 또는 --detach 컨테이너를 백그라운드에서 실행합니다.
컨테이너를 실행한 후 바로 프롬프트로 돌아갑니다.
-p 호스트포트:컨테이네포트 또는 --publish 호스트포트:컨테이네포트 호스트와 컨테이너 간의 포트 매핑을 설정합니다.
호스트의 특정 포트와 컨테이너의 포트를 연결하여 외부에서 컨테이너에 접근할 수 있도록 합니다.
-v 호스트경로:컨테이네경로 또는 --volume 호스트경로:컨테이네경로 호스트와 컨테이너 간의 볼륨 매핑을 설정합니다.
호스트의 특정 경로와 컨테이너의 경로를 연결하여 데이터를 주고받을 수 있도록 합니다.
--name 컨테이너에 이름을 지정합니다.
사용자 정의 이름을 지정하여 컨테이너를 식별할 수 있습니다.
-e 또는 --env 컨테이너에 환경 변수를 설정합니다.
컨테이너 내부에서 사용할 수 있는 환경 변수를 지정합니다.
--network 컨테이너가 속할 네트워크를 지정합니다.
여러 개의 컨테이너가 동일한 네트워크에 속해 있으면 서로 통신이 가능합니다.
--rm 컨테이너 실행이 종료되면 자동으로 컨테이너를 제거합니다.
컨테이너의 임시 사용을 위해 유용합니다.
--restart 컨테이너의 재시작 정책을 지정합니다.
컨테이너가 비정상적으로 종료되었을 때 자동으로 재시작하도록 설정할 수 있습니다.
-it 컨테이너와 상호 작용하기 위해 터미널을 사용합니다.
컨테이너의 표준 입력(STDIN)을 열고, 터미널 인터페이스를 제공합니다.

 

Docker-Compose 설치하기

sudo curl -sSL "https://github.com/docker/compose/releases/download/v2.15.1/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
 

Releases · docker/compose

Define and run multi-container applications with Docker - docker/compose

github.com

Docker Compose 설치하기

 

chmod +x /usr/local/bin/docker-compose

권한 부여

 

docker-compose --version

버전 확인

 

Docker-Compose 사용하기

version: '3.9'
services:
  web:
    container_name: 'test'
    restart: 'on-failure'
    build:
      context: .
      dockerfile: Dockerfile
    command: yarn start
    volumes:
      - '.:/app'
      - '/home/ubuntu/test/node_modules'
      - '/home/ubuntu/test/.next'
    ports:
      - '3000:3000'
    environment:
      NODE_ENV: production

docker-compose.yml

내부 프로젝트 폴더에 "docker-compose.yml" 파일 만든 후 내용 넣기

 

COMPOSE_DOCKER_CLI_BUILD=1 DOCKER_BUILDKIT=1 docker-compose build

Docker-Compose 이미지 생성

 

docker-compose up -d

Docker-Compose 실행 "-d"는 백그라운드 모드 입니다.

 

자주사용하는 명령어

명령어 설명
docker-compose up 컨테이너 실행 및 빌드

-d 또는 --detach: 백그라운드에서 컨테이너를 실행합니다.
--build: 이미지를 빌드하고 컨테이너를 실행합니다.
--force-recreate: 컨테이너를 강제로 다시 생성합니다.
docker-compose down 컨테이너 정지 및 삭제

-v 또는 --volumes: 컨테이너와 관련된 볼륨도 함께 삭제합니다.
--rmi: 컨테이너에 대한 이미지도 함께 삭제합니다.
docker-compose start 정지된 컨테이너 시작

-d 또는 --detach: 백그라운드에서 컨테이너를 시작합니다.
docker-compose stop 실행 중인 컨테이너 정지

-t 또는 --timeout: 컨테이너가 정지되기까지 대기하는 시간을 지정합니다.
docker-compose restart 컨테이너 재시작

-t 또는 --timeout: 컨테이너가 재시작되기까지 대기하는 시간을 지정합니다.
docker-compose pause 실행 중인 컨테이너 일시 정지 컨테이너의 실행을 일시적으로 중지합니다.
docker-compose unpause 일시 정지된 컨테이너 재개 일시 정지된 컨테이너의 실행을 재개합니다.
728x90
사업자 정보 표시
레플라 | 홍대기 | 경기도 부천시 부일로 519 화신오피스텔 1404호 | 사업자 등록번호 : 726-04-01977 | TEL : 070-8800-6071 | Mail : support@reafla.co.kr | 통신판매신고번호 : 호 | 사이버몰의 이용약관 바로가기