안녕하세요! 소프트웨어 개발과 배포의 혁명을 이끌고 있는 Docker, 들어보셨나요? 🚀 많은 분들이 복잡하고 어렵게 생각하시지만, 사실 Ubuntu에 Docker를 설치하는 것은 생각보다 간단합니다! 이 가이드에서는 초보자분들도 쉽게 따라할 수 있도록 Ubuntu에 Docker를 설치하는 과정을 상세하게 설명해 드릴 거예요. 이제 더 이상 “제 컴퓨터에서는 되는데…”라는 말을 듣지 않아도 됩니다! 🙅♀️
📦 Docker란 무엇이며 왜 필요한가요?
Docker는 컨테이너 기반의 가상화 플랫폼입니다. 기존의 가상 머신(VM)과 달리, OS 전체를 가상화하는 것이 아니라 애플리케이션 실행에 필요한 모든 것(코드, 런타임, 시스템 도구, 라이브러리 등)을 컨테이너라는 독립적인 환경에 패키징하여 제공합니다.
왜 Docker가 필요할까요?
- 일관된 환경: 개발, 테스트, 배포 환경을 어디에서나 동일하게 유지할 수 있어 “내 컴퓨터에서는 되는데 왜 서버에서는 안 될까?” 하는 문제를 해결해 줍니다. 🎯
- 빠른 배포: 컨테이너는 가볍고 빠르게 생성, 시작, 중지, 삭제할 수 있어 애플리케이션 배포 및 확장이 용이합니다.
- 리소스 효율성: 가상 머신보다 훨씬 적은 오버헤드로 더 많은 컨테이너를 실행할 수 있어 시스템 리소스를 효율적으로 사용합니다.
- 격리: 각 컨테이너는 독립적이어서 한 컨테이너의 문제가 다른 컨테이너에 영향을 주지 않습니다.
📋 시작하기 전에: 준비물 확인!
Docker 설치를 시작하기 전에 몇 가지 기본적인 준비물이 필요합니다.
- Ubuntu 운영체제: 이 가이드는 Ubuntu 20.04 (Focal Fossa) 또는 22.04 (Jammy Jellyfish)와 같은 LTS (Long Term Support) 버전을 기준으로 작성되었습니다. 다른 버전도 유사하게 적용 가능합니다.
- Sudo 권한: 설치 및 설정을 위해
sudo
권한을 가진 사용자 계정이 필요합니다. - 인터넷 연결: Docker 패키지를 다운로드하기 위해 안정적인 인터넷 연결이 필수입니다.
🚀 Ubuntu에 Docker 설치하기: 단계별 완벽 가이드
가장 권장되는 방법인 Docker 공식 저장소(Repository)를 통한 설치 방법을 자세히 알아보겠습니다. 이 방법은 최신 버전의 Docker를 안정적으로 설치하고 관리할 수 있게 해줍니다.
1단계: 기존 Docker 버전 제거 (선택 사항)
이전에 Docker를 설치했던 적이 있다면, 충돌을 방지하기 위해 먼저 제거하는 것이 좋습니다. 처음 설치하는 경우 이 단계는 건너뛰세요.
sudo apt-get remove docker docker-engine docker.io containerd runc
2단계: 필요한 패키지 설치
Docker 공식 저장소에서 패키지를 다운로드하고 검증하기 위해 필요한 유틸리티들을 설치합니다.
sudo apt update # 시스템 패키지 목록 업데이트
sudo apt install ca-certificates curl gnupg lsb-release # HTTPS를 통한 데이터 전송 및 GPG 키 관리에 필요한 도구 설치
ca-certificates
: SSL/TLS를 통해 서버의 신뢰성을 확인하는 데 필요한 인증서들을 포함합니다.curl
: URL로부터 데이터를 전송하는 명령줄 도구입니다. Docker GPG 키를 다운로드하는 데 사용됩니다.gnupg
: 암호화 및 서명 기능을 제공하는 GnuPG (GNU Privacy Guard) 프로그램의 핵심 구성 요소입니다. 다운로드한 패키지의 진위를 확인하는 데 사용됩니다.lsb-release
: Linux Standard Base (LSB) 정보를 제공합니다. 주로 OS 버전을 확인하는 데 사용됩니다.
3단계: Docker 공식 GPG 키 추가
Docker 패키지의 무결성과 신뢰성을 확인하기 위해 Docker의 공식 GPG(GNU Privacy Guard) 키를 시스템에 추가합니다. 이 키를 통해 다운로드하는 패키지가 변조되지 않았음을 확인할 수 있습니다.
# Docker GPG 키를 저장할 디렉토리 생성 (권한 755로 설정)
sudo install -m 0755 -d /etc/apt/keyrings
# Docker GPG 키를 다운로드하고, 암호화 해제 후 keyrings 디렉토리에 저장
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg
# Docker GPG 키 파일의 권한을 모든 사용자가 읽을 수 있도록 설정
sudo chmod a+r /etc/apt/keyrings/docker.gpg
4단계: Docker 저장소 설정
이제 Docker 패키지를 다운로드할 수 있는 공식 저장소를 APT(Advanced Package Tool) 소스 목록에 추가합니다.
echo \
"deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu \
$(. /etc/os-release && echo "$VERSION_CODENAME") stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
deb
: Debian 기반 시스템의 패키지 저장소를 나타냅니다.arch=$(dpkg --print-architecture)
: 현재 시스템의 아키텍처(예: amd64)를 자동으로 감지하여 설정합니다.signed-by=/etc/apt/keyrings/docker.gpg
: 이 저장소에서 다운로드하는 패키지가 위에서 추가한 GPG 키로 서명되었음을 확인하라는 지시입니다.https://download.docker.com/linux/ubuntu
: Docker 패키지를 다운로드할 공식 URL입니다.$(. /etc/os-release && echo "$VERSION_CODENAME")
: 현재 Ubuntu 버전의 코드네임(예:jammy
for Ubuntu 22.04,focal
for Ubuntu 20.04)을 자동으로 가져옵니다.stable
: 안정적인(stable) 버전의 Docker를 사용하겠다는 의미입니다.sudo tee ... > /dev/null
: 생성된 저장소 정보를/etc/apt/sources.list.d/docker.list
파일에 기록합니다.> /dev/null
은 표준 출력을 버려 터미널에 불필요한 내용이 출력되지 않도록 합니다.
5단계: Docker Engine 설치
이제 모든 준비가 끝났으니 Docker Engine과 관련 도구들을 설치할 차례입니다.
sudo apt update # 새로 추가된 Docker 저장소의 패키지 목록을 업데이트합니다.
sudo apt install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
docker-ce
: Docker Community Edition (CE) 엔진입니다.docker-ce-cli
: Docker 명령줄 인터페이스(CLI)입니다. Docker 명령어를 실행하는 데 사용됩니다.containerd.io
: 컨테이너 런타임입니다. Docker가 컨테이너를 실행하고 관리하는 데 필요한 핵심 구성 요소입니다.docker-buildx-plugin
: Dockerfile을 사용하여 다양한 아키텍처를 위한 이미지를 빌드하는 데 사용되는 플러그인입니다.docker-compose-plugin
: 여러 컨테이너 애플리케이션을 정의하고 실행하기 위한 도구인 Docker Compose의 플러그인 버전입니다. (기존docker-compose
독립 실행 파일 대신 이 플러그인 사용을 권장합니다.)
설치가 완료되면 Docker 서비스가 자동으로 시작되고 활성화됩니다.
6단계: Docker 설치 확인
설치가 성공적으로 완료되었는지 확인하기 위해 hello-world
이미지를 실행해봅니다.
sudo docker run hello-world
이 명령어를 실행했을 때 아래와 비슷한 메시지가 출력된다면 Docker 설치가 성공한 것입니다! 🥳
Unable to find image 'hello-world:latest' locally
latest: Pulling from library/hello-world
2db29710123e: Pull complete
Digest: sha256:d1725b8a1c9291c5644e569660100d90653068e16e453779d59244fe24754a6b
Status: Downloaded newer image for hello-world:latest
Hello from Docker!
This message shows that your installation appears to be working correctly.
To generate this message, Docker took the following steps:
1. The Docker client contacted the Docker daemon.
2. The Docker daemon pulled the "hello-world" image from the Docker Hub.
3. The Docker daemon created a new container from that image which runs the
executable that produces the "Hello from Docker!" output.
4. The Docker daemon streamed that output back to the Docker client.
For more examples and ideas, visit:
https://docs.docker.com/get-started/
7단계: Sudo 없이 Docker 명령어 사용하기 (필수!) ❗
현재는 sudo
를 붙여야만 docker
명령어를 실행할 수 있습니다. 매번 sudo
를 입력하는 것은 매우 번거롭고 실수할 가능성도 있습니다. 이를 해결하기 위해 현재 사용자를 docker
그룹에 추가해야 합니다.
sudo usermod -aG docker $USER
usermod
: 사용자 계정을 수정하는 명령어입니다.-aG
: 특정 그룹에 사용자를 추가(-a
)하고, 해당 그룹이 보조 그룹(-G
)임을 나타냅니다.docker
: 추가하려는 그룹 이름입니다. Docker 설치 시 자동으로 생성됩니다.$USER
: 현재 로그인한 사용자 이름을 나타내는 환경 변수입니다.
이 명령어를 실행한 후, 새로운 터미널을 열거나 로그아웃 후 다시 로그인해야 변경 사항이 적용됩니다. (혹은 newgrp docker
명령어를 사용하여 현재 세션에만 즉시 적용할 수도 있지만, 완벽한 적용을 위해 재로그인을 권장합니다.)
재로그인 후 sudo
없이 다음 명령어를 실행하여 확인해보세요:
docker run hello-world
sudo
없이도 정상적으로 작동한다면 성공입니다! 👍
8단계: Docker 서비스 자동 시작 설정 (선택 사항)
Docker 서비스는 기본적으로 설치 후 자동으로 시작되고 부팅 시 자동으로 활성화되도록 설정됩니다. 하지만 혹시 모를 경우를 대비해 확인하거나 수동으로 설정할 수 있습니다.
- Docker 서비스 시작:
sudo systemctl start docker
- Docker 서비스 부팅 시 자동 시작 활성화:
sudo systemctl enable docker
- Docker 서비스 상태 확인:
sudo systemctl status docker
Active: active (running)
이라고 표시되면 정상적으로 실행 중입니다.
🌐 Docker 활용 예시: Nginx 웹 서버 띄우기
Docker 설치가 완료되었으니, 간단한 예시로 Nginx 웹 서버를 컨테이너로 띄워볼까요?
docker run -d -p 80:80 --name my-nginx nginx
docker run
: 새 컨테이너를 실행하는 명령어입니다.-d
: 컨테이너를 백그라운드에서 실행(detached mode)합니다.-p 80:80
: 호스트(당신의 Ubuntu)의 80번 포트를 컨테이너의 80번 포트에 연결(매핑)합니다.--name my-nginx
: 컨테이너에my-nginx
라는 이름을 부여합니다.nginx
: 실행할 Docker 이미지 이름입니다. Docker Hub에서nginx:latest
이미지를 자동으로 다운로드하여 사용합니다.
이 명령어를 실행하면 Nginx 컨테이너가 시작됩니다. 웹 브라우저를 열고 http://localhost
또는 http://
로 접속해보세요. “Welcome to nginx!” 페이지를 볼 수 있을 거예요! 🎉
컨테이너 확인 및 관리 명령어:
- 실행 중인 컨테이너 목록 확인:
docker ps
- Nginx 컨테이너 로그 확인:
docker logs my-nginx
- Nginx 컨테이너 중지:
docker stop my-nginx
- Nginx 컨테이너 삭제:
docker rm my-nginx
(컨테이너를 삭제하려면 먼저 중지해야 합니다.)
⚠️ 자주 발생하는 문제 및 해결 방법
-
sudo
없이 Docker 명령어가 실행되지 않아요!- 원인: 사용자가
docker
그룹에 포함되지 않았거나, 변경사항이 적용되지 않았습니다. - 해결:
sudo usermod -aG docker $USER
명령어를 실행한 후, 반드시 로그아웃했다가 다시 로그인해야 합니다. - (임시 방편:
newgrp docker
명령어로 현재 터미널 세션에만 적용할 수 있지만, 지속적인 사용을 위해서는 재로그인이 필요합니다.)
- 원인: 사용자가
-
Cannot connect to the Docker daemon. Is the docker daemon running on this host?
에러가 발생해요.- 원인: Docker 서비스가 실행되고 있지 않습니다.
- 해결:
sudo systemctl status docker
명령어로 상태를 확인하고,sudo systemctl start docker
명령어로 서비스를 시작합니다. 부팅 시 자동 시작되도록sudo systemctl enable docker
도 실행하는 것이 좋습니다.
-
Permission denied while trying to connect to the Docker daemon socket
에러가 발생해요.- 원인:
docker
그룹에 대한 권한 문제이거나,docker.sock
파일의 권한 문제일 수 있습니다. - 해결: 대부분
sudo usermod -aG docker $USER
후 재로그인으로 해결됩니다. 만약 그래도 안 된다면,sudo chmod 666 /var/run/docker.sock
명령어를 시도해 볼 수 있지만, 이는 보안상 좋은 방법은 아니며 임시 해결책으로 사용하세요.
- 원인:
📝 마무리하며
축하합니다! 🎉 이제 당신의 Ubuntu 시스템에 Docker가 성공적으로 설치되었고, 컨테이너를 직접 실행해보는 경험까지 하셨습니다. Docker는 개발 환경을 구축하고 애플리케이션을 배포하는 방식을 혁신하는 강력한 도구입니다.
이 가이드를 통해 Docker에 대한 첫 걸음을 떼셨기를 바라며, 앞으로 Docker를 활용하여 더욱 효율적이고 즐거운 개발 생활을 이어가시길 바랍니다. 궁금한 점이 있다면 언제든지 질문해주세요!
다음 단계로는 Dockerfile로 직접 이미지를 만들어 보거나, Docker Compose를 사용하여 여러 컨테이너를 한 번에 관리하는 방법을 학습해보는 것을 추천합니다. Happy Dockering! 👍