발효홍삼
코딩하는 홍삼
발효홍삼
전체 방문자
오늘
어제
  • 분류 전체보기 (142)
    • PS (63)
      • 프로그래머스 (9)
      • 코드업 (10)
      • 백준 (43)
      • 알고스팟 (1)
    • Programming Language (11)
      • html_css (2)
      • java (0)
      • c,c++ (2)
      • vanillajs (2)
      • react (0)
      • vue.js (0)
      • angular.js (0)
      • electron (3)
      • 엄랭(Umjunsik-lang) (1)
      • F# (1)
      • Node.js (0)
      • Go (0)
    • knowledge (41)
      • algorithm (3)
      • data structure (1)
      • os (1)
      • ML (1)
      • math (31)
      • paper review (0)
      • IT-license (4)
    • Programming Guide (27)
      • React (1)
      • Electron (2)
      • CSS , SASS ( SCSS ) , Tailw.. (3)
      • Node.js (1)
      • Go (1)
      • Ruby on Rails (2)
      • R (1)
      • PHP (1)
      • Docker (1)
      • JSP (1)
      • C# (1)
      • Django (1)
      • Flask (1)
      • Dart (1)
      • Next.js (1)
      • Vue.js (1)
      • Unity (1)
      • React Native (0)
      • Flutter (3)
      • GraphQL (1)
      • MongoDB (1)
      • .NET (1)
      • RUST (0)

블로그 메뉴

  • 홈
  • 태그
  • 방명록

공지사항

인기 글

태그

  • 정보처리기능사 필기
  • 출력
  • cpp
  • 기초100제
  • 미적분학
  • 프로그래머스
  • Python
  • HTML
  • 이산수학
  • C
  • electron
  • c++
  • 백준
  • js
  • 수학
  • CSS
  • nodejs
  • 적분
  • LV1
  • 파이썬
  • 미분
  • 정보처리기능사
  • 기초백제
  • codeup
  • 코드업
  • 자바
  • java
  • JavaScript
  • 구현
  • 알고리즘

최근 댓글

최근 글

티스토리

250x250
hELLO · Designed By 정상우.
발효홍삼

코딩하는 홍삼

Docker 시작하기
Programming Guide/Docker

Docker 시작하기

2022. 12. 22. 21:45
728x90

What is Docker

기존에 서버를 관리하는 것은 매우 어려웠고 복잡한 영역이어서, 새 서버를 세팅하려면 그때마다 config 등의 구축환경을 다시 세팅하고, 그 후에도 리눅스 버전이나 환경의 변화가 생기면 충돌이 일어나기 십상이였다.

 

한 서버에 다수의 프로그램을 설치하면 라이브러리, 포트 충돌을 고려한 설치가 굉장히 어려웠고, 마이크로서비스 아키텍쳐, DevOps 등의 등장으로 서버 관리는 더 어려워졌다.

 

하지만 도커의 등장으로 서버 관리의 방식은 완전히 바뀌었다.

도커는 컨테이너 기반의 오픈소스 가상화 플랫폼이다. 컨테이너 안에는 다양한 프로그램, 실행 완경을 '컨테이너'라는 개념으로 추상화하고 클라우드, PC 등 어디서든 실행할 수 있다.

 

컨테이너는 격리된 공간에서 프로세스가 동작하는 기술이다. 기존의 가상화 방식은 OS를 가상화하는 것이었다.

VMware 등의 가상머신은 Host OS 위에 Guest OS 자체를 가상화한다. 이 방식은 사용법도 간단하고 여러가지 운영체제를 가상화할 수 있지만 무겁고 느리기 때문에 운영환경의 사용에는 적합하지 않았다.

이후 CPU의 가상화 기술을 이용한 반가상 방식이 등장한다. Guest OS가 필요하지만 전체 OS를 가상화하는 방식이 아니어서 성능은 향상되었다. 

 

전가상화, 반가상화 모두 성능 문제가 있었다. 이를 개선한 프로세스 격리 방식이 등장한다. 리눅스에서 리눅스 컨테이너라고 하며 단순하게 프로세스를 격리시키는 방식이기 때문에 가볍고 빠르게 동작한다. CPU나 메모리 등의 자원을 프로세스가 필요한 만큼만 할당하고 더 필요하면 그때마다 추가적으로 할당하기 때문에 성능적인 손실이 거의 없었다.

 

