한줄공지
  • 등록된 공지내용이 없습니다.

우분투(Ubuntu) Docker 퍼펙트 가이드

2023년 4월 13일
조회수 118
코멘트 0

목차

Ubuntu와 Docker에 대한 개요

Ubuntu는 개발자와 서버 관리자를 위한 무료 운영 체제(OS) 중 하나로, Debian을 기반으로 한다. Ubuntu의 LTS(Long Term Support)는 안정적인 버전으로, 데스크톱 및 서버에서 사용할 수 있다.

Docker는 컨테이너 기반의 가상화 플랫폼으로, 애플리케이션을 독립적인 환경에서 실행할 수 있도록 해준다. 이를 통해 애플리케이션 개발 및 배포를 더욱 효율적으로 처리할 수 있으며, 시스템 자원의 사용을 최적화할 수 있다. Docker는 오픈소스로 누구나 사용 가능하며, 다양한 운영 체제에서 동작한다.

 

Docker 설치 전 확인해야 할 사항

 

시스템 요구사항

  • Ubuntu 18.04 LTS 이상
  • 64비트 아키텍처
  • CPU 가상화 지원

 

기존 Docker 설치 여부 확인

$ docker --version

Docker가 설치되어 있지 않은 경우에는 해당 명령어를 실행해도 출력이 나오지 않습니다.

 

Docker 설치 방법

이 문서에서 사용된 설치 방법은 다음 우분투 버전에서 정상적으로 사용 할 수 있습니다.

  • Ubuntu 18.04 LTS
  • Ubuntu 20.04 LTS
  • Ubuntu 22.04 LTS
  • Ubuntu 23.04

 

Docker 설치를 위한 사전 작업

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

Ubuntu의 패키지 인덱스를 업데이트하고, HTTPS 연결을 통해 패키지를 다운로드할 수 있도록 패키지 관련 도구를 설치합니다.

 

Docker 설치 스크립트 실행

$ curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -
$ sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable"
$ sudo apt update -y
$ sudo apt install -y docker-ce docker-ce-cli containerd.io
$ docker version</code>
</pre>

<p>Docker 공식 GPG 키를 추가하고 Docker의 stable 버전을 사용할 수 있도록 리포지토리를 추가합니다. 그리고 다시 패키지 인덱스를 업데이트하고 Docker Engine을 설치합니다.</p>

<p> </p>

<h3>Docker Compose 설치</h3>

<pre><code lang="bash">$ sudo curl -L &quot;https://github.com/docker/compose/releases/latest/download/docker-compose-$(uname -s)-$(uname -m)&quot; -o /usr/local/bin/docker-compose
$ sudo chmod +x /usr/local/bin/docker-compose
$ docker-compose --version

Docker Compose를 다운로드합니다. 그리고 설치가 제대로 되었는지 확인합니다.

 

Docker 사용 예시

Docker는 애플리케이션을 컨테이너 단위로 실행하여 개발, 테스트, 배포 등 다양한 용도로 활용할 수 있습니다. 이번에는 Docker를 사용하는 몇 가지 예시를 살펴보겠습니다.

 

이미지 다운로드 및 실행

Docker 이미지는 컨테이너를 실행하기 위한 파일 시스템과 애플리케이션 설정 정보를 담고 있습니다. Docker Hub에서 제공하는 공식 이미지를 다운로드하여 실행해 볼 수 있습니다. 예를 들어, Redis 데이터베이스를 Docker 이미지로 실행하는 경우 다음과 같은 명령어를 사용합니다.

$ docker run --name my-redis -d redis

위 명령어를 실행하면 Redis 컨테이너가 실행되며, 이름이 my-redis로 지정되고 백그라운드에서 실행됩니다.

 

컨테이너 생성 및 실행

Docker는 사용자 정의 컨테이너를 생성하고 실행할 수 있습니다. 예를 들어, Ubuntu 20.04를 기반으로 하는 컨테이너를 생성하여 실행하는 경우 다음과 같은 명령어를 사용합니다.

$ docker run -it ubuntu:20.04 /bin/bash

위 명령어를 실행하면 Ubuntu 20.04 컨테이너가 실행되며, 인터랙티브 모드로 실행되어 Bash 쉘을 사용할 수 있습니다.

 

컨테이너 삭제 및 정지

Docker 컨테이너를 삭제하려면 docker rm 명령어를 사용합니다. 예를 들어, 이름이 my-redis인 Redis 컨테이너를 삭제하는 경우 다음과 같은 명령어를 사용합니다.

$ docker rm my-redis

Docker 컨테이너를 정지하려면 docker stop 명령어를 사용합니다. 예를 들어, 이름이 my-redis인 Redis 컨테이너를 정지하는 경우 다음과 같은 명령어를 사용합니다.

$ docker stop my-redis

위와 같은 예시를 통해 Docker를 사용하여 애플리케이션을 실행하고 관리하는 방법을 익힐 수 있습니다.

 

Docker 관련 명령어

도커 이미지 관련 명령어

  • docker images: 로컬에 저장된 모든 도커 이미지를 확인합니다.
  • docker pull [이미지명]: 도커 이미지를 다운로드합니다.
  • docker rmi [이미지명]: 로컬에 저장된 도커 이미지를 삭제합니다.

도커 컨테이너 관련 명령어

  • docker ps: 현재 실행 중인 컨테이너 목록을 확인합니다.
  • docker run [이미지명]: 새로운 컨테이너를 생성하고 실행합니다.
  • docker start [컨테이너명]: 정지된 컨테이너를 시작합니다.
  • docker stop [컨테이너명]: 실행 중인 컨테이너를 정지합니다.
  • docker rm [컨테이너명]: 컨테이너를 삭제합니다.

도커 네트워크 관련 명령어

  • docker network ls: 도커 네트워크 목록을 확인합니다.
  • docker network create [네트워크명]: 새로운 네트워크를 생성합니다.

도커 볼륨 관련 명령어

  • docker volume ls: 도커 볼륨 목록을 확인합니다.
  • docker volume create [볼륨명]: 새로운 볼륨을 생성합니다.

기타 명령어

  • docker exec [컨테이너명] [명령어]: 실행 중인 컨테이너에서 명령어를 실행합니다.
  • docker commit [컨테이너명] [이미지명]: 컨테이너에서 변경된 내용을 새로운 이미지로 저장합니다.
  • docker login: 도커 레지스트리에 로그인합니다.
  • docker push [이미지명]: 로컬에서 생성한 도커 이미지를 도커 레지스트리에 업로드합니다.

 

Docker의 장단점

 

장점

  1. 가볍고 빠르다: 컨테이너는 가상화 기술 중에서도 가장 가볍고 빠릅니다. 가상 머신처럼 하드웨어 자원을 완전히 가상화하지 않기 때문에, 호스트 운영체제와 거의 동일한 속도로 작동합니다.
  2. 환경 일관성: Docker를 사용하면 모든 서버, 개발자 컴퓨터, 빌드 환경 등에서 동일한 개발/실행 환경을 구축할 수 있습니다. 이것은 응용 프로그램을 테스트하고 배포하는 데 매우 유용합니다.
  3. 쉬운 이식성: Docker 컨테이너는 호스트 운영체제와 관계없이 실행될 수 있기 때문에, 어디에서든 쉽게 이식할 수 있습니다.
  4. 확장성: Docker는 여러 컨테이너를 클러스터로 묶어서 응용 프로그램을 확장하는 것이 매우 쉽습니다.
  5. 높은 보안성: Docker는 격리 기술을 사용하기 때문에, 컨테이너를 통해 응용 프로그램을 실행할 때 호스트 운영체제나 다른 컨테이너에 영향을 끼치지 않습니다.

 

