| Docker 정리
- 초보를 위한 도커 안내서 와 Docker 공식 사이트를 주로 참고하여 정리하였습니다.
1. Docker란 무엇인가?
(1) Docker가 등장한 배경
하나의 Application에 다수의 프로그램들이 늘어났고,
이에 따라 서버를 효과적으로 관리하기 위한 무언가가 필요해졌다.
1) 동일 서버에 각기 다른 프로그램을 관리하기 어려움
> 하나의 서버에는 여러 개의 프로그램이 존재할 수 있다.
> 이 프로그램들이 각자 사용하는 라이브러리의 버전이 모두 다르고 같은 포트를 사용할 경우 사용이 어려웠고, 결국 서버를 분리하게 되는 일이 발생했다. (==> 자원의 낭비)
2) 서버 환경이 변화할 때마다 유연하게 대처하기 어려움
3) DevOps 및 마이크로서비스 아키텍처의 등장과 함께 프로그램이 더 작은 단위로 쪼개어져 서버 관리가 더 어려워짐
(2) 그래서 Docker란 무엇인가?
- 도커란, 컨테이너 기반의 오픈 소스 가상화 플랫폼을 말한다.
- 도커는, 리눅스 커널 기반으로 만들어진 경량 가상화 도구이다.
따라서 설치나 실행 또한 리눅스 기반으로 이루어지며,
윈도우나 Mac과 같은 다른 OS의 경우에는 사실상 VM(가상화) 기술을 얹어 Docker를 사용한다.
리눅스 컨테이너를 구현하고 관리할 수 있도록 도와주는 경량 가상화 도구 Docker는 기본적으로 리눅스 커널에 기반한 기술입니다. 하지만 개발 환경에서도 많이 활용되기 때문에 Windows나 macOS 운영체제의 가상화 기술을 활용해 Docker Desktop 앱을 제공하고 있습니다. Docker를 가상 머신이나 원격의 리눅스 서버에 설치하고 클라이언트만 연결하는 것도 방법입니다만, 로컬에 설치된 Docker Desktop은 볼륨, 네트워크 관리 면에서 좀 더 통합된 개발 환경을 제공합니다. [출처 : AWS] |
1) 컨테이너란?
A container is a standard unit of software that packages up code and all its dependencies so the application runs quickly and reliably from one computing environment to another. [출처 : Docker] 컨테이너는 Application의 code와 모든 dependencies(의존관계)를 패키징한 하나의 표준 소프트웨어 unit을 말한다. 컨테이너를 통해 Application을 하나의 컴퓨팅 환경에서 다른 환경으로 신속하고 신뢰할 수 있게 실행할 수 있다. |
* 쉽게 이해하기 : 마치 컨테이너 박스처럼 Application의 코드나 의존성을 묶은, 하나의 실행중인 앱 환경을 말한다.
[ VM과 Docker의 Container의 차이점]
- 이 부분을 Docker을 검색했을 때 자주 언급되기에 여기에 적어보았다.
- 무슨 말인지 잘 모르겠는데, 대략적으로만 이해하기로는 기존에는 한 서버에서 Application을 돌릴 때, OS 위에 VM을 올려서 통짜로 돌렸다면, Docker를 사용했을 때에는 Docker라는 거름망이 하나 생겨서 필요한 프로그램만 하나씩 돌린다는 것 같다. (만 정확히는 모르겠다.)
VM | Container | |
이미지 | ||
플랫폼 | VirtualBox나 VMWare | Docker |
차이점 | 하드웨어부터 가상화 * 하나의 machine 에서 다수의 VM 들이 실행 * ex. linux용, mac용, windows용 jdk |
하드웨어가 아닌 OS를 가상화 * 하나의 machine에서 다수의 컨테이너들이 실행, OS 커널을 공유, 각자 격리된 프로세스로 동작 |
- | 신속한 배포와 높은 확장성 | |
- | VM보다 더 적은 공간을 사용 |
Docker는 동명의 회사에서 개발하고 있는, 경량 가상화 기술인 리눅스 컨테이너를 구현하는 애플리케이션입니다. 일반적으로 애플리케이션을 가상화하는 경우 VirtualBox나 VMWare 등을 활용해 하드웨어부터 가상화를 합니다만, Docker를 사용하면 실행하고자하는 프로세스만 격리된 환경에서 실행하는 것이 가능합니다. 이를 이용해 손쉽게 프로세스를 격리할 수 있을 뿐만아니라, 격리된 환경을 이미지로 만들어서 Docker만 돌아간다면 어디서든 똑같이 동작하는 컨테이너를 만들 수 있습니다. |
2) 이미지란?
A Docker container image is a lightweight, standalone, executable package of software that includes everything needed to run an application: code, runtime, system tools, system libraries and settings. Container images become containers at runtime and in the case of Docker containers – images become containers when they run on Docker Engine. [출처 : Docker] 도커 컨테이너 이미지는 Application을 실행하는데에 필요한 모든 것을 포함하는 경량화(lightwegiht)되고, 독립적이며(standalone), 실행가능(executable)한 소프트웨어 패키지를 말한다. : code, runtime, system tools, system libraries, settings 를 말한다. 컨테이너 이미지들은 runtime에 container가 되는데, Docker의 경우, Docker Engine에서 실행(run)되었을 때 컨테이너가 된다. 컨테이너를 정의하는 읽기 전용 템플릿이다. |
* 쉽게 이해하기 : 실행 되기 전의 컨테이너이다. 컨테이너의 구성 요소를 읽기 위한 하나의 청사진 같다.
(3) 동작 방식
도커는 하나의 실행파일이지만 실제로 클라이언트와 서버역할을 각각 할 수 있습니다.
도커 커맨드를 입력하면 도커 클라이언트가 도커 서버로 명령을 전송하고 결과를 받아 터미널에 출력해 줍니다.
3. Docker를 사용해야 하는 이유 (출처 : AWS)
Docker를 사용하면 코드를 더 빨리 전달하고, 애플리케이션 운영을 표준화하고, 코드를 원활하게 이동하고, 리소스 사용률을 높여 비용을 절감할 수 있습니다. Docker를 사용하면 어디서나 안정적으로 실행할 수 있는 단일 객체를 확보하게 됩니다. Docker의 간단한 구문을 사용해 완벽하게 제어할 수 있습니다. 폭넓게 도입되었다는 것은 Docker를 사용할 수 있는 도구 및 상용 애플리케이션의 에코시스템이 강력하다는 의미입니다.
Docker 컨테이너를 최신 애플리케이션 및 플랫폼을 생성하는 핵심 빌딩 블록으로 사용할 수 있습니다. Docker에서는 손쉽게 분산 마이크로서비스 아키텍처를 구축 및 실행하고, 표준화된 지속적 통합 및 지속적 전달 파이프라인을 통해 코드를 배포하고, 고도로 확장 가능한 데이터 처리 시스템을 구축하고, 개발자를 위한 완전관리형 플랫폼을 생성할 수 있습니다. AWS와 Docker의 최근 협업으로 Docker Compose 아티팩트를 Amazon ECS 및 AWS Fargate에 보다 쉽게 배포할 수 있게 되었습니다.
5. Docker 설치하기
* Docker Desktop 다운로드 링크 https://www.docker.com/products/docker-desktop/
(1) 리눅스에서 설치하는 방법
curl -fsSL https://get.docker.com/ | sudo sh
(2) 윈도우에서 설치하는 방법
- 도커는 리눅스 컨테이너이므로 맥과 윈도우의 경우 실제로는 가상머신을 통해 도커가 실행된다.
OS | 이용하는 가상환경 | 도규먼트 |
맥 | xhyve | Docker for mac |
윈도우 | Hyper-V | Docker for windows |
- 따라서 윈도우를 통해서 도커를 실행하기 위해서는, 현재 컴퓨터 하드웨어가 가상화를 사용하고 있는지, 가상환경은 지원되고 있는지 확인해야한다.
ㄴ [Ctrl]+[shift]+[Esc] 를 통해서 CPU의 가상화 상태를 보니, '사용 안함'이었다. 이것을 '사용함'으로 변경해주어야 한다.
Hyper-V는 지원 '예'로 되어 있으니 이 부분은 체크할 필요가 없었다.
ㄴ 컴퓨터를 껐다가 다시 킬때 [F2]를 따닥 눌러주어 BIOS로 넘어간 다음, Virtualization 을 활성화했다.
- 이렇게 한 다음, Docker 공식 사이트에서 윈도우용 Docker Desktop을 설치해주었다.
* 만약, 가상화를 체크하지 않은 상태라면, 설치 후에 제대로 Docker가 실행되지 않으니 주의하자..
설치 관련 아티클 | 링크 |
맥과 윈도우에서 설치하는 방법 | https://subicura.com/2017/01/19/docker-guide-for-beginners-2.html |
윈도우에서 Docker 설치하기 | https://cdlee479.tistory.com/9 |
윈도우의 CPU 가상화 '사용함'으로 바꾸기 & Htper-V 지원 체크하기 |
https://hello-bryan.tistory.com/159 |
윈도우 BIOS 진입 방법 | 1) PC가 켜져 있는 경우 전원을 종료하세요. 2) PC 전원을 켜자마자 F2키를 빠르게 탁탁탁~ 반복해서 누릅니다. 3) 바이오스 화면이 나타나는지 확인하세요. * 출처 : https://www.samsungsvc.co.kr/solution/33223 |
(3) Getting started 해보기
- getting started를 통해서 Docker가 잘 실행되는지 보았다. 잘 실행된다..
(4) Power shell에서 설치 확인
- power 쉘을 열고 docker version 을 입력한다.
C:\WINDOWS\system32>docker version
Client:
Cloud integration: v1.0.29
Version: 20.10.21
API version: 1.41
Go version: go1.18.7
Git commit: baeda1f
Built: Tue Oct 25 18:08:16 2022
OS/Arch: windows/amd64
Context: default
Experimental: true
Server: Docker Desktop 4.14.1 (91661)
Engine:
Version: 20.10.21
API version: 1.41 (minimum version 1.24)
Go version: go1.18.7
Git commit: 3056208
Built: Tue Oct 25 18:03:04 2022
OS/Arch: windows/amd64
Experimental: false
- docker ps 를 통해 getting started에서 실행한 내역을 확인해본다.
C:\WINDOWS\system32>docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
584114eea9be docker101tutorial "/docker-entrypoint.…" 40 seconds ago Up 35 seconds 0.0.0.0:80->80/tcp docker-tutorial
6. 컨테이너 실행하기
- Docker 실행 명령어
docker run [OPTIONS] IMAGE[:TAG|@DIGEST] [COMMAND] [ARG...]
* 옵션설명 (출처 : 초보를 위한 도커 안내서)
옵션 | 설명 |
-d | detached mode 흔히 말하는 백그라운드 모드 |
-p | 호스트와 컨테이너의 포트를 연결 (포워딩) |
-v | 호스트와 컨테이너의 디렉토리를 연결 (마운트) |
-e | 컨테이너 내에서 사용할 환경변수 설정 |
–name | 컨테이너 이름 설정 |
–rm | 프로세스 종료시 컨테이너 자동 제거 |
-it | -i와 -t를 동시에 사용한 것으로 터미널 입력을 위한 옵션 |
–link | 컨테이너 연결 [컨테이너명:별칭] |
- MySQL 컨테이너 실행하기
docker run -it --name zero-base-cms-mysql -e MYSQL_ROOT_PASSWORD=1 -p 3306:3306 -d mysql
- Redis 컨테이너 실행하기
docker run -it --name zero-base-cms-redis -p 6379:6379 -d redis
- 결과 보기
7. 설치 및 실행 중 이슈 해결
이슈 | 해결방법 |
Unable to find image 해결 방법 | https://miinsun.tistory.com/37 |
Repository or Login 관련 | docker login 을 해준다. |
[ 참고 및 출처 ]
https://www.lainyzine.com/ko/article/a-summary-of-docker-installation-methods-by-operating-system/
https://aws.amazon.com/ko/docker/
https://subicura.com/2017/01/19/docker-guide-for-beginners-1.html
'Framework > 프로젝트로 스프링 이해하기' 카테고리의 다른 글
[이커머스 프로젝트] API Gateway를 활용한 MSA (Micro Service Architecture) (0) | 2022.11.25 |
---|---|
[이커머스 프로젝트] 환경 변수를 외부에서 주입하는 법 (0) | 2022.11.25 |
[이커머스 프로젝트] 주제 선정, Microservice 아키텍처 이해, 기능 단위의 계획, 시스템 구성도 그리기(draw.io) (0) | 2022.11.23 |
[LMS 만들기] 회원 탈퇴, 강좌 관리, 파일 업로드 (0) | 2022.10.10 |
[LMS 만들기] 회원정보 수정 - 우편번호 찾기, ajax와 Rest API (0) | 2022.10.10 |