Docker
- 컨테이너 기반의 오픈소스 가상화 플랫폼
- 다양한 프로그램, 실행환경을 컨테이너로 추상화하고, 동일한 인터페이스를 제공하여 프로그램의 배포 및 관리를 더 간결하게 할 수 있음
- 기존의 OS 전체를 가상화하던 방식에서 벗어남으로써 overhead를 줄일 수 있음
Docker Image
- Docker Image는 컨테이너 생성(실행)에 필요한 실행파일, 설정 값 들을 가지고 있음
- 하나의 이미지로 여러 컨테이너를 생성할 수 있으며 컨테이너가 삭제되더라도 이미지는 변하지 않고 그대로 남아 있음
- 이미지는 상태 값을 가지지 않고 변하지 않음
// docker build -t [생성할_이미지_이름] [재료_폴더_경로]
$ docker build -t ubuntu:18.04 .
Docker Container
Docker Image를 실행한 상태로 응용프로그램의 종속성과 함께 응용프로그램 자체를 패키징(캡슐화)하여 격리된 공간에서 프로세스를 동작시키는 기술
Docker Hub
도커에서 제공하는 기본 이미지 저장소로 ubuntu, centos 등의 베이스 이미지와 java, python 등의 공식 이미지가 저장되어 있음
Dockerfile
- 컨테이너에 설치해야하는 패키지, 소스코드, 명령어, 환경변수설정 등을 기록한 파일
- Dockerfile을 build하면 자동으로 이미지가 생성됨
- Dockerfile을 이용하여 빌드, 배포를 쉽게할 수 있음
- FROM: 베이스 이미지 지정
- LABEL: 이미지의 라벨 지정 (메타데이터)
- RUN: 이미지를 지정하면서 실행할 명령 지정
- ADD: 이미지 생성 시 파일 추가
- EXPOSE: 컨테이너 포트 지정
- COPY: 이미지 생성 시 파일 복사
- WORKDIR: 컨테이너 작업 디렉토리 지정
- CMD: 컨테이너의 어플 지정 (컨테이너 실행 , 하나의 CMD만 실행 가능)
# FROM <image>[:<tag>] [AS <name>]
FROM ubuntu:18.04 # 생성할 이미지의 베이스가 되는 이미지 (우분투)
LABEL "purpose"="practice" # 메타데이터 표시
# RUN <command>
RUN apt-get update #운영체제에서 사용 가능한 패키지들과 그 버전에 대한 정보를 업데이트 (=설치가능한 리스트 업데이트)
RUN apt-get install apache2 -y # 설치한 패키지들을 최신 버전으로 업그레이드 / 아파치 설치
ADD test.html /var/www/html # 호스트에 있는 파일을 추가
# WORKDIR /path/to/workdir
WORKDIR /var/www/html # 작업공간 이동(=cd)
RUN ["/bin/bash", "-c", "echo hello > test2.html"] # test2.html 파일생성
# EXPOSE <port>/<protocol> (default protocol: TCP)
EXPOSE 80 # 포트 80번 노출 지정
# CMD <command>
CMD apachectl -DFOREGROUND # 컨테이너 생성시 시작명령어
Docker 기본 명령어
Docker pull
Docker image repository에서 도커 이미지를 가져오는 명령어 (태그를 지정해서 가져올 수 있음)
$ docker pull ubuntu:18.04
Docker images
로컬에 존재하는 도커 이미지 리스트를 출력하는 명령어
$ docker images
Docker run
도커 컨테이너를 실행시키는 명령어 (exit 입력하고 나올 수 있음)
// -it : 컨테이너를 실행시킴과 동시에 interactive한 terminal로 접속
// --name : 컨테이너 id 대신 구분하기 쉽도록 지어주는 이름
$ docker run -it --name ubuntu ubuntu:18.04
docker option
--name [컨테이너 이름] : 컨테이너 이름을 설정
-d (--detach): 컨테이너를 백그라운드 모드로 실행
-p (--publish): 호스트와 컨테이너 간의 포트 매핑 설정. '-p 호스트_포트:컨테이너_포트'와 같은 형식으로 사용되며, 호스트의 특정 포트를 컨테이너 내부의 포트와 연결하여 외부와 컨테이너 간 통신을 가능하게 함.
-v (--volume): 호스트와 컨테이너 간의 볼륨 매핑 설정. '-v 호스트_경로:컨테이너_경로'와 같은 형식으로 사용되며, 호스트의 경로와 컨테이너의 경로를 연결하여 데이터를 공유하거나 저장할 수 있게 함.
-e (--env): 컨테이너 내부에서 사용할 환경 변수 설정. '-e 변수=값' 형식으로 사용하여 컨테이너 내부의 프로세스에서 환경 변수를 사용할 수 있음.
-it (--interactive, --tty): 컨테이너와 상호 작용하는 대화형 모드로 컨테이너 내부의 터미널에 접속
Docker ps
현재 실행 중인 도커 컨테이너 리스트를 출력하는 명령어
$ docker ps
$ docker ps -a
Docker exec
도커 컨테이너 내부에서 명령을 내리거나, 내부로 접속하는 명령어
$ docker start
$ docker exec -it ubuntu bin/bash
Docker logs
도커 컨테이너의 로그를 확인하는 명령어
$ docker logs ubuntu
Docker stop
실행 중인 도커 컨테이너를 중단 시키는 명령어
$ docker stop ubuntu
Docker rm
도커 컨테이너를 삭제하는 명령어
$ docker rm ubuntu
Docker rmi
도커 이미지를 삭제하는 명령어
$ docker rmi ubuntu
'DevOps' 카테고리의 다른 글
[Jenkins] Agent Node 추가 (0) | 2024.03.20 |
---|---|
[Jenkins] Jenkins 정리 (0) | 2024.02.29 |
CI/CD(지속적 통합/배포) 정리 (0) | 2024.02.28 |
[Git] cherry-pick (0) | 2023.12.01 |
[Git] 커밋 메시지 템플릿 설정 (0) | 2023.11.30 |