공식 문서: Install Docker Engine on Ubuntu, Install the Docker Compose plugin
Ubuntu에서 Docker를 설치할 때는 apt install docker.io로도 설치할 수 있다.
하지만 Docker 공식 문서 기준으로는 Docker의 apt repository를 등록한 뒤 docker-ce, docker-ce-cli, containerd.io, docker-buildx-plugin, docker-compose-plugin을 설치하는 방식이 권장된다.
이 글에서는 Ubuntu 서버 기준으로 Docker Engine과 Docker Compose plugin을 설치한다.
기존 패키지 제거
이미 Ubuntu 기본 저장소의 Docker 패키지를 설치한 적이 있다면 먼저 제거한다.
sudo apt-get remove docker.io docker-doc docker-compose docker-compose-v2 podman-docker containerd runc
설치된 패키지가 없으면 제거할 것이 없다는 메시지가 나올 수 있다. 그 경우 그냥 다음 단계로 넘어가면 된다.
Docker apt repository 등록
먼저 package index를 업데이트하고, HTTPS repository 사용에 필요한 패키지를 설치한다.
sudo apt-get update
sudo apt-get install ca-certificates curl
Docker GPG key를 저장할 디렉터리를 만든다.
sudo install -m 0755 -d /etc/apt/keyrings
Docker 공식 GPG key를 내려받는다.
sudo curl -fsSL https://download.docker.com/linux/ubuntu/gpg -o /etc/apt/keyrings/docker.asc
apt가 key 파일을 읽을 수 있게 권한을 설정한다.
sudo chmod a+r /etc/apt/keyrings/docker.asc
이제 Docker repository를 apt source에 추가한다.
echo \
"deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.asc] https://download.docker.com/linux/ubuntu \
$(. /etc/os-release && echo "${UBUNTU_CODENAME:-$VERSION_CODENAME}") stable" | \
sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
repository를 추가했으므로 package index를 다시 업데이트한다.
sudo apt-get update
Docker Engine 설치
다음 명령어로 Docker Engine, CLI, containerd, Buildx, Compose plugin을 설치한다.
sudo apt-get install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
설치가 끝나면 Docker daemon 상태를 확인한다.
sudo systemctl status docker
만약 실행 중이 아니라면 직접 시작한다.
sudo systemctl start docker
부팅 시 자동 실행되게 하려면 다음 명령어를 사용한다.
sudo systemctl enable docker
설치 확인
Docker가 정상 설치되었는지 확인한다.
sudo docker run hello-world
이 명령어는 hello-world 이미지를 내려받고 container를 실행한 뒤 종료한다.
정상적으로 실행되면 Docker Engine 설치가 완료된 것이다.
버전도 확인한다.
docker --version
sudo 없이 Docker 사용하기
기본적으로 Docker 명령어는 root 권한이 필요하다.
매번 sudo docker ...를 입력하기 싫다면 현재 사용자를 docker group에 추가한다.
sudo usermod -aG docker $USER
변경사항을 적용하려면 로그아웃 후 다시 로그인한다. SSH 접속 중이라면 세션을 종료한 뒤 다시 접속하면 된다.
다시 로그인한 뒤 다음 명령어가 sudo 없이 동작하는지 확인한다.
docker run hello-world
주의할 점은 docker group에 속한 사용자는 Docker daemon을 통해 root 수준의 작업을 할 수 있다는 것이다.
따라서 서버에서 아무 사용자나 docker group에 넣으면 안 된다.
Docker Compose 설치 확인
요즘 Docker Compose는 별도 docker-compose binary보다 Docker CLI plugin 형태인 docker compose를 사용한다.
앞에서 docker-compose-plugin을 함께 설치했으므로 별도 설치가 필요 없다.
Compose 버전을 확인한다.
docker compose version
여기서 주의할 점은 명령어가 docker-compose가 아니라 docker compose라는 것이다.
| 구분 | 설명 |
|---|---|
docker compose | Docker CLI plugin 방식 |
docker-compose | 예전 standalone binary 방식 |
새로 설치한다면 docker compose를 기준으로 사용하는 것이 좋다.
docker-compose.yml 테스트
간단한 Compose 파일을 만들어 동작을 확인해보자.
services:
nginx:
image: nginx:latest
ports:
- "8080:80"
예를 들어 compose-test 디렉터리를 만들고 docker-compose.yml을 저장한다.
mkdir compose-test
cd compose-test
vi docker-compose.yml
실행은 다음과 같다.
docker compose up -d
container 상태를 확인한다.
docker compose ps
브라우저나 curl로 8080 port에 접근한다.
curl http://localhost:8080
Nginx 기본 HTML이 보이면 Compose도 정상 동작하는 것이다.
테스트가 끝나면 container를 종료하고 제거한다.
docker compose down
자주 쓰는 명령어
설치 후 자주 사용하는 명령어는 다음과 같다.
| 명령어 | 의미 |
|---|---|
docker ps | 실행 중인 container 목록 |
docker ps -a | 전체 container 목록 |
docker images | local image 목록 |
docker logs <container> | container log 확인 |
docker exec -it <container> bash | container 내부 shell 접속 |
docker compose up -d | Compose service background 실행 |
docker compose down | Compose service 종료 및 제거 |
docker compose logs -f | Compose service log follow |
삭제 방법
Docker 패키지를 제거하려면 다음 명령어를 사용한다.
sudo apt-get purge docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
이미지, container, volume까지 삭제하려면 Docker data directory도 제거해야 한다.
sudo rm -rf /var/lib/docker
sudo rm -rf /var/lib/containerd
이 명령어는 기존 container와 volume 데이터를 삭제하므로 운영 서버에서는 반드시 확인 후 실행해야 한다.
정리
Ubuntu에서 Docker와 Docker Compose를 설치하는 기본 흐름은 다음과 같다.
- 기존 Docker 관련 패키지를 제거한다.
- Docker 공식 GPG key와 apt repository를 등록한다.
docker-ce,docker-ce-cli,containerd.io,docker-buildx-plugin,docker-compose-plugin을 설치한다.sudo docker run hello-world로 Docker Engine을 확인한다.docker compose version으로 Docker Compose plugin을 확인한다.- 필요하면 사용자를
dockergroup에 추가한다.
새로운 환경에서는 docker-compose보다 docker compose를 기준으로 명령어를 익히는 것이 좋다.