도커를 이해하고 도커이미지를 만들어보자.

Engineer Edlin·2022년 9월 24일
0

Tech Talk

목록 보기
4/9
post-thumbnail

A crash course on Docker 를 번역한 내용입니다.

1. Docker란 무엇인가?

왼쪽이 VM, 오른쪽이 Docker가 동작하는 환경을 추상화한 그림입니다.

  • 도커는 어떤 환경에서든 프로그램이 동일하게 운영되게 해주는 하나의 패키징 방법이다.

도커이미지란?
도커 이미지란 코드와 코드가 동작하는 파일시스템, 의존 라이브러리를 하나의 이미지로 저장하는 것

  • 도커 이전에는 Virtual Machine (가상환경)에서 코드를 패키지하고 동작시키기 위해 VM 이미지를 만들어야 했다. (= snapshot)

snapshot이란?
OS와 코드가 작동하는 파일시스템, 코드의 의존성, 하드웨어를 가상화한 하이퍼바이저 등을 모두 포함한 하나의 이미지

  • VM 가상화(= snapshot)의 단점은 하드웨어, 운영체제 등을 모두 이미지화하면서 많은 CPU, 메모리 이용률, 시작 시간이 오래 걸린다는 것이었다.
  • 도커가 등장하면서 도커 이미지를 만들어서 컨테이너 엔진을 사용해서 컨테이너로서의 이미지를 동작시키기만 하면 된다.
  • 단일 서버에서 동작하는 모든 컨테이너가 OS kernel과 하드웨어를 공유하기 때문에 단일 컨테이너를 동작시키는데 CPU와 메모리의 오버헤드가 적으므로 빠르게 동작시킬 수 있다는 장점이 있다.

하드웨어, 운영체제 등 모든 것들을 이미지화하는 것이 VM image라면, 코드가 동작하는 파일시스템, 의존 라이브러리 등을 하나의 image로 저장하여 가볍게 만든 것이 Docker image 이다.

컨테이너란?
컨테이너 엔진에서 돌아가는 하나의 도커 이미지, 프로세스

컨테이너 엔진 이란?
다른 컨테이너들과 host machine으로 부터 독립된(격리된) 운영하고자 하는 코드의 동작을 보장하고, 모든 환경에서 동일한 방식으로 컨테이너가 동작하게끔 해줌



2. 도커 컨테이너 작동시키기

1) Docker 설치하기


2) Docker image 실행해보기

  • Docker image를 만들 수도 있지만 Docker hub에서 다운로드 받을 수도 있다.
  • Docker image를 실행시키는 명령어를 쳤을 때, 해당 Docker image가 없다면 자동 다운로드 해준 뒤 실행시킨다.
  • 권한이 없는 경우 sudo를 통해 권한을 획득한 뒤 명령어를 실행시킬 수 있다.
  • docker run은 도커 이미지를 도커 컨테이너 엔진 위에 올린 뒤 실행하는 것이다.
  • docker start는 이미 도커 컨테이너 엔진 위에 올라간 중단된 도커 컨테이너를 다시 재실행 시키는 것이다.

  • Docker에서의 컨테이너는 userspace level에서 독립된 컨테이너로서, 컨테이너 안에서의 네트워킹, 메모리, 파일시스템에 관한 정보를 각각 확인할 수 있다.
  • 이는 Docker Container는 각각 독립되어 있으며, 한 Docker container에서 생성된 이미지를 run할 때, 생성된 파일을 다른 Container에서 접근할 수 없다는 것을 의미한다.

3) Docker 컨테이너 모두 확인하기


4) Docker를 이용해서 web app 실행시키기

  • 도커 컨테이너는 file system level에서 뿐 아니라, 네트워크 레벨에서도 각각 컨테이너마다 독립적이다.
  • 때문에, Host OS에서 docker 컨테이너를 실행할 때 연결된 네트워크를 연결하고자 할 때 연결이 불가능하다는 것을 확인할 수 있다.
  • 컨테이너에서의 port와 컨테이너 엔진이 동작하고 있는 host machine의 port와 연결해주고 싶을 경우 -p라는 옵션을 줄 수 있다.

    단 이때, 컨테이너를 동작시키는 터미널과 host machine의 curl 명령어를 실행하는 터미널이 독립적으로 운영되어야 한다.



3. Docker 이미지 만들어보기

  • web-server라는 폴더 안에 index.html이라는 파일이 있다고 가정하고 도커 이미지를 만든다.

1) index.html 파일 만들기

<html>
  <body>
    <h1>Hello, World!</h1>
  </body>
</html>

2) Dockerfile 파일 만들기

3) Docker 이미지 만든 후 실행



4. 결론

  • 도커가 무엇이고 도커 컨테이너가 무엇인지에 대한 대략적인 개념과 간단한 도커 실습을 진행해 보았다.
  • 도커이미지를 만들기 위해서는 보다 복잡한 설정이 필요하고 이런 복잡한 설정을 docker orchestration 도구인 kubernetes에서 보다 간편(?)하게 할 수 있다.
profile
담대하게 도전하고 기꺼이 실패를 받아들이는 개발자

0개의 댓글