하나의 서버에 다수의 컨테이너를 실행하면 서로 영향을 주지 않고 독립적으로 실행된다. 실행 중인 컨테이너에 접속하며 명령어 입력, 패키지 설치, 사용자 추가 등 모든 작업을 할 수 있다. 컨테이너를 만드는 시간은 길어야 2초로 가상머신보다 훨씬 빠르다. 

 

도커는 LXC를 기반으로 시작해서 이후 자체적은 libcontainer 기술을 사용했고 runC 기술에 합쳐졌다.

 

도커에서 가장 중요한 개념은 컨테이너와 이미지이다. 이미지는 컨테이너 실행에 필요한 파일, 설정값을 모두 포함하고 있는 것이고 변하지 않는다. 이미지를 실행한 것이 컨테이너고 여기서 추가, 변화되는 값은 컨테이너에 저장된다. 같은 이미지로 다수의 컨테이너를 생성할 수 있고 컨테이너에 변화가 생겨도 이미지에는 영향을 주지 않는다.

 

도커 이미지는 Dockerhub에서 업로드, 다운로드 할 수도 있다. 현재 공개된 이미지는 50만개가 넘고 누구나 쉽게 명령어를 이용하여 이미지를 만들고 배포하고(push) 다운로드(pull)받을 수 있다.

 

도커 이미지는 컨테이너 실행에 대한 모든 정보를 담고 있기 때문에 용량이 매우 크다. 따라서 기존의 이미지에 파일 하나를 추가했다고 수백 메가가 넘어가는 이미지를 다시 다운로드한다면 매우 비효율적일 수밖에 없다.

 

도커는 레이어(Layer)라는 개념을 사용한다. 유니온 파일 시스템을 이용하여 다수의 레이어를 하나의 파일 시스템으로 사용할 수 있게 해준다. 이미지는 여러 개의 읽기 전용 레이어(Read-only Layer)로 구성되고 파일에 변화(추가, 수정)가 생기면 새로운 레이어가 생성된다. 

 

Quick Start

설치 전 해당사항이 만족하는지 확인이 필요하다.

 

1. Windows 10 Pro, Enterprse, Education 이상이어야 한다.

Window + S를 눌러 '정품 인증'을 검색해 해당되는지 확인한다.

2. CPU 가상화 기능이 활성화 되어야 한다.

작업 관리자 > 성능에서 가상화가 '사용'으로 되어있는지 확인한다.

3. Hyper-V를 활성화해야 한다.

Window + S를 눌러 'Windows 기능'을 검색해 Hyper-V를 체크하고 확인을 눌러 설치한다.

Hyper-V를 찾을 수 없다면 아래 글을 참고해주길 바란다

https://blog.dalso.org/article/windows-11-home%EC%97%90%EC%84%9C-hyper-v-%EC%84%A4%EC%B9%98%ED%95%98%EA%B8%B0

 

윈도우를 사용중이므로 윈도우에 도커를 설치하는 법에 대해서만 다루도록 하겠다.

 

https://docs.docker.com/desktop/install/windows-install/

 

Install on Windows

 

docs.docker.com

윈도우에 Docker 데스크톱을 설치하기 위해 위 링크에 들어간다.

위 버튼을 눌러 Docker 데스크톱 설치파일을 다운받는다.

다운받은 Docker Desktop installer을 클릭한다.

OK 버튼을 누르고 설치를 진행한다.

설치가 완료되면 Close and log out을 누르고 다시 윈도우에 로그인한다.

로그인을 하면 다음화면이 나타난다. I accept the terms에 체크하고 Accept 버튼을 누른다.

바탕화면, 최근에 추가한 앱, 작업 표시줄을 확인하면 도커 데스크톱이 설치된 것을 확인할 수 있다.

 

docker는 기본적으로 root 권한이 필요하다.

sudo 명령어 없이 docker를 이용하기 위해 사용자에게 권한을 주도록 하자.

sudo usermod -aG docker $USER
sudo su - $USER

 

Docker Command

1) 컨테이너 실행하기

$docker run [OPTIONS] [IMAGE:TAG]

run 명령어를 통해 Image를 컨테이너로 실행시키게 된다. 이때, run시킨 이미지가 로컬 registry에 없을 경우, 자동으로 docker hub를 통해 Image를 pull 받아 온 뒤 실행시킨다.

 

자주 쓰이는 옵션

2) 컨테이너 정지 및 삭제

$docker stop [options] conainer
$docker rm [options] container

 

728x90
저작자표시 비영리 (새창열림)
    발효홍삼
    발효홍삼
    코딩하는 홍삼

    티스토리툴바