🛠️ Tools & IDE/Docker

[Docker] Dockerfile 사용, Docker Image 생성 및 Container 실행

koko1177 2025. 2. 15. 00:55
반응형

 

 

1. Dockerfile 작성

이 게시글에선 test.dockerfile을 예시로 사용

 

 

 

2. Docker 이미지 빌드 (생성)

    2.1 터미널 (or 명령 프롬프트)에서 test.dockerfile 이 있는 디렉토리로 이동

 

 

    2.2 명령어 실행

# Dockerfile 로 Docker Image 생성
# Dockerfile 파일이 있는 디렉토리 기준
# 마지막의 . 이 상대주소
# -t testdk_i : 생성될 이미지 이름 지정
# -f test.dockerfile : 사용할 Dockerfile 이름 지정
docker build -t testdk_i -f test.dockerfile .

 

 

 

3. Docker 컨테이너 실행

# -d : 백그라운드에서 컨테이너 실행
# -p 3389:3389 : Host의 포트 3389를 컨테이너의 포트 3389와 매핑
# --name testdk_c : 컨테이너 이름 지정
docker run -d -p 3389:3389 --name testdk_c testdk_i

 

 

 

4. Docker Compose를 사용하여 실행 (선택 사항)

 

    4.1 docker-compose.yml 파일 생성

# docker-compose.yml
# 이미지 및 컨테이너 이름 소문자로 생성

# 여러 개의 서비스(컨테이너) 정의 섹션
services:
  testdk_i:	# Docker 생성 이미지
    build:	# docker 이미지 빌드
      context: .	  # dockerfile 위치한 경로 지정
     #context: ./a/b      # b 폴더에 있는 dockerfile 지정 시
      dockerfile: test.dockerfile	# 사용할 Dockerfile 지정
    ports:	# 포트 지정
      # Host의 포트 3389, 컨테이너의 포트 3389에 매핑
      - "3389:3389"
    container_name: testdk_c	# 생성될 컨테이너 지정

 

 

    4.2 docker-compose 파일 실행

# Docker Compose 실행
# 여러 개의 Docker 컨테이너를 쉽게 관리 및 실행하는 명령어
# docker-compose 파일이 있는 디렉토리 기준
# 백그라운드에서 데몬으로 실행되도록 하려면 : -d 옵션

# docker-compose.yml : 파일을 읽고 정의된 모든 서비스 실행
# -d : 백그라운드 실행
docker-compose up -d

 

 

 

5. 컨테이너 실행 후 접근 (원격 데스크톱 연결(RDP) 사용)

 

    5.1 Windows의 "원격 데스크톱 연결(MSTSC) or 다른 RDP 클라이언트 실행

 

    5.2 주소에 localhost:3389 입력 후 접속

 

 

    5.3 로그인 화면에서 dockerfile에서 생성한 사용자 정보로 로그인

 

 

 

6. 로그인 실패 시 확인 방법

    6-1. 로그 파일 확인

# 컨테이너 내부 쉘에 접속
docker exec -it testdk_c /bin/bash

# /var/log/xrdp.log 또는 /var/log/xrdp-sesman.log 파일 확인하여 문제 파악
cat /var/log/xrdp.log
cat /var/log/xrdp-sesman.log

 

 

 

7. Error 해결

    7-1.기존 실행되고 있던 컨테이너를 중지하지 않고 재실행했을 때 나오는 에러

Error 메시지 (컨테이너명 충돌 error)

 

    7-2. 해결 방법 (1)

        1) 기존의 Docker 컨테이너 중지 및 삭제

docker stop testdk_c   # 컨테이너 중지
docker rm testdk_c     # 컨테이너 삭제

 

        2) Docker 컨테이너 재실행

docker run -d -p 3389:3389 --name testdk_c testdk_i

 

 

    7-3. 해결 방법 (2)

        1) 새로운 이름의 Docker 컨테이너 실행 (기존 Docker 컨테이너 희망할 때)

# --name 옵션을 변경 (testdk_c -> testdk_c2)
docker run -d -p 3389:3389 --name testdk_c2 testdk_i

 

        2) 실행 중인 전체 Docker 컨테이너 확인

docker ps -a

 

반응형