본문 바로가기

Docker/Udemy Docker Guide

Udemy - Docker 실전 가이드 1.

도커와 컨테이너

 

도커는 컨테이너 기술의 일종으로 컨테이너를 생성하고 관리하기 위한 도구이다.

 

소프트웨어 개발에서 컨테이너는 '표준화된 소프트웨어 유닛' 으로 이는 기본적으로 코드 패키지이며

해당 코드를 실행하는데 필요한 종속성도구가 포함되어있다는 것이 중요하다.

 

예를 들어 NodeJS 애플리케이션을 구축하는 경우 NodeJS 는 서버에서 JavaScript 코드를 실행하는데 사용할 수 있는 JavaScript 런타임이다.

도커로 빌드된 컨테이너가 있는 이러한 애플리케이션이 있는 경우 그 컨테이너에는 애플리케이션 소스 코드 뿐만 아니라

NodeJS 런타임 그리고 코드를 실행하는데 필요한 기타 도구가 있을 수 있다.

동일한 NodeJS 코드와 동일한 NodeJS 도구를 사용하는 동일한 컨테이너는 항상 동일한 버전을 사용하는 동일한 NodeJS 런타임에 항상 동일한 동작과 결과를 제공한다는 이점이 있다.

 

소프트웨어 유닛, 코드가 포함된 패키지 및 코드를 실행하는 종속성을 보관할 수 있으며 도커가 실행되는 모든 곳에서 이를 가져올 수 있다.

 

, 컨테이너를 통해 한 번 구축한 환경 다음에 다시 그 환경을 손수 세팅할 필요없이 온저히 그대로 가져다 사용할 수 있는 장점이 있다는 것

 

도커는 이러한 컨테이너를 구축할 수 있는 도구이며, 컨테이너 지원이 최신 운영 체제에 장되어 있거나 최소한 시작하기 쉽고,

도커를 모든 최신 운영 체제에 설치하여 작업할 수 있다는 이점이 있다.

 

도커는 결국 이러한 컨테이너의 생성관리 프로세스를 단순화하는 도구이다.

컨테이너로 고정된 환경을 구축하면, 해당 컨테이너를 통해 누가 사용하든 몇 명이 사용하든 같은 환경을 복제해서 그대로 사용할 수 있고, 현재의 로컬에서 사용하던 환경을 그대로 복제해서 다른 공간에서도 온전히 사용할 수 있는 장점도 존재한다.

 

또한 작업 중인 프로젝트가 여러가지 일 때, 충돌하는 버전이 있을 수도 있다. 이 때, 한 로컬에서 해당 프로젝트에 맞춰서 버전을 계속 바꿀 수는 없기 때문에 컨테이너를 통해 각 프로젝트마다 각각의 환경을 갖는 컨테이너를 제작함으로써 해당 문제를 해결 할 수 있다.

 


VM(버츄얼머신) VS 컨테이너

 

VM 장점

  • 분리된 환경생성
    • Windows 에서 Ubuntu, CentOS 등을 각각 독립 실행 가능
  • 환경별 설정 가능
    • 각 VM 마다 메모리, 디스크, 네트워크 등 개별 설정 가능
  • 안정적인 공유 및 재생산
    • 하나의 VM 이미지를 만들어두면 그대로 다른 사람에게 전달해서 동일한 환경 제공 가능

VM 단점

  • 이중 복제 문제
    • VM 은 호스트 OS 위에 새 OS 를 설치하여 사용하며, 이미지 공유시 해당 OS 구성까지 포함됨
  • 호스트 성능 저하
    • VM 하나만 돌려도 수 GB 메모리 소모되며, 여러 개 돌릴수록 호스트가 버거워짐
  • 재생산의 제약
    • 공유는 가능하지만, 실행하려면 꽤 많은 리고스가 필요하고, 동일한 VM 플랫폼을 사용해야 함

컨테이너 장점

  • 가볍고 빠름
    • 앱 실행에 필요한 최소한만 포함, 몇 초 만에 실행 가능
  • 호스트 자원을 더 효율적으로 사용
    • 메모리, CPU 공유가 효율적이며, 여러 컨테이너를 띄워도 성능에 영향이 적음
  • 배포가 쉬움
    • 이미지 크기가 작고, 버전 관리도 용이함(DockerHub 에서 pull 만 하면 실행 가능)

컨테이너 단점

  • 호스트 OS 커널 공유
    • Windows 에서 Linuex 컨테이너는 바로 실행 불가능(WSL 같은 도구 필요)
  • 보안 격리는 상대적으로 약함
    • 같은 커널을 공유하기 때문에 완전한 OS 수준의 격리는 아님(보안 설정 주의 필요)
  • 복잡한 앱 구성은 오케스트레이션 필요
    • 다중 컨테이너 운영 시 Kubernetes 같은 도구가 필요해짐

구분VM (Virtual Machine)컨테이너 (Container)

