1. 도커(Docker)

1) 배경

  • 컨테이너 기반의 가상화 시스템
  • 도커는 리눅스 컨테이너(LXC)라는 개념으로부터 시작된 기술
  • 도커는 리눅스 커널에 LXC 기술을 사용해, 리눅스 컨테이너를 만들고 별도로 시스템 설정 및 프로그램을 실행할 수 있도록 하는 기술
  • 최근에는 LXC 기술이 아닌 별도 컨테이너 기술을 구현하여 사용하고 있음
  • 도커는 필요한 프로그램들을 감싸고 있는 기술

🔔 LXC(LinuX Containers)
- 단일 컴퓨팅 시스템에 설치된 리눅스 운영체제 상에서, 분리된 별도의 리눅스 시스템을 운영할 수 있는 리눅스 커널 기술
- 운영체제 레벨에서 자원(CPU, 메모리 등)을 분리, 할당하여, 마치 별도의 시스템처럼 사용할 수 있도록 하는 기술

2) 주요 구성 요소

a. Docker Engine

  • 도커는 서버/클라이언트 구조로 이루어짐
    • 서버는 데몬 프로세스(daemon process) 형태로 동작
    • 클라이언트는 커맨드 형태로 동작
  • 도커 커맨드가 도커 데몬 프로세스에 명령을 요청하기 위해, 프로세스간 통신 기법이 필요한데, 도커는 이를 위해 Rest API를 사용함
    • 예를 들어 docker ps라고 명령하면 내부에서는 http GET’docker daemon process’/api-version/containers 라고 Rest API를 호출

b. Docker Image

  • 도커 컨테이너를 생성하기 위한 명령들을 가진 템플릿
  • 여러 이미지들을 쌓아서, 원하는 형태의 이미지를 커스텀할 수 있음

c. Docker Container

  • 도커 이미지가 실행한 인스턴스
  • 도커 컨테이너는 분리된 공간이므로, 데몬 프로세스를 통해 접속할 수 있고, 코드 수정, 실행도 할 수 있음

2. 도커 주요 명령어

1) 설치 및 설정 관련 명령어

# 도커 설치
curl -fsSL https://get.docker.com/ | sudo sh
# 현재 유저를 docker 그룹으로 추가해서 docker 실행시 sudo 안써도 되도록 함
sudo usermod -aG docker $USER

2) 이미지 관련 명령어

docker search [원하는 이미지]
# 이미지 다운로드
# 태그를 입력하여 원하는 버전을 다운할 수 있다
docker pull [원하는 이미지]:[태그]
# 다운받은 이미지 확인
docker images
# 다운받은 이미지 삭제하기
docker rmi [이미지 이름] or [이미지 ID]

docker image rm [이미지 이름] or [이미지 ID]

3) 컨테이너 관련 명령어

# 컨테이너 생성
docker create [이미지]

# 컨테이너 이름 지정해서 생성
docker create --name [컨테이너 이름] [이미지]
# 컨테이너 목록
docker ps -a
# 컨테이너 삭제
docker rm [컨테이너 이름] or [ID]
# 컨테이너 실행
# 컨테이너 안에 프로그램이 종료되면 컨테이너도 종료
docker start [컨테이너 이름] or [ID]



# docker run은 이미지 다운, 컨테이너 생성, 컨테이너 실행 동시에 해준다
# 일반적으로 pull-create-start 순으로 실행되는데 이를 run으로 한 번에 대체 가능

# 컨테이너에서 터미널을 열어 명령을 입력할 수 있도록 함
docker run -it [이미지]

docker run -it --name [컨테이너 이름] [이미지]

# 컨테이너를 백그라운드로 실행하기
docker run -it -d --name [컨테이너 이름] [이미지]

# 컨테이너 foreground로 가져오기
docker attach [컨테이너 이름]
# 실행 중인 컨테이너 종료하기
docker stop [컨테이너 이름]

# 실행 중인 컨테이너 잠깐 멈추기
docker pause [컨테이너 이름]
docker unpause [컨테이너 이름]
# 포트 포워딩
# docker 컨테이너가  실행되면 172.17.0.0/16 (서브넷이 255.255.0.0)인 Private IP가 할당됨
# /16은 16비트까지 IP할당이 된다는 의미로 172.17.0.0 ~ 172.17.255.255까지 동일 네트워크 상에 IP주소를 가질 수 있음을 의미함
# NAPT(Network Address Port Translation)를 이용해 호스트 PC IP의 특정 port를 docker 컨테이너의 Private IP의 특정 port로 변환
# 웹 브라우저에서 예를들어 9999포트로 접속하면 도커의 NAPT 기술을 이용해 컨테이너의 80번 포트로 forwarding해준다
# 이를 지원하는 옵션이 -p 옵션

docker run -d -p [호스트 PC의 포트]:80 --name [컨테이너 이름] [이미지 이름]
# 바인딩(컨테이너 종료되도 데이터베이스는 살려준다)
# 데이터를 컨테이너에 저장하지 않고 호스트 PC에 저장

docker run -v [호스트 PC의 경로]:[컨테이너의 경로] [이미지 이름]
# 실행중인 컨테이너에 명령 실행하기
docker exec [옵션] [컨테이너 이름] [명령 인자]
docker exec -it apacheweb2 /bin/bash
# 모든 컨테이너 삭제
docker stop $(docker ps -a -q)
docker rm $(docker ps -a -q)

# 모든 이미지 삭제
docker rmi $(docker ps -a -q)

# 정지된 컨테이너만 삭제
docker container prune

# 실행 중인 컨테이너의 image를 제외한 나머지 image 삭제
docker image prune

Tags:

Categories:

Updated: