Ubuntu에서 Docker 사용 방법: 설치, 이미지, Dockerfile 및 최적화 완전 가이드

目次

1. 소개

Docker란?

Docker는 컨테이너 기반 가상화 기술을 활용하여 애플리케이션을 효율적으로 개발·배포·실행할 수 있게 해 주는 플랫폼입니다. 기존의 가상 머신(VM)과 달리 컨테이너는 호스트 OS 커널을 공유하므로 시작 속도가 빠르고 자원 소비가 적습니다.

Ubuntu에서 Docker를 사용할 때의 장점

Ubuntu는 Docker와 높은 호환성을 갖춘 리눅스 배포판 중 하나입니다. 주요 이유는 다음과 같습니다:

  • 공식 지원 : Docker는 Ubuntu를 공식적으로 지원하므로 공식 저장소를 통해 손쉽게 설치할 수 있습니다.
  • 안정적인 패키지 관리 : Ubuntu의 APT 패키지 관리자를 이용하면 버전 관리가 간편합니다.
  • 광범위한 커뮤니티 지원 : 전 세계적으로 많은 사용자가 Ubuntu를 사용하고 있어 문제 발생 시 해결이 용이합니다.

이 문서에서 배울 내용

이 가이드는 다음 주제를 단계별로 설명합니다:

  1. Ubuntu에 Docker 설치하기
  2. Docker 이미지 기본 작업
  3. Dockerfile을 이용한 커스텀 이미지 만들기
  4. Ubuntu 컨테이너에서 일본어 로케일 설정하기
  5. Docker 이미지 최적화 및 최소화
  6. Ubuntu 컨테이너 내부에서 애플리케이션 개발하기
  7. 흔히 발생하는 오류와 문제 해결 방법

초보자와 고급 사용자 모두에게 유용한 내용이니, 필요할 때 언제든 참고하시기 바랍니다.

2. Ubuntu에 Docker 설치

공식 저장소를 이용한 Docker 설치

Ubuntu에서는 공식 저장소를 통해 Docker를 손쉽게 설치할 수 있습니다. 아래 단계에 따라 환경을 구성해 보세요.

1. 기존 Docker 패키지 제거

Ubuntu에는 docker.io 라는 패키지가 기본으로 포함될 수 있는데, 이는 오래된 버전일 수 있습니다. 최신 Docker를 설치하기 전에 해당 패키지를 제거합니다.

sudo apt remove docker docker-engine docker.io containerd runc

2. 필수 패키지 설치

설치 전에 필요한 의존성 패키지를 먼저 설치합니다.

sudo apt update
sudo apt install -y apt-transport-https ca-certificates curl software-properties-common

3. 공식 Docker 저장소 추가

Docker의 공식 GPG 키를 추가하고 저장소를 설정합니다.

curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg
echo "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null

4. Docker 설치

저장소를 추가한 뒤 Docker를 설치합니다.

sudo apt update
sudo apt install -y docker-ce docker-ce-cli containerd.io

5. 설치 확인

버전 정보를 출력하여 Docker가 정상적으로 설치되었는지 확인합니다.

docker --version

설치 후 초기 설정

1. Docker 서비스 시작 및 자동 시작 활성화

Docker 서비스를 시작하고 부팅 시 자동으로 시작되도록 설정합니다.

sudo systemctl start docker
sudo systemctl enable docker

2. 비루트 사용자에게 Docker 실행 권한 부여

기본적으로 Docker는 루트 사용자만 실행할 수 있습니다. 일반 사용자도 Docker 명령을 사용할 수 있도록 권한을 부여합니다.

sudo usermod -aG docker $USER

변경 사항을 적용하려면 로그아웃 후 다시 로그인합니다.

3. Docker 동작 테스트

일반 사용자 계정으로 hello-world 컨테이너를 실행해 봅니다.

docker run hello-world

출력에 “Hello from Docker!”가 포함되어 있으면 설치가 성공적으로 완료된 것입니다.

3. Docker 이미지 기본 작업

Docker 이미지란?

Docker 이미지는 컨테이너를 생성하기 위한 템플릿 역할을 합니다. Ubuntu 기반 Docker 이미지를 사용하면 Ubuntu 환경을 빠르게 시작할 수 있습니다.

Docker Hub에서 Ubuntu 이미지 가져오기