구분 VM(Virtual Machine) 컨테이너(Container)
기본 구조 전체 운영체제(OS)를 가상화 호스트 OS 위에서 앱만 격리 실행
필요한 리소스 무겁고 많은 리소스 필요 (OS 포함) 가볍고 빠름 (앱과 라이브러리만 포함)
부팅 속도 느림 (수 분까지 걸릴 수 있음) 빠름 (수 초 내외)
성능 비교적 느림 (하이퍼바이저 거침) 거의 네이티브에 가까운 성능
환경 격리 완전한 OS 수준 격리 프로세스 수준 격리
공유 및 배포 이미지 크기 큼 (수 GB 이상) 이미지 작음 (수 MB ~ 수백 MB)
유연성 다양한 OS 가능 (ex. Windows 위에 Linux VM) 호스트 OS와 같은 커널 사용해야 함
대표 도구 VirtualBox, VMware, Hyper-V Docker, Podman, containerd

도커 설치

 

Docker: Accelerated Container Application Development

 

Docker: Accelerated Container Application Development

Docker is a platform designed to help developers build, share, and run container applications. We handle the tedious setup, so you can focus on the code.

www.docker.com

 

 

도커 사이트 접속 -> Developers -> Docs 클릭

 

 

Get Docker 클릭

 

 

현재 내 로컬의 OS 에 맞춰서 선택

 

 

MacOS 와  Windows권장 환경이 성립하면

 

Docker Desktop 을 설치하고

 

성립하지 않으면 Docker Toolbox 를 설치한다

 

Linux 의 경우는 단순히 Docker Engine 을 설치하면 된다

 

 

MacOS Intel ChipApple Silicon따라 권장 환경 내용이 달라진다

 

(본 강의에서는 2010 년 기준 다운로드 내용을 다루기 때문에 MacOS 설치 과정은 따로 알아봐야 될 것 같다)

 

 

Windows3가지 경우의 권장 환경을 요구하고 있다

 

1. WSL2 backend, x86_64

  • WSL 버전 2.1.5 이상
  • Windows 11 64비트: Home 또는 Pro는 22H2 이상, Enterprise 또는 Education은 21H2 이상
  • Windows 10 64비트: 최소 요구 사항은 Home 또는 Pro 22H2 (빌드 19045) 이상, 또는 Enterprise/Education 21H2 (빌드 19045) 이상
  • Windows에서 WSL 2 기능을 활성화해야 합니다.
  • Windows 10 또는 11에서 WSL 2를 실행하려면 다음 하드웨어 요건이 필요합니다:
    • SLAT(2차 주소 변환) 기능이 있는 64비트 프로세서
    • 4GB 이상의 시스템 메모리
    • BIOS/UEFI에서 하드웨어 가상화를 활성화하세요. 자세한 내용은 Virtualization 링크 참조.

ㅡ Note ㅡ

Docker는 Microsoft의 지원 주기 내에 있는 Windows 버전에서만 Docker Desktop을 지원합니다.

Windows Server 2019 또는 Windows Server 2022와 같은 서버용 Windows 버전에서는 Docker Desktop이 지원되지 않습니다.

Windows Server에서 컨테이너를 실행하는 방법에 대해서는 Microsoft 공식 문서를 참조하세요

 

ㅡ Important ㅡ

Windows 컨테이너를 실행하려면 Windows 10 또는 11의 Professional 또는 Enterprise 버전이 필요합니다.

Home 또는 Education 버전은 Linux 컨테이너만 실행할 수 있습니다.

 

Docker Desktop에서 생성된 컨테이너와 이미지는 해당 컴퓨터에 있는 모든 사용자 계정에서 공유됩니다.

이는 모든 Windows 계정이 동일한 VM을 사용하여 컨테이너를 실행하기 때문입니다.

단, Windows 컨테이너 백엔드를 사용할 경우 사용자 간 컨테이너 및 이미지 공유는 불가능합니다.

Docker Business 고객의 경우 VMware ESXi 또는 Azure VM 내부에서 Docker Desktop 실행이 지원됩니다.

이를 위해서는 하이퍼바이저에서 중첩 가상화(nested virtualization) 를 먼저 활성화해야 합니다.

자세한 내용은 Running Docker Desktop in a VM or VDI environment 링크를 참고하세요.


WSL2 활성화(WSL: Windows Subsystem for Linux)

 

cmd 로 설정 방법 (cmd 가 어려우면 하단의 GUI 로 설정하는 방법을 참고)

 

1. Powershell 권리자 권한

 

 

2. wsl --install
입력

(안될 경우 밑에 다른 명령어를 실행)

 

 

ㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡ
위의 명령어가 안되는 경우에만 아래의 세 가지 명령어를 실행

(install 명령어가 된 경우 3 번 과정으로)

 

 

 

dism.exe /online /enable-feature /featurename:Microsoft-Windows-Subsystem-Linux /all /norestart

입력

명령어 해석

