[Docker] 도커 - 개념 정리
컨테이너 기반 가상화 플랫폼이다. 도커를 통해 소프트웨어 애플리케이션을 컨테이너로 패키징하여 실행한다. 도커 사용에 가장 큰 목적 중 하나는 애플리케이션 배포를 위해 다양한 소프트웨어와 데이터를 독립된 환경에 격리하는 기능 제공한다는 것이다.
Docker
컨테이너 기반 가상화 플랫폼이다. 도커를 통해 소프트웨어 애플리케이션을 컨테이너로 패키징하여 실행한다.
도커 사용에 가장 큰 목적 중 하나는 애플리케이션 배포를 위해 다양한 소프트웨어와 데이터를 독립된 환경에 격리하는 기능 제공한다는 것이다.
Docker 동작 원리
도커는 기본적으로 리눅스 운영체제에서만 동작한다. 도커를 사용하려면 도커엔진이라는 소프트웨어를 설치해야한다. 도커 엔진을 사용해야 컨테이너 관련 작업을 진행할 수 있다.
리눅스 커널 기능을활용하여 리눅스 위에서 도커 엔진이 실행되고, 도커 엔진 위에 도커 컨테이너가 동작하는 구조이다.
만약 window나 macOS같은 OS를 사용한다면, VirtualBox나 VMware같은 가상환경 위에 리눅스 운영체제를 설치하고 그 위에 도커엔진을 설치하거나, window, macOS용 도커 데스크톱을 설치하여 도커 사용이 가능하다.
컨테이너 내부의 프로그램 또한 리눅스용 프로그램이다. 리눅스 운영체제가 서버에서 많이 사용되고 리눅스용 소프트웨어도 서버용이 많기 때문이다.
즉, 도커를 사용하려면 리눅스는 필수이다.
Virtual Machines
VM (Virtual Machines)은 VM당 OS까지 구현하여 하드웨어 level의 가상화를 구현한다. 이는 리소스를 비교적 많이 소모한다.
Docker Containers
컨테이너는 애플리케이션 계층에서 실행되며 HOST OS의 커널을 공유하므로 VM보다 가볍고 효율적이다.
Image
애플리케이션을 실행하는데 필요한 모든 것을 포함하는 읽기 전용 템플릿이다. 애플리케이션 전송 및 공유에 목적이 있으며, 애프리케이션 실행에 필요한 독립적인 환경을 포함하여 공유받는 사용자로 하여금 동일한 환경에서 소프트웨어를 실행한다.
Container
컨테이너는 이미지의 인스턴스로, 이미지를 실행한 애플리케이션이다. 컨테이너는 격리되어있어 서로 의존하지 않는다.
도커 Image와 Container를 가구에 비유할 수 있을 것 같다.
포장된 가구(Image)가 도착하여 조립(실행)될 때 까지는 사용 불가능하다. 이때 조립(실행)하여 테이블, 소파, 침대와 같이 사용 가능한 가구(Container)가 된다. 만약 이를 다른 지역으로 옮기고 싶다면, 사용하던 가구(Container)를 옮길 수 있도록 포장한다(Image).
Dockerfile
도커 이미지를 빌드하는 방법을 정의하는 스크립트
- FROM : 어느 이미지에서 시작할건지를 의미한다. 해당 지시어로 Dockerfile 작성
- LABEL : 이미지에 key-value 형태의 메타데이터를 추가 (Optional)
- RUN : 컨테이너 내부에서 명령어를 실행하고, 새로운 이미지를 생성한다. sudo apt install apache2와 같은 명령어로 http 서버가 설치된 이미지가 생성된다.
- WORKDIR : 명령어를 실행할 작업 디렉토리를 지정한다. 리눅스의 cd 명령어와 동일하다.
- EXPOSE : Dockerfile의 빌드로 생성된 이미지에서 노출할 포트를 의미한다. 호스트의 포트와 실제로 연결되는 것이 아닌 글로써 설정하는 목적이다. 컨테이너 run시 -p 옵션의 컨테이너 포트를 EXPOSE의 포트로 설정한다.
- COPY / ADD : 호스트의 파일 또는 폴더를 이미지에 추가한다.
- ENV : 이미지에서 사용하는 환경 변수를 지정한다.
- CMD : 컨테이너를 생성할 때 실행되는 명령어를 지정한다. 컨테이너에 항상 돌아가는 서버를 띄울 때 사요한다.
- ENTRYPOINT : 컨테이너를 시작할 때 실행되는 명령어를 강제 지정한다.
예시
1
2
3
4
5
6
7
#Dockerfile
FROM openjdk:17
COPY build/libs/*.jar docker-demo.jar
ENTRYPOINT ["java", "-jar", "docker-demo.jar"]
명령어
container
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
# 컨테이너 실행
docker start
# 컨테이너 정지
docker stop
# 이미지로부터 컨테이너 생성
docker create
# 이미지를 내려받고 컨테이너 생성해 실행(pull -> create -> start)
docker run --name apa000ex1 -d -i -p 8080:80 httpd
# 정지상태의 컨테이너 삭제
docker rm
# 실행 중인 컨테이너 내에서 프로그램 실행
docker exec
# 컨테이너 목록출력
docker ps
# 도커 컨테이너를 이미지로 변환
docker commit
image
1
2
3
4
5
6
7
8
9
10
11
# 이미지 pull
docker image pull
# 이미지 삭제
docker image rm
# 이미지 목록 출력
docker image ls
# 이미지 생성
docker images build
원문: Velog
![[Docker] 도커 - 개념 정리](/assets/img/posts/velog/3e8705bd78af0d0b5ae2.png)