Docker Hub에는 다양한 공식 Docker 이미지가 제공됩니다. Ubuntu 이미지를 다운로드하려면 다음 명령을 실행합니다:

docker pull ubuntu

컨테이너 시작 및 중지

다운로드한 Ubuntu 이미지를 이용해 컨테이너를 시작하려면 다음을 실행합니다:

docker run -it ubuntu bash

이것은 Ubuntu 컨테이너 내부에서 셸을 열어 그 안에서 작업할 수 있게 합니다.

컨테이너 나열

실행 중인 컨테이너 표시:

docker ps

중지된 컨테이너를 포함한 모든 컨테이너 표시:

docker ps -a

컨테이너 중지 및 제거

실행 중인 컨테이너 중지:

docker stop [container ID or name]

불필요한 컨테이너 제거:

docker rm [container ID or name]

Docker 이미지 관리

다운로드된 Docker 이미지 목록:

docker images

이미지 제거:

docker rmi [image ID]

4. Dockerfile을 사용한 사용자 지정 이미지 생성

Dockerfile이란?

Dockerfile은 Docker 이미지를 빌드하는 데 사용되는 구성 파일입니다. Dockerfile에 작성된 지침에 따라 사용자 지정 Docker 이미지를 생성할 수 있습니다. 이를 통해 개발 환경을 통합하거나 필요한 패키지를 포함한 이미지를 만들 수 있습니다.

Dockerfile의 기본 구문

Dockerfile은 일반적으로 다음 명령어를 포함합니다:

CommandDescription
FROMSpecifies the base image
RUNExecutes commands to build the image
COPYCopies files into the container
WORKDIRSets the working directory
CMDDefault command executed when the container starts
ENTRYPOINTDefines the entry point of the container

사용자 지정 Ubuntu 기반 이미지 생성

아래 단계를 따라 사용자 지정 Ubuntu 기반 Docker 이미지를 생성하세요.

1. 작업 디렉토리 생성

먼저 새 프로젝트 디렉토리를 생성하고 이동합니다.

mkdir my-ubuntu-image
cd my-ubuntu-image

2. Dockerfile 생성

디렉토리 내부에 Dockerfile을 생성하고 다음 내용을 작성합니다:

# Base Ubuntu official image
FROM ubuntu:latest

# Maintainer information (optional)
LABEL maintainer="your-email@example.com"

# Update package list and install basic tools
RUN apt update && apt install -y curl vim git

# Set working directory
WORKDIR /workspace

# Default command when the container starts
CMD ["bash"]

3. Docker 이미지 빌드

Dockerfile에서 사용자 지정 이미지를 빌드합니다:

docker build -t my-ubuntu-image .

-t 옵션은 이미지에 이름을 지정합니다.

4. 이미지 확인

새로 빌드된 이미지를 확인합니다:

docker images

5. 컨테이너 실행

사용자 지정 이미지에서 컨테이너를 시작합니다:

docker run -it my-ubuntu-image

이 이미지는 curlvim과 같은 도구를 포함합니다.

5. Ubuntu 컨테이너에서 일본어 환경 설정

기본 Ubuntu 이미지는 영어 환경을 사용합니다. 일본어를 사용하려면 추가 구성이 필요합니다.

일본어 로케일 설정

Ubuntu 컨테이너에서 일본어 표시와 입력을 활성화하려면 일본어 로케일을 설치합니다.

1. 필요한 패키지 설치

apt update
apt install -y language-pack-ja locales

2. 로케일 구성

로케일을 생성하고 적용합니다:

locale-gen ja_JP.UTF-8
update-locale LANG=ja_JP.UTF-8

3. 설정 적용

export LANG=ja_JP.UTF-8

일본어 입력 설정

터미널에서 일본어 문자를 입력하려면 ibus-mozc를 설치합니다:

apt install -y ibus-mozc

GUI 애플리케이션을 사용하는 경우 다음 환경 변수를 추가합니다:

export GTK_IM_MODULE=ibus
export XMODIFIERS=@im=ibus
export QT_IM_MODULE=ibus

GUI 애플리케이션 사용

Docker 컨테이너 내부에서 GUI 애플리케이션을 실행하려면 호스트 머신의 X 서버를 사용합니다.

X11을 활성화하여 컨테이너를 실행합니다:

docker run -e DISPLAY=$DISPLAY -v /tmp/.X11-unix:/tmp/.X11-unix my-ubuntu-image

6. Docker 이미지 최적화 및 최소화

Docker 이미지를 최적화하면 컨테이너 시작 속도를 향상시키고 저장소 사용량을 줄일 수 있습니다. 경량 이미지를 생성하는 여러 기법을 소개합니다.

경량 Ubuntu 기반 이미지 생성 방법

기본 ubuntu:latest 이미지는 상대적으로 큽니다. ubuntu:minimal과 같은 더 경량 옵션을 사용하면 컨테이너 크기를 줄일 수 있습니다.

FROM ubuntu:minimal

또 다른 옵션은 Ubuntu보다 훨씬 작은 Alpine Linux를 사용하는 것입니다.

FROM alpine:latest
RUN apk add --no-cache bash curl

Alpine을 사용하면 이미지 크기를 수백 메가바이트 줄일 수 있습니다.

불필요한 파일 제거를 통한 이미지 크기 줄이기

You can reduce image size by deleting unnecessary cache files created by apt-get.

RUN apt update && apt install -y curl vim \
    && apt clean \
    && rm -rf /var/lib/apt/lists/*

In particular, the rm -rf /var/lib/apt/lists/* command removes package lists and unused data.

멀티스테이지 빌드 사용

멀티스테이지 빌드를 사용하면 빌드 과정에서만 도구를 사용하고 최종 이미지에서는 가볍게 유지할 수 있습니다.

FROM ubuntu as builder
RUN apt update && apt install -y gcc

FROM ubuntu:minimal
COPY --from=builder /usr/bin/gcc /usr/bin/gcc

This way, you avoid including development tools in the final image, resulting in a much smaller footprint.

7. 실용 예제: Ubuntu 컨테이너에서 애플리케이션 개발

이 섹션에서는 Ubuntu 컨테이너 내부에 개발 환경을 설정하는 방법을 소개합니다.

Python 개발 환경 설정

Ubuntu 컨테이너에서 Python 개발 환경을 설정하기 위해 다음 Dockerfile을 작성하십시오:

FROM ubuntu:latest
RUN apt update && apt install -y python3 python3-pip
CMD ["python3"]

Build the image and run the container:

docker build -t python-dev .
docker run -it python-dev

This environment allows you to use the python3 command for script development and testing.

Node.js 개발 환경 설정

Node.js 개발 환경을 설정하려면 다음 Dockerfile을 사용하십시오:

FROM ubuntu:latest
RUN apt update && apt install -y nodejs npm
CMD ["node"]

Build and run the container:

docker build -t node-dev .
docker run -it node-dev

This environment enables JavaScript execution and application development with the node command.

8. FAQ 및 문제 해결

Docker를 사용하면 다양한 문제가 발생할 수 있습니다. 아래는 일반적인 질문과 전형적인 해결책입니다.

Docker와 가상 머신의 차이점

  • Docker : 호스트 OS 커널을 공유하여 가볍고 컨테이너 시작이 빠릅니다.
  • 가상 머신(VM) : 각 VM이 자체 OS를 포함하므로 리소스 사용량이 많고 시작이 느립니다.

Docker는 리소스 최적화에 뛰어나며 개발 환경 및 자동 배포에 적합합니다.

Ubuntu 컨테이너에서 데이터 영구 보관

컨테이너가 중지된 후에도 데이터를 유지하려면 볼륨 마운트를 사용하십시오:

docker run -v my_data:/data ubuntu

컨테이너가 삭제되더라도 my_data 볼륨에 저장된 데이터는 재사용할 수 있습니다.

일반적인 오류 및 해결책

1. permission denied 오류

Docker를 실행하려고 할 때 permission denied가 표시되면 사용자가 docker 그룹에 속해 있지 않을 수 있습니다.

사용자를 Docker 그룹에 추가하십시오:

sudo usermod -aG docker $USER

변경 사항을 적용하려면 로그아웃 후 다시 로그인하십시오.

2. image not found 오류

이미지가 Docker Hub에서 제거된 경우, 풀할 때 최신 태그를 지정하십시오:

docker pull ubuntu:22.04

명시적인 버전을 지정하면 올바른 이미지를 가져올 수 있습니다.

年収訴求