단점

  1. 복잡한 구성: Docker는 가상화를 이용하는 기술이기 때문에, 설치 및 구성이 상대적으로 복잡합니다.
  2. 커널 호환성: 호스트 운영체제와 컨테이너 운영체제의 커널 호환성 문제가 발생할 수 있습니다. 이 경우, 컨테이너 운영체제를 업그레이드하거나 호스트 운영체제를 변경해야 합니다.
  3. 자원 제한: Docker는 컨테이너를 격리시키기 위해 리소스를 제한하는데, 이로 인해 응용 프로그램이 특정 리소스에 대해 충분한 권한을 가지지 못하는 문제가 발생할 수 있습니다.
  4. 가상화 오버헤드: Docker 컨테이너는 호스트 운영체제와 일부 자원을 공유하므로 가상화 오버헤드가 발생할 수 있습니다. 이것은 어떤 환경에서는 무시할 수 있지만, 고성능 환경에서는 문제가 될수 있습니다.
  5. 보안 이슈: Docker는 여러 컨테이너를 호스트에서 실행하기 때문에, 각 컨테이너의 보안을 철저히 관리하지 않으면 보안 이슈가 발생할 수 있습니다. 예를 들어, 컨테이너 내부에서 발생하는 네트워크 트래픽이 호스트 운영체제와 공유되는 경우, 이를 악용할 수 있는 공격이 가능합니다.
  6. 파일 시스템 문제: Docker 컨테이너는 호스트 운영체제의 파일 시스템을 공유하지만, 파일 시스템의 호환성 문제가 발생할 수 있습니다. 예를 들어, Windows 호스트에서 Linux 컨테이너를 실행할 경우, 파일 시스템 호환성 문제가 발생할 수 있습니다.
  7. 라이선스 문제: Docker 컨테이너 내에서 사용하는 소프트웨어에 대한 라이선스 문제가 발생할 수 있습니다. 예를 들어, GPL 라이선스를 가진 소프트웨어를 컨테이너 내에서 실행하면, GPL 라이선스에 따라 소스코드를 공개해야 하는 경우가 발생할 수 있습니다.
  8. 데이터 지속성: Docker 컨테이너는 일반적으로 임시적인 자원으로 사용되기 때문에, 컨테이너가 삭제되면 데이터도 함께 삭제될 수 있습니다. 이 문제를 해결하기 위해서는 데이터를 별도의 볼륨에 저장하거나, 데이터베이스 등을 사용해야 합니다.

 

Docker와 관련된 주요 개념 설명

Docker는 컨테이너 기반 가상화 기술을 이용하여 애플리케이션을 배포 및 실행하는 플랫폼입니다. 이를 이해하기 위해 다음과 같은 주요 개념들에 대해 설명해보겠습니다.

  1. 이미지 (Image)
  • 컨테이너 실행에 필요한 파일과 설정값 등을 포함하고 있는 불변의 패키지입니다.
  • 도커 이미지는 레지스트리에 저장되어 다른 사용자들이 공유 및 사용할 수 있습니다.
  1. 컨테이너 (Container)
  • 이미지를 실행한 상태로, 독립적인 공간에서 애플리케이션을 실행하는 경량화된 가상환경입니다.
  • 도커 컨테이너는 이미지를 기반으로 생성되며, 컨테이너의 상태가 변경되어도 이미지는 변경되지 않습니다.
  1. 레지스트리 (Registry)
  • 도커 이미지가 저장되는 저장소입니다.
  • 도커 허브(Docker Hub)와 같은 공개 레지스트리와, 도커 엔터프라이즈(Docker Enterprise)와 같은 사설 레지스트리가 있습니다.
  1. 도커 컴포즈 (Docker Compose)
  • 여러 개의 도커 컨테이너를 정의하고 실행하는 도구입니다.
  • YAML 파일로 정의되며, 여러 컨테이너 간의 의존성 관계를 설정할 수 있습니다.
  1. 네트워크 (Network)
  • 도커 컨테이너 간의 통신을 위한 가상 네트워크입니다.
  • 네트워크를 생성하고, 컨테이너를 연결하는 방식으로 사용됩니다.
  1. 볼륨 (Volume)
  • 도커 컨테이너가 사용하는 파일 시스템이나 데이터를 저장하는 공간입니다.
  • 호스트와 컨테이너 간에 파일을 공유하는 방식으로 사용됩니다.

