728x90
반응형
이번시간은 docker 컨테이너에 대해 공부해 보겠습니다.

도커 컨테이너(Docker Container)의 개념 및 주요 명령어 활용
1. 컨테이너(Container) 개요
- 정의: 도커 컨테이너는 도커 이미지(Image)를 기반으로 생성된 격리된 실행 환경(인스턴스)입니다. 이미지가 읽기 전용(Read-only)의 정적 파일이라면, 컨테이너는 이를 메모리에 적재하여 실행 가능한 상태로 만든 스냅샷(Snapshot)입니다.
- 특징: 호스트 OS의 커널을 공유하므로 가상 머신(VM)보다 구조가 경량화되어 있으며, 빠르고 독립적인 애플리케이션 구동이 가능합니다.
2. 도커 필수 명령어 및 옵션 분석


실습에 앞서 컨테이너 구동 시 자주 사용되는 docker run 옵션의 기능은 다음과 같습니다.
- -i (interactive): 표준 입력(STDIN)을 유지하여 컨테이너와 상호작용합니다.
- -t (tty): 가상 터미널을 할당하여 CLI 셸을 사용할 수 있게 합니다. 대부분 -it 형태로 결합하여 사용합니다.
- -d (detach): 터미널을 점유하지 않고 컨테이너를 백그라운드 모드로 실행합니다.
- -p (publish): 호스트 PC의 포트와 컨테이너 내부 포트를 바인딩(매핑)합니다. (예: 8080:80은 호스트 8080번 포트를 컨테이너 80번 포트로 연결)
- --name: 생성되는 컨테이너를 식별할 고유 이름을 지정합니다.
- --env (또는 -e): 컨테이너 내부에 전달할 환경 변수를 설정합니다.
3. 환경별 컨테이너 구성 실습
3.1. Ubuntu 컨테이너 구성 및 접속
가장 기본적인 리눅스 환경인 Ubuntu를 컨테이너로 구축합니다.
# Ubuntu 이미지를 기반으로 백그라운드에서 컨테이너 실행
docker run -itd --name my-ubuntu ubuntu
# 현재 가동 중인 컨테이너 목록 확인
docker container ps
- docker container ps (또는 docker ps) 명령을 통해 컨테이너 ID, 사용된 이미지, 작동 상태(STATUS), 포트 매핑 정보 등을 확인할 수 있습니다.
# 구동 중인 Ubuntu 컨테이너의 내부 셸(bash)에 접속
docker exec -it my-ubuntu bash
root@5779053f067f:/# ls
bin boot dev etc home lib lib64 media mnt opt proc root run sbin srv sys tmp usr var
root@5779053f067f:/# exit
- 접속 후 일반 리눅스와 동일한 터미널 조작이 가능하며, exit를 입력하면 컨테이너에서 로그아웃됩니다. 도커 데스크톱 GUI 환경에서 해당 컨테이너의 'exec' 탭에 진입하는 것과 완전히 동일한 동작입니다.

3.2. Nginx 웹 서버 구성
웹 서버용 Nginx 컨테이너를 실행하고 설정 파일을 확인합니다.
# Nginx 컨테이너 실행 (호스트 80포트와 컨테이너 80포트 바인딩)
docker run -d -p 80:80 --name my-nginx nginx
# 외부에서 Nginx 컨테이너의 실행 로그 확인
docker logs my-nginx
# 컨테이너 내부 셸(sh) 진입
docker exec -it my-nginx sh
cat /etc/nginx/conf.d/default.conf
- Ubuntu와 달리 Nginx 오피셜 이미지는 경량화를 위해 sh 셸을 기본으로 제공하는 경우가 많습니다. 내부에서 Nginx 설정 파일을 읽고 수정하면, 향후 FastAPI 등 백엔드 시스템과의 리버스 프록시(Reverse Proxy) 연동 작업을 수행할 수 있습니다.

3.3. MySQL 데이터베이스 구성
데이터베이스 컨테이너는 구동 시 루트(root) 계정 비밀번호 등의 초기 설정값을 환경변수로 넘겨주어야 정상 가동됩니다.
# 환경변수(--env)를 지정하여 MySQL 컨테이너 가동
docker run -d -p 3306:3306 --name my-mysql \
--env MYSQL_ROOT_PASSWORD=1234 \
--env MYSQL_USER=ai \
--env MYSQL_PASSWORD=1234 \
mysql
# MySQL 컨테이너 내부 접속 후 DB 로그인
docker exec -it my-mysql bash
bash-5.1# mysql -u root -p
# 비밀번호 1234 입력 후 접속
- 컨테이너 터미널 내에서 직접 SQL 쿼리를 수행할 수 있습니다. 또한, 호스트 PC에 설치된 외부 GUI 데이터베이스 관리 도구(예: DBeaver, MySQL Workbench 등)를 통해 127.0.0.1:3306 주소로 접근하여 원격 제어하는 것도 가능합니다.
3.4. FastAPI (Python) 애플리케이션 환경 구성
FastAPI 기반의 Web Application Service(WAS)를 구축하기 위해 Python 베이스 이미지를 활용합니다.
# Python 기반 컨테이너 실행 (8000번 포트 개방)
docker run -itd -p 8000:8000 --name my-fastapi python
# 컨테이너 진입 후 Python 버전 확인
docker exec -it my-fastapi bash
root@3ca65db952b9:/# python -V
Python 3.13.0
- 기본 Python 컨테이너를 구동한 후 fastapi, uvicorn 등 필요한 패키지를 설치하고 백엔드 소스 코드를 세팅하는 커스텀(Custom) 과정을 진행할 수 있습니다. 작업이 완료된 컨테이너는 다시 이미지로 빌드하여 저장소에 업로드할 수 있습니다.
반응형
'코딩 개발 > Docker' 카테고리의 다른 글
| Dockerfile 기본 활용법 - FROM (0) | 2026.08.06 |
|---|---|
| Docker - Volume & Mount (볼륨, 마운) (0) | 2026.08.05 |
| Docker - Network 네트워크 (0) | 2026.08.04 |
| Docker - Image 이미지 (0) | 2026.07.31 |
| Docker - 개요, 구조, 설치, 기본 명령어 (0) | 2026.07.30 |