구성 요소의 의미
dism.exe DISM (Deployment Image Servicing and Management):
Windows 이미지(.wim)나 현재 시스템을 설정·수정하는 명령줄 도구.
/online 현재 실행 중인 실제 Windows 시스템(즉, 현재 부팅된 운영체제)을 대상으로 적용함
/enable-feature 특정 Windows 기능을 활성화하라는 의미 (비활성화는 /disable-feature)
/featurename:Microsoft-Windows-Subsystem-Linux 활성화할 기능 이름을 명시: 이 경우는 WSL1 기능 (WSL2는 이 외에 추가 기능 필요)
현재는 Linux용 Windows 하위 시스템 기능 활성화 명령
/all 해당 기능이 의존하는 하위 기능까지 모두 함께 활성화
/norestart 명령 실행 후 자동으로 시스템 재부팅하지 않음 (수동 재부팅 필요)

 

Microsoft-Windows-Subsystem-Linux 기능 활성화 여부 확인:

dism /online /get-features | Select-String -Context 0,1 "Microsoft-Windows-Subsystem-Linux" 입력

 

 

dism.exe /online /enable-feature /featurename:VirtualMachinePlatform /all /norestart

입력

(Virtual Machine Platform 기능 활성화, WSL2 사용 위한 전용 가상화 머신 플랫폼)

 

VirtualMachinePlatform 기능 활성화 여부 확인:

dism /online /get-features | Select-String -Context 0,1 "VirtualMachinePlatform" 명령어 입력

 

wsl --install -d Ubuntu
입력

(Linux 배포판인 Ubuntu 직접 다운)

 

 

ㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡ

3. PC 재부팅

shutdown /r /t 0

입력

(기타 다른 환경 설정을 바꿨을 때도 설정 후엔 재부팅 하는 것을 권장)

 

 

4. Windows 10 인 경우 (Windows 11 은 다음 단계 진행)

Invoke-WebRequest -Uri "https://wslstorestorage.blob.core.windows.net/wslblob/wsl_update_x64.msi" -OutFile "$env:USERPROFILE\Downloads\wsl_update_x64.msi"
입력
(입력하면 아래 처럼 다운되는 모습이 보임)

명령어 해석

구성 요소설명
Invoke-WebRequest 웹에서 파일이나 데이터 등을 다운로드하는 PowerShell 명령어
-Uri "..." 다운로드할 대상의 URL 주소 (WSL2 커널 업데이트 MSI 파일)
-OutFile "..." 다운로드한 파일을 어디에 저장할지 경로 지정
$env:USERPROFILE은 현재 사용자 계정 경로 (예: C:\Users\user)
→ Downloads 폴더에 저장
Windows 의 환경 변수를 통해서 Download 폴더 접근


입력하도 Download 폴더를 확인하면 다음 이미처럼 해당 실행 파일이 설치됨



Start-Process "$env:USERPROFILE\Downloads\wsl_update_x64.msi"

입력

(다운받은 wsl_update_x64 파일 실행 명령어)

 

 

5. 기본 WSL 버전을 WSL2로 설정

wsl --set-default-version 2

입력

 

설정 확인 방법
wsl --list --verbose
또는
wsl -l -v
입력
(입력하면 wsl 의 기본 리눅스 배포판인 Ububtu 를 확인할 수 있다)

 

 

6. wsl
입력

(wsl 실행)

 

실행하면 


username 입력 : 
password 입력 :
password 확인 :

순으로 입력받으려 함

(password 는 입력하면서는 원래 안보이기 때문에 신중하게 입력해야 함 !!!!!!!!!!!!! )

 

입력이 끝나면 하단 이미지 처럼 내가 설정한 유저명이 나옴


WSL2 활성화(WSL: Windows Subsystem for Linux)

GUI 로 설정

 

1. Windows 검색 창에 [ Windows 기능 켜기/끄기 ] 검색

 


또는

윈도우 키 + R 누르면 나오는 창에
optionalfeatures.exe
입력

 

 

2. Windows 기능 켜기/끄기 창에서
Linux용 Windows 하위 시스템, Virtual Machine Platform 찾아서
체크

3. 체크 후 확인 누르고 PC 재부팅 !!!

 

 

 

4. Windows 10 인 경우 (Windows 11 은 다음 단계 진행)

https://learn.microsoft.com/ko-kr/windows/wsl/install-manual#step-4---download-the-linux-kernel-update-package

링크에서 WSL2 Linux 커널 업데이트 패키지 다운 및 실행

 

 

5. Powershell 관리자 모드로 열기



6. 기본 WSL 버전을 WSL2로 설정

 

 

7. MicroStore 에서 Ubutu 검색 후 최신 버전 설치

 

 

 

8. ubuntu 검색 후 실행

 

실행하면 


username 입력 : 
password 입력 :
password 확인 :

순으로 입력받으려 함

(password 는 입력하면서는 원래 안보이기 때문에 신중하게 입력해야 함 !!!!!!!!!!!!! )

입력하고 나면 위와 같이 Username 이 적용됨