Linux/Ubuntu

[Ubuntu/v24.04.3 LTS] Docker Engine 및 Docker Compose 설치

카르마요기 2025. 11. 27. 14:51

■ 개요

- Docker Engine : 개별 컨테이너를 생성하고 실행하는 기본적인 도구
- Docker Compose : 여러 컨테이너를 하나의 서비스로 정의하고 관리하기 위한 도구

- OS 요구 사항

  . Docker Engine을 설치하려면 다음 Ubuntu 버전 중 하나의 64비트 버전이 필요
    + 우분투 퀘스팅 25.10
    +  우분투 플러키 25.04
    +  우분투 노블 24.04(LTS)
    +  우분투 Jammy 22.04(LTS)
    ※ Ubuntu용 Docker Engine은 x86_64(또는 amd64), armhf, arm64, s390x, ppc64le(ppc64el) 아키텍처와 호환
- 방화벽 제한 사항

  . ufw 또는 firewalld를 사용하여 방화벽 설정을 관리하는 경우, Docker를 사용하여 컨테이너 포트를 노출하면 해당 포트가 방화벽 규칙을 우회

  . 도커는 iptables-nftiptables-legacy 와만 호환 됨.

■ 사전작업

#01. 이전 버젼 제거

-  Linux 배포판에서 제공하는 비공식 Docker 패키지는 Docker에서 제공하는 공식 패키지와 충돌할 수 있기 때문에, Docker Engine 공식 버전을 설치하기 전에 이러한 패키지를 제거해야 함

- 제거해야 할 비공식 패키지는 다음과 같습니다.
  . docker.io
  . docker-compose
  . docker-compose-v2
  . docker-doc
  . podman-docker

  또한 Docker Engine은 containerd 와 runc 에 종속됨. Docker Engine과 함께 제공되는 버전과의 충돌을 방지하기 위해 containerd와 runc룰 제거 해야 함

CMD] sudo apt remove $(dpkg --get-selections docker.io docker-compose docker-compose-v2 docker-doc podman-docker containerd runc | cut -f1)
CMD] sudo apt purge docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin docker-ce-rootless-extras
CMD] sudo rm -rf /var/lib/docker
CMD] sudo rm -rf /var/lib/containerd
CMD] sudo rm /etc/apt/sources.list.d/docker.sources
CMD] sudo rm /etc/apt/keyrings/docker.asc

  

 

■ 작업순서

# step01. Docker apt저장소를 설정

# Add Docker's official GPG key:
CMD] sudo apt update
CMD] sudo apt install ca-certificates curl
CMD] sudo install -m 0755 -d /etc/apt/keyrings
CMD] sudo curl -fsSL https://download.docker.com/linux/ubuntu/gpg -o /etc/apt/keyrings/docker.asc
CMD] sudo chmod a+r /etc/apt/keyrings/docker.asc

# Add the repository to Apt sources:
CMD] sudo tee /etc/apt/sources.list.d/docker.sources <<EOF
Types: deb
URIs: https://download.docker.com/linux/ubuntu
Suites: $(. /etc/os-release && echo "${UBUNTU_CODENAME:-$VERSION_CODENAME}")
Components: stable
Signed-By: /etc/apt/keyrings/docker.asc
EOF
CMD] sudo apt update

# step02. Docker Engine 패키지 설치

# 최신 버젼 설치
CMD] sudo apt install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin

# 설치 가능한 버젼 확인
CMD] apt list --all-versions docker-ce
-----------------Example----------
docker-ce/noble 5:29.0.4-1~ubuntu.24.04~noble <arch>
docker-ce/noble 5:29.0.3-1~ubuntu.24.04~noble <arch>
...
-----------------Example----------END

# 원하는 버젼 선택/설치
CMD] VERSION_STRING=5:29.0.4-1~ubuntu.24.04~noble
CMD] sudo apt install docker-ce=$VERSION_STRING docker-ce-cli=$VERSION_STRING containerd.io docker-buildx-plugin docker-compose-plugin

# step03. Docker Engine 서비스 상태 확인

CMD] sudo systemctl daemon-reload
CMD] sudo systemctl enable --now docker
CMD] sudo systemctl status docker

# 이미지 를 실행하여 설치가 성공적으로 완료되었는지 확인하세요
CMD] sudo docker --version
CMD] sudo docker run hello-world

# step04. Docker Compose 바이너리 다운로드 및 실행 설정

CMD] sudo curl -L "https://github.com/docker/compose/releases/download/v5.0.0-rc.2/docker-compose-linux-x86_64" -o /usr/local/bin/docker-compose
CMD] sudo chmod +x /usr/local/bin/docker-compose

CMD] sudo ln -s /usr/local/bin/docker-compose /usr/bin/docker-compose
CMD] sudo docker-compose -v

# step05. Docker Compose 실행 샘플

CMD] sudo mkdir -p /app/docker/composetest
CMD] sudo chown -R uenter:uenters -R /app/docker
CMD] cd /app/docker/composetest
CMD] vi app.py
--------------ADD---------------
import time

import redis
from flask import Flask

app = Flask(__name__)
cache = redis.Redis(host='redis', port=6379)

def get_hit_count():
    retries = 5
    while True:
        try:
            return cache.incr('hits')
        except redis.exceptions.ConnectionError as exc:
            if retries == 0:
                raise exc
            retries -= 1
            time.sleep(0.5)

@app.route('/')
def hello():
    count = get_hit_count()
    return f'Hello World! I have been seen {count} times.\n'
--------------ADD---------------END

CMD] vi requirements.txt
--------------ADD---------------
flask
redis
--------------ADD---------------END

CMD] vi Dockerfile
--------------ADD---------------
# syntax=docker/dockerfile:1
FROM python:3.10-alpine
WORKDIR /code
ENV FLASK_APP=app.py
ENV FLASK_RUN_HOST=0.0.0.0
RUN apk add --no-cache gcc musl-dev linux-headers
COPY requirements.txt requirements.txt
RUN pip install -r requirements.txt
EXPOSE 5000
COPY . .
CMD ["flask", "run", "--debug"]
--------------ADD---------------END

CMD] vi compose.yaml
--------------ADD---------------
services:
  web:
    build: .
    ports:
      - "8000:5000"
  redis:
    image: "redis:alpine"
--------------ADD---------------END

CMD] sudo docker compose up

CMD] curl -v http://localhost:8000

CMD] docker image ls

CMD] cd /app/docker/composetest
CMD] sudo docker compose down



 

 

 

 

 

 

반응형