Docker란

김다희·2021년 11월 8일
0

Docker란?

Docker란 무엇일까? 먼저 가상화개념부터 짚고 넘어가자.

가상화

OS 또는 InfraStructure 위에 Hypervisor를 통해서 각각의 OS를 띄우는 기술이다. 즉 하나의 Server(1대의 PC)위에 Hypervisor가 설치되어있고, 이를 통해서 각각의 OS가 구동될 수 있도록 하는 것 이다.

가상화를 하게되면 1대의 PC에 모든 OS를 직접 설치하는것이기 때문에 성능상 문제가 되기도 한다.

Docker

가상화는 각각의 OS위에 어플리케이션을 실행했다면, Docker는 OS 1개위에 Docker Engine을 두고 그 위에 별도의 어플리케이션을 독립적으로 실행할 수 있다. OS 1개위에 어플리케이션을 실행하는 것 이기 때문에 가상화에 비해 가볍다는 장점이 있다. 이 기술은 Linux에 있던 기술을 컨테인화 시켰다고 보면 된다.


Docker 관련 용어 이해하기

  • Docker Server : 실제로 컨테이너를 생성 및 실행하고 이미지를 관리하는 주체로, Dockered 프로세스 이다.

  • Docker Client : Docker Daemon API를 이용할 수 있도록 CLI(Commanc Line Interface)를 제공한다.

  • Daemon : Docker Engine은 외부에서 API 입력을 받아 도커 엔진의 기능을 수행하고, 도커 프로세스가 실행되어 서버로서 입력 받을 준비가 된 상태를 Docker Daemon 이라고 한다.
    📍 Client와 Daemon이 동작하는 과정
    1. 사용자가 Docker 명령어를 입력한다.
    2. Client는 /var/run/docker.sock 유닉스 소켓을 사용하여 Daemon에게 명령어를 전달한다.
    3. Daemon은 명령어를 파싱하고 명령어에 해당하는 작업을 수행한다.
    4. 수행 결과를 Client에게 반환하고 사용자에게 결과를 출력한다.

  • Containers : Container는 이미지의 실행 가능한 인스턴스입니다. Docker API 또는 CLI를 사용하여 컨테이너를 생성, 시작, 중지, 이동 또는 삭제할 수 있다. 컨테이너를 하나 이상의 네트워크에 연결하거나, 스토리지를 연결하거나, 현재 상태를 기반으로 새 이미지를 생성할 수도 있다.

  • Images : Containers를 실행할 수 있는 소스코드, 라이브러리, 컴파일 된 실행 파일을 묶는 형태를 Docker Image라고 한다. 즉, 특정 프로세스를 실행하기 위해 모든 파일과 설정 값을 지녔다고 보면 된다.

  • Docker Registry : Docker Registry 는 Docker 이미지를 저장한다. Docker Hub는 누구나 사용할 수 있는 Public Registry이다. Docker는 기본적으로 Docker Hub에서 이미지를 찾도록 구성되어 있습니다.

  • Docker File : Docker Image를 만들기 위한 설정 파일로 여러가지 명령어를 Docker File을 작성하면 설정된 내용대로 Docker Image를 만들 수 있다.


Docker LifeCycle

Docker LifeCycle은 아래와 같다.
1. Dockerfile을 작성한다.
2. Docker를 build 한다.
3. Docker를 build하면 실행 가능 파일이 나오게 되고 이를 docker run 명령어를 통해 실행한다.
4. Container가 실행된다.
5. 이를 push해서 Docker hub에 올릴 수 있게된다.
6. Docker hub에 올린 이미지를 docker pull 명령어를 이용하여 Image를 받을 수 있게된다.


Docker 간단 명령어

  • docker 명령어 확인
docker run --help
  • container 실행
docker run [OPTIONS] [IMAGE]
(-d는 background 실행)
  • run 상태인 container 확인
docker ps
  • run 상태인 Image 즉시 중단
docker kill [CONTAINER ID]
  • run 상태인 Image 실행중인 작업 완료 후 중단
docker stop [CONTAINER ID]
  • container 삭제
docker rm [CONTAINER]
  • 사용가능한 Images 확인
docker images

실습(docker image를 ec2에 올려보자!)

1) Docker File을 만들어 보자

명령어설명
FROM<이미지 이름>:<태그> 형식으로 베이스 이미지를 설정한다.
METATAINER메인테이너 정보를 설정한다.
RUN쉘 스크립트 또는 명령을 이미지 생성시에 실행한다.
CMD컨테이너가 시작되었을 때 실행할 실행 파일 또는 쉘 스크립트이다.
EXPOST호스트와 연결할 포트 번호이다.
WORKDIRCMD에서 설정한 실행 파일이 실행될 디렉터리이다.

2) 프로젝트 root 경로에 dockerfile을 만들고 다음과 같이 docker file을 작성해준다.

ex) jar 파일을 만들어서 실행시킬 dockerfile

FROM openjdk:17-jdk-alpine
ARG JAR_FILE=build/libs/*.jar
COPY ${JAR_FILE} dockerDemo-0.0.1-SNAPSHOT.jar
ENTRYPOINT ["java","-jar","/dockerDemo-0.0.1-SNAPSHOT.jar"]

3) bootjar 를 만든다.

build/libs 하위에 .jar 파일이 생성된걸 확인할 수 있다.

4) docker build

root 경로에서 docker build를 실행한다.

docker build -t userId/repositoryname .

5) build 후 docker run

root 경로에서 docker run을 한다.

docker run userId/repositoryname

6) docker push

docker push userId/repositoryname

7) AWS EC2 접속

8) Docker 설치(가 안되어있는 분만)

sudo yum install docker

9) Docker 실행

sudo systemctl start docker

10) Docker hub 에 올린 image pull

sudo docker pull userId/repositoryname

11) Docker run

sudo docker run -p 9000:8080 userId/repositoryname

와 같이 해주면 로컬환경과 똑같은 실행 결과를 확인할 수 있다.


ref.

  1. https://rmcodestar.github.io/docker/2018/07/25/docker-daemon/
  2. https://aws.amazon.com/ko/docker/
  3. https://docs.docker.com/get-started/
profile
개발 덕질 중(?)

0개의 댓글