Docker는 개발자가 다양한 환경에서 일관되게 실행할 수 있는 경량의 휴대용 컨테이너 내에서 애플리케이션 배포를 자동화할 수 있도록 지원하는 플랫폼입니다. 다양한 개발 환경이나 데이터 파이프라인 환경 구축 등 여러 환경을 구성할 수 있도록 도와주는데요. Windows docker 를 생각 없이 next만 눌러서 설치하면 추후 골치가 살짝 아플 수 있습니다. 이번 포스트에서는 windows에서 문제 없이 docker를 설치하는 법에 대해 정리해보았습니다.
도커 설치 가능한 환경
시스템, 시스템 정보와 같은 제어판에 들어가면 윈도우 버전과 OS를 빌드를 확인 할 수 있습니다.
윈도우 버전과 빌드가 아래 조건을 만족해야 윈도우에서 리눅스 커널을 제공해 줄 수 있습니다.
- 윈도우 10 이상
- 1903x.xxxx 이상 버전
만일 버전이 낮다면 윈도우 버전을 업그레이드 하면 됩니다.
윈도우 터미널 설치
우선 Microsoft Store를 찾아서 실행합니다.
‘Windows Terminal’ 을 검색하여 설치해줍니다.
설치가 완료되면 관리자 권한으로 터미널을 실행해줍니다.
Linux용 Windows 하위 시스템 사용 (배포 이미지 서비스 및 관리도구 활성화)
Windows에서 Linux 배포를 설치하려면 먼저 “Linux용 Windows 하위 시스템” 옵션 기능을 사용하도록 설정합니다.
terminal을 관리자 권한으로 열어 실행합니다.
윈도우 터미널에서 다음 두개의 명령어를 차례대로 실행
> dism.exe /online /enable-feature /featurename:Microsoft-Windows-Subsystem-Linux /all /norestart
> dism.exe /online /enable-feature /featurename:VirtualMachinePlatform /all /norestart
Linux 커널 업데이트 패키지 다운로드
- 최신 패키지를 다운로드합니다.
- x64 머신용 최신 WSL2 Linux 커널 업데이트 패키지
https://wslstorestorage.blob.core.windows.net/wslblob/wsl_update_x64.msi - ARM64 머신을 사용하는 경우 ARM64 패키지를 대신 다운로드하세요
https://wslstorestorage.blob.core.windows.net/wslblob/wsl_update_arm64.msi
- x64 머신용 최신 WSL2 Linux 커널 업데이트 패키지
WSL 에서 사용하는 Linux 배포판 설치
Microsoft store 에서 리눅스(Ubuntu) 배포판 설치
새로 설치된 Linux 배포를 처음 시작하면 콘솔 창이 열리고 파일이 압축 해제되어 PC에 저장될 때까지 1~2분 정도 기다려야 합니다. 이후의 모든 시작은 1초도 걸리지 않습니다.
새 Linux 배포를 위한 사용자 계정 및 암호를 만들어야 합니다.
배포 버전을 WSL 2로 설정
wsl --set-version Ubuntu 2
wsl --set-default-version 2
WSL2 에서 Ubuntu 시작하기
Windows Terminal이 설치되어 있다면 새탭에서 Ubuntu를 시작할 수 있습니다.
윈도우 메뉴에서 ubuntu를 찾아서 바로 실행할 수도 있습니다.
Windows docker 설치
아래에 링크에서 Docker Desktop for Windows 를 다운 받아 설치합니다.
https://hub.docker.com/editions/community/docker-ce-desktop-windows
install required Windows components for WSL2 체크한 뒤 설치 진행
설치 완료
설치가 완료 되면 로그아웃 후 다시 도커를 실행 해 줍니다.
Windows docker 실행
도커를 실행하게 되면 회원 가입과 같은 간단한 절차 이후 도커를 이용할 수 있습니다.
Windows docker 설치 확인
터미널를 실행한 뒤 docker ps
명령어를 실행해 봅니다.
docker ps
위의 명령어는 도커 컨테이너를 조회하는 명령어인데요.
현재 실행된 컨테이너가 없기 때문에 컨테이너 정보가 조회 되지는 않습니다.
대신에 아래와 유사한 결과가 뜬다면 도커가 제대 실행 되었다는 것을 확인 할 수 있습니다.
Windows에서 Nginx 컨테이너 실행하기
docker pull 로 docker.hub 에서의 이미지를 당겨와 받고 수행할 수 있음
docker pull nginx
도커 이미지가 없더라도 docker run 명령어를 사용하여 이미지를 자동으로 당겨와 바로 수행할 수도 있습니다.
docker run -d -p 8080:80 --name my-nginx nginx
- -p 옵션은 포트 포워딩을 해줄 수 있는건데요. 컨테이너에서는 80 포트로 열고 우리 OS에서는 8080 포트로 열어주겠다는 의미 입니다.
- — name 생성할 컨테이너 이름
docker ps 명령어를 이용하여 현재 수행 중인 docker 컨테이너 목록을 조회
docker ps
docker exec -it my-nginx 를 사용하여 수행중인 컨테이너 안으로 들어갈 수 있음
docker exec -it my-nginx /bin/bash
컨테이너에 성공적으로 들어가면 프롬프트가 우분투 형식으로 변경된 것을 확인 할 수 있습니다.
exit 명령어를 통해 컨테이너에서 빠져 나올 수 있습니다.
docker images 명령어를 사용해 시스템에서 다운 받은 docker image 리스트를 조회해 볼 수 있음
docker images
docker stop을 이용해 수행중인 컨테이너를 종료 시킬 수 있음
docker stop my-nginx
docker rmi 를 이용해 도커 이미지를 시스템에서 삭제할 수 있음
docker rmi nginx
도커 주요 명령어
Command | Description |
---|---|
docker build | Dockerfile에서 이미지를 빌드합니다. |
docker run | 새 컨테이너에서 명령을 실행합니다. |
docker pull | 레지스트리에서 이미지나 저장소를 가져옵니다. |
docker push | 이미지 또는 저장소를 레지스트리에 푸시합니다. |
docker images | 이미지를 나열합니다. |
docker ps | 컨테이너 목록을 조회합니다. |
docker ps -a | 중지된 컨테이너를 포함하여 모든 컨테이너를 조회합니다 |
docker start | 하나 이상의 중지된 컨테이너를 시작합니다 |
docker stop | 하나 이상의 실행 중인 컨테이너를 중지합니다. |
docker restart | 하나 이상의 컨테이너를 다시 시작합니다. |
docker rm | 하나 이상의 컨테이너를 제거합니다. |
docker rmi | 하나 이상의 이미지를 제거합니다. |
docker exec | 실행 중인 컨테이너에서 명령을 실행합니다. |
docker logs | 컨테이너의 로그를 가져옵니다. |
docker inspect | Docker 개체에 대한 하위 수준 정보를 반환합니다. |
docker-compose up | docker-compose.yml 파일에 정의된 서비스에 대한 컨테이너를 빌드하고, (재)생성하고, 시작하고, 연결합니다. |
docker-compose down | 컨테이너를 중지하고 docker-compose up으로 생성된 컨테이너, 네트워크, 볼륨 및 이미지를 제거합니다. |
docker-compose build | docker-compose.yml 파일에 정의된 서비스를 빌드하거나 다시 빌드합니다. |
docker-compose pull | docker-compose.yml 파일에 정의된 서비스 이미지를 가져옵니다. |
docker-compose ps | docker-compose.yml 파일에 정의된 서비스와 관련된 컨테이너를 나열합니다. |
docker network ls | 네트워크를 조회합니다. |
docker network create | 네트워크를 생성합니다ㅣ. |
docker network rm | 하나 이상의 네트워크를 제거합니다. |
docker volume ls | 볼륨들을 조회합니다. |
docker volume create | 볼륨을 생성합니다. |
docker volume rm | 하나 이상의 볼륨을 제거합니다. |
docker cp | 컨테이너와 로컬 파일 시스템 간에 파일/폴더를 복사합니다. |
docker login | Docker 레지스트리에 로그인합니다. |
docker logout | Docker 레지스트리에서 로그아웃합니다. |