1. Docker란?
Docker는 애플리케이션을 컨테이너라는 가벼운, 이식 가능한 실행 환경으로 패키징하는 플랫폼이다. Docker를 사용하면 애플리케이션과 그 의존성을 한 번에 패키징하여 어디서나 동일하게 실행할 수 있다.
주요 개념
- 이미지 (Image): 애플리케이션과 필요한 모든 것을 포함하는 읽기 전용 템플릿이다. Dockerfile을 기반으로 빌드된다.
- 컨테이너 (Container): 이미지의 실행 가능한 인스턴스이다. 컨테이너는 격리된 환경에서 애플리케이션을 실행한다.
- Dockerfile: 이미지를 빌드하기 위한 스크립트이다. 애플리케이션이 빌드되고 컨테이너에서 실행되는 방법을 정의한다.
- Docker Hub: Docker 이미지를 저장하고 공유할 수 있는 레지스트리이다.
2. 컨테이너란?
컨테이너는 애플리케이션과 그 종속성을 포함하는 독립된 실행 환경이다. 컨테이너는 호스트 시스템의 커널을 공유하면서도 독립된 파일 시스템, 네트워크, 프로세스 공간을 갖는다.
장점
- 일관성: 개발, 테스트, 배포 환경에서 동일한 환경을 보장한다.
- 이식성: 어디서나 동일하게 실행할 수 있다. (예: 개발자 로컬 머신, 테스트 서버, 프로덕션 환경)
- 격리: 애플리케이션 간의 의존성 충돌을 방지하고, 보안성을 향상시킨다.
- 경량: 가상 머신보다 자원 사용이 적고, 빠르게 시작할 수 있다.
DockerFile
# 베이스 이미지 지정
FROM node:14
# 작업 디렉토리 설정
WORKDIR /app
# 의존성 파일 복사 및 설치
COPY package*.json ./
RUN npm install
# 애플리케이션 코드 복사
COPY . .
# 애플리케이션 포트 노출
EXPOSE 80
# 애플리케이션 실행 명령어
CMD ["node", "server.js"]
docker image 명렁어
# Docker 이미지 빌드
docker build -t my-node-app .
#실행 중 컨테이너 확인
docker ps -a
=> 컨테이너의 image 이름 확인
# Docker 컨테이너 실행
docker run -d -p 3000:80 image
#중단
docker stop 이미지이름
docker detach
개념
컨테이너의 표준 입력, 출력, 오류 스트림에서 분리하는 것을 의미한다. 분리 모드에서 실행된 컨테이너는 백그라운드에서 계속 실행된다.
사용법
- 백그라운드에서 컨테이너 실행: -d 옵션을 사용하여 컨테이너를 백그라운드에서 실행한다.
docker run -d --name my-container my-image
docker run -d -p 80:80 --name my-nginx nginx
이 명령어는 Nginx 컨테이너를 백그라운드에서 실행하고, 80번 포트를 호스트의 80번 포트에 매핑한다.
docker attach
개념
이미 실행 중인 컨테이너의 표준 입력, 출력, 오류 스트림에 다시 연결하는 것을 의미한다. docker attach 명령어를 사용하면 분리 모드에서 실행 중인 컨테이너에 연결하여 해당 컨테이너의 출력을 볼 수 있다.
사용법
- 실행 중인 컨테이너에 연결: 컨테이너의 이름 또는 ID를 사용하여 연결한다.
docker attach my-container
기본 로그 확인
docker logs <컨테이너 이름 또는 ID>
docker logs -f my-container
-f 또는 --follow: 실시간으로 로그 출력을 팔로우한다.
docker logs --tail 100 my-container
--tail: 마지막 n개의 로그 라인만 표시한다.
docker logs -t my-container
-t 또는 --timestamps: 로그에 타임스탬프를 추가한다.
docker logs --since "2023-01-01T00:00:00" my-container
docker logs --since 1h my-container
--since 및 --until: 특정 시간 범위의 로그를 표시한다.
ISO 8601 형식이나 상대적 시간(예: 1h for one hour)을 사용할 수 있다.
댓글