위와 같은 개념들을 이해하면, Docker의 기본적인 동작 방식을 이해하고, 효율적인 배포 및 관리가 가능합니다.

 

Docker를 활용한 개발 및 배포 방법

Docker는 애플리케이션 개발 및 배포에서 매우 유용한 도구입니다. 이 섹션에서는 Docker를 활용하여 애플리케이션을 개발하고 배포하는 방법에 대해 살펴보겠습니다.

 

Docker를 이용한 애플리케이션 개발 방법

Docker를 이용한 애플리케이션 개발 방법은 다음과 같습니다.

  1. Docker 이미지 생성: 먼저 애플리케이션 개발에 필요한 환경을 구성한 후, Docker 이미지를 생성합니다. Docker 이미지는 애플리케이션 개발에 필요한 모든 구성 요소를 포함합니다.

  2. Docker 컨테이너 실행: Docker 이미지를 사용하여 Docker 컨테이너를 실행합니다. 컨테이너는 이미지를 기반으로 생성되며, 애플리케이션을 실행하는 데 필요한 모든 구성 요소를 포함합니다.

  3. 애플리케이션 개발: Docker 컨테이너 내에서 애플리케이션을 개발합니다. 이때 필요한 모든 도구와 라이브러리는 이미지와 컨테이너에 이미 포함되어 있으므로 개발자는 추가적인 설치나 구성 없이 즉시 개발을 시작할 수 있습니다.

 

Docker를 이용한 애플리케이션 배포 방법

Docker를 이용한 애플리케이션 배포 방법은 다음과 같습니다.

  1. Docker 이미지 빌드: 먼저 애플리케이션을 배포할 Docker 이미지를 빌드합니다. 이때 개발자는 애플리케이션을 실행하는 데 필요한 모든 구성 요소를 이미지에 포함해야 합니다.

  2. Docker 이미지 레지스트리 업로드: Docker 이미지를 빌드한 후, 레지스트리에 업로드합니다. 레지스트리는 Docker 이미지를 저장하고 배포하는 데 사용되는 중앙 집중식 저장소입니다.

  3. Docker 컨테이너 실행: Docker 이미지를 사용하여 Docker 컨테이너를 실행합니다. 컨테이너는 이미지를 기반으로 생성되며, 애플리케이션을 실행하는 데 필요한 모든 구성 요소를 포함합니다.

  4. 로드 밸런서 구성: 로드 밸런서를 구성하여 여러 개의 Docker 컨테이너에 트래픽을 분산합니다. 로드 밸런서는 애플리케이션의 가용성과 확장성을 높여줍니다.

  5. 스케일링: 필요에 따라 Docker 컨테이너를 추가로 실행하여 애플리케이션의 성능을 향상시킵니다. 이때 로드 밸런서가 추가된 컨테이너에 트래픽을 분산합니다.

  6. 모니터링 및 로깅: 애플리케이션을 실행하는 Docker 컨테이너들의 상태를 모니터링하고 로그를 수집합니다. 이를 통해 애플리케이션의 성능 및 안정성을 모니터링하고 문제를 해결할 수 있습니다.

  7. 이상으로 Docker를 활용한 개발 및 배포 방법에 대해 살펴보았습니다. 이외에도 다양한 Docker 기능과 도구를 활용하여 애플리케이션 개발 및 운영에 대한 생산성을 높일 수 있습니다.

  8. 업데이트: 애플리케이션의 업데이트가 필요한 경우, 새로운 Docker 이미지를 빌드하고 이를 이전 버전의 이미지와 교체합니다. 이때 로드 밸런서는 이전 버전의 컨테이너에서 새로운 버전의 컨테이너로 트래픽을 전환합니다.

이상으로 Docker를 활용한 개발 및 배포 방법에 대해 살펴보았습니다. 이외에도 다양한 Docker 기능과 도구를 활용하여 애플리케이션 개발 및 운영에 대한 생산성을 높일 수 있습니다.

 

Docker 관련 유용한 자료 및 참고 링크

Docker를 공부하고 활용하는 데 도움이 되는 다양한 자료와 참고 링크를 소개합니다.

  1. 공식 문서: Docker의 공식 문서는 매우 자세하고 정확한 정보를 제공합니다.
    https://docs.docker.com/

  2. Docker Hub: Docker Hub는 Docker 이미지를 저장하고 공유하는 공식 레지스트리입니다. Docker Hub에서는 다양한 오픈 소스 프로젝트와 공식 이미지를 찾아볼 수 있습니다.
    https://hub.docker.com/

  3. Docker 커뮤니티: Docker 커뮤니티는 개발자와 사용자들이 모여 다양한 정보를 공유하고 서로 도움을 주고받는 곳입니다. Docker Forum과 Docker Community Slack 채널이 유용합니다. https://forums.docker.com/
    https://community.docker.com/

  4. Docker를 활용한 실전 예제: Docker를 활용한 실제 예제를 참고하여 Docker의 기본 개념과 사용 방법을 익힐 수 있습니다.
    https://github.com/docker/labs

  5. Dockerfile 레파지토리: Dockerfile은 Docker 이미지를 빌드하기 위한 설정 파일입니다. Dockerfile을 공유하는 레파지토리들을 살펴보면 다양한 이미지를 빠르게 만들 수 있습니다.
    https://github.com/docker-library/

  6. Docker Compose 사용 방법: Docker Compose를 사용하면 멀티 컨테이너 애플리케이션을 관리할 수 있습니다. 공식 문서에서 예제를 참고하여 사용 방법을 익힐 수 있습니다. https://docs.docker.com/compose/gettingstarted/

  7. Docker 기술 블로그: Docker 기술 블로그에서는 Docker와 관련된 다양한 기술적인 이슈와 해결 방법, 새로운 기능 소개 등을 다루고 있습니다.
    https://www.docker.com/blog/

  8. Docker 웹캐스트: Docker 웹캐스트는 Docker를 활용한 실전 예제와 도커 엔터프라이즈 제품의 소개 등을 다루고 있습니다.
    https://www.docker.com/dockercon/webcast

  9. Docker Hands-on Labs: Docker Hands-on Labs에서는 Docker 기술을 실제로 적용해보면서 학습할 수 있는 환경을 제공합니다.
    https://training.play-with-docker.com/

안정적이고 저렴한 가상 서버(VPS) 안내

안정적인 서버 호스팅을 찾고 계신가요? 지금 Vultr 호스팅을 한번 이용 해 보세요. 지금 보고 계신 HaruLogs 사이트도 Vultr에서 VPS 호스팅 하고 있습니다. 한국, 일본, 미국등 다양한 국가에 클릭 몇번으로 안정적이고 저렴한 VPS를 운영 할 수 있습니다.

아래 배너를 통해 회원 가입을 하시면 100달러의 무료 크레딧을 받을 수 있습니다. 100달러의 무료 크레딧은 Vultr의 최소 사양 VPS를 20대 동시 운영가능한 크레딧입니다.

지금 무료로 Vultr $100 크레딧 선물 받기

 

Vultr 서비스 요약

  • VPS
    • 인스턴스
      • AMD 또는 Intel High Performance 인스턴스 최저 $6 - 1vCPU, 1GB Memory, 2TB Bandwidth, 25GB NVMe
    • 엣지
  • Block Storage
  • Object Storage (AWS S3 호환)
  • Firewall
  • Network
  • Load Balancers
  • Kubernetes
  • Databases
포스트 통계
지금 보고있는 포스트의 통계 데이터를 확인 해 보세요.
  • 총 조회수
    118
  • 최근 30일 조회수
    11
연관 포스트
코멘트 작성