웹사이트 검색

Docker 설치 및 사용 방법: 시작하기


상태: 더 이상 사용되지 않음

이 문서는 더 이상 사용되지 않으며 더 이상 유지 관리되지 않습니다.

대신 보기

이 문서는 여전히 참조용으로 유용할 수 있지만 작동하지 않거나 모범 사례를 따르지 않을 수 있습니다. 사용 중인 운영 체제에 대해 작성된 최신 문서를 사용하는 것이 좋습니다.

이 문서의 최신 버전은 Ubuntu 16.04에서 Docker를 설치하고 사용하는 방법에서 사용할 수 있습니다.

소개

제공된 사용 사례는 무한하며 필요성은 항상 존재해 왔습니다. Docker는 시스템과 시스템 간에 애플리케이션을 포팅하는 효율적이고 빠른 방법을 제공합니다. 가볍고 간편하므로 다음을 수행할 수 있습니다. 애플리케이션을 신속하게 포함하고 자체 보안 환경 내에서 실행합니다(Linux 컨테이너: LXC를 통해).

이 DigitalOcean 기사에서는 최근 몇 년간 실현된 가장 흥미롭고 강력한 오픈 소스 프로젝트 중 하나인 Docker를 철저히 소개하는 것을 목표로 합니다. Docker는 그 기능을 한 문장으로 요약하려고 시도하는 것이 불공평할 정도로 많은 도움을 줄 수 있습니다.

용어 사전

1. 도커

2. Docker 프로젝트 및 주요 부분

3. 도커 요소

  1. Docker 컨테이너
  2. 도커 이미지
  3. Dockerfile

4. 도커 설치 방법

5. 도커 사용법

  1. 시작
  2. 이미지 작업
  3. 컨테이너 작업

도커

개발 시스템에서 프로덕션을 위한 원격 서버로, 또는 다른 곳에서 사용하기 위해 모든 것을 패키징하든 관계없이 애플리케이션 스택을 종속성과 함께 포팅하고 딸꾹질 없이 실행하는 것은 항상 어려운 일입니다. 사실, 도전 과제는 엄청나며 지금까지의 솔루션은 대중에게 실제로 성공을 거두지 못했습니다.

간단히 말해서 프로젝트로서의 docker는 시스템과 시스템(가상 또는 물리적)에서 애플리케이션을 형성하는 모든 것을 수행할 수 있는 완전한 고급 도구 세트를 제공하며 그것.

Docker는 Linux 컨테이너(예: 네임스페이스 및 기타 커널 기능)를 통해 강력한 애플리케이션(따라서 프로세스 및 리소스) 포함을 달성합니다. 추가 기능은 프로세스를 안전하게 포함하는 것과 관련하여 시스템 및 응용 프로그램 관리에 사용되는 하위 수준 Linux 도구/API로 작업하는 모든 복잡성을 추출하는 프로젝트 자체 부품 및 구성 요소에서 나옵니다.

Docker 프로젝트 및 주요 부분

Docker 프로젝트(3월 13일 dotCloud에서 오픈 소스 제공)는 Linux 커널에서 제공하는 이미 존재하는 기능, 라이브러리 및 프레임워크 위에 [대부분] 구축된 몇 가지 주요 부분(애플리케이션) 및 요소(이러한 부분에서 사용됨)로 구성됩니다. 및 타사(예: LXC, device-mapper, aufs 등).

주요 도커 부품

  1. 도커 데몬: 실행하는 호스트에서 도커(LXC) 컨테이너를 관리하는 데 사용
  2. docker CLI: docker 데몬과 명령 및 통신하는 데 사용
  3. 도커 이미지 인덱스: 도커 이미지를 위한 저장소(공개 또는 비공개)

주요 도커 요소

  1. 도커 컨테이너: 모든 애플리케이션을 포함하는 디렉토리
  2. 도커 이미지: 컨테이너 또는 기본 OS(예: Ubuntu) 이미지의 스냅샷
  3. Dockerfiles: 이미지 빌드 프로세스를 자동화하는 스크립트

도커 요소

다음 요소는 도커 프로젝트를 구성하는 애플리케이션에서 사용됩니다.

도커 컨테이너

도커를 사용하여 애플리케이션을 포팅하는 전체 절차는 전적으로 컨테이너 배송에 의존합니다.

Docker 컨테이너는 기본적으로 다른 것과 같이 압축(예: tar 아카이브)할 수 있는 디렉토리이며 다양한 다른 시스템 및 플랫폼(호스트)에서 공유 및 실행할 수 있습니다. 유일한 종속성은 컨테이너를 실행하도록 호스트를 조정하는 것입니다(즉, 도커가 설치됨). 여기서의 격리는 Linux 컨테이너(LXC)를 통해 이루어집니다.

LXC(Linux 컨테이너)

Linux 컨테이너는 자체 환경에 포함된 애플리케이션(및 이들이 사용하는 리소스)을 관리할 수 있는 다양한 커널 수준 기능(즉, Linux 커널이 할 수 있는 기능)의 조합으로 정의할 수 있습니다. 특정 기능(예: 네임스페이스, chroot, cgroup 및 SELinux 프로필)을 사용함으로써 LXC는 애플리케이션 프로세스를 포함하고 리소스 제한을 통해 프로세스 관리를 돕고 자체 파일 시스템(부모의 네임스페이스에 대한 액세스)을 넘어서는 접근을 허용하지 않습니다.

컨테이너가 포함된 Docker는 LXC를 사용하지만 훨씬 더 많은 기능을 제공합니다.

도커 컨테이너

Docker 컨테이너에는 몇 가지 주요 기능이 있습니다.

그들은 허락한다;

  • 애플리케이션 이식성
  • 프로세스 분리
  • 외부와의 단련 방지
  • 자원 소비 관리

또한 격리된 애플리케이션 배포에 사용되는 기존 가상 머신보다 훨씬 적은 리소스가 필요합니다.

그들은 허용하지 않습니다.

  • 다른 프로세스와 충돌
  • \의존성 지옥 유발
  • 또는 다른 시스템에서 작동하지 않음
  • 공격에 취약하고 모든 시스템 리소스 남용

그리고 (또한) 더.

기술적인 측면에서 LXC를 기반으로 하고 이에 의존하는 이러한 컨테이너는 디렉토리와 같습니다(단, 모양과 형식이 지정된 디렉토리). 이를 통해 컨테이너의 이동성점진적 빌드가 가능합니다.

각 컨테이너는 양파처럼 계층화되어 있으며 컨테이너 내에서 수행되는 각 작업은 이전 블록 위에 또 다른 블록(실제로 파일 시스템 내에서 간단한 변경으로 변환됨)을 배치하는 것으로 구성됩니다. 그리고 다양한 도구와 구성을 통해 이 설정이 전체적으로 조화로운 방식으로 작동합니다(예: 통합 파일 시스템).

컨테이너를 갖는 이 방법이 허용하는 것은 새로운 컨테이너와 이미지를 쉽게 시작하고 생성할 수 있는 엄청난 이점입니다. 따라서 경량으로 유지됩니다(점진적이고 계층화된 방식 덕분에). 모든 것이 파일 시스템을 기반으로 하기 때문에 스냅샷을 찍고 적시에 롤백을 수행하는 것은 버전 관리 시스템과 마찬가지로 저렴합니다(즉, 매우 쉽게 수행할 수 있음/리소스를 많이 사용하지 않음). 엠> (VCS).

각 도커 컨테이너는 다가올 다른 응용 프로그램 및 계층의 기반을 형성하는 도커 이미지에서 시작합니다.

도커 이미지

Docker 이미지는 모든 것이 형성되기 시작하는 부터 도커 컨테이너의 기반을 구성합니다. 서버 또는 데스크톱 컴퓨터에서 응용 프로그램을 실행하는 데 사용되는 기본 운영 체제 디스크 이미지와 매우 유사합니다.

이러한 이미지(예: Ubuntu 기반)를 사용하면 시스템 간 원활한 이식이 가능합니다. 응용 프로그램을 실행하는 데 필요한 모든 것을 갖춘 견고하고 일관되며 신뢰할 수 있는 기반을 만듭니다. 모든 것이 독립적이고 시스템 수준 업데이트 또는 수정의 위험이 제거되면 컨테이너는 외부 노출에 면역이 되어 종속 지옥을 방지할 수 있습니다.

베이스 위에 더 많은 레이어(도구, 애플리케이션 등)가 추가됨에 따라 이러한 변경 사항을 커밋하여 새로운 이미지를 형성할 수 있습니다. 저장된(즉, 커밋된) 이미지에서 새 컨테이너가 생성되면 작업이 중단된 위치부터 계속됩니다. 통합 파일 시스템은 컨테이너로 작업할 때 모든 레이어를 단일 엔티티로 통합합니다.

이러한 기본 이미지는 docker CLI로 작업하여 새 컨테이너를 직접 만들 때 명시적으로 지정하거나 자동화된 이미지 빌드를 위해 Dockerfile 내에 지정할 수 있습니다.

도커파일

Dockerfile은 새로운 도커 이미지를 형성하기 위해 실행되는 연속적인 일련의 지침, 지침 및 명령을 포함하는 스크립트입니다. 실행되는 각 명령은 양파의 새 레이어로 변환되어 최종 제품을 형성합니다. 그들은 기본적으로 모든 것을 수동으로 반복적으로 수행하는 프로세스를 대체합니다. Dockerfile의 실행이 완료되면 이미지를 형성한 다음 새 컨테이너를 시작(즉, 생성)하는 데 사용합니다.

도커 설치 방법

처음에 도커는 우분투에서만 사용할 수 있었습니다. 요즘에는 RHEL 기반 시스템(예: CentOS) 및 기타 시스템에도 도커를 배포할 수 있습니다.

Ubuntu의 설치 프로세스를 빠르게 살펴보겠습니다.

참고: Droplet 사용자 데이터에 대해 자세히 알아보려면 이 자습서를 추가하여 Docker를 Droplet에 자동으로 설치할 수 있습니다.

Ubuntu 설치 지침

미리 빌드된 애플리케이션 이미지를 사용하는 것 외에 도커를 얻는 가장 간단한 방법은 64비트 Ubuntu 14.04 VPS를 사용하는 것입니다.

물방울 업데이트:

sudo apt-get update
sudo apt-get -y upgrade

aufs 지원이 가능한지 확인하십시오.

sudo apt-get install linux-image-extra-`uname -r`

패키지 확인을 위해 apt-key에 도커 리포지토리 키를 추가합니다.

sudo apt-key adv --keyserver hkp://pgp.mit.edu:80 --recv-keys 58118E89F3A912897C070ADBF76221572C52609D

Apt 소스에 도커 저장소를 추가합니다.

echo "deb https://apt.dockerproject.org/repo ubuntu-trusty main" | sudo tee /etc/apt/sources.list.d/docker.list

새 추가 항목으로 저장소를 업데이트합니다.

sudo apt-get update

마지막으로 docker를 다운로드하여 설치합니다.

sudo apt-get install docker-engine

우분투의 기본 방화벽(UFW: Uncomplicated Firewall)은 도커가 필요로 하는 모든 포워딩 트래픽을 기본적으로 거부합니다.

UFW로 전달 활성화:

나노 텍스트 편집기를 사용하여 UFW 구성을 편집합니다.

sudo nano /etc/default/ufw

아래로 스크롤하여 DEFAULT_FORWARD_POLICY로 시작하는 줄을 찾습니다.

바꾸다:

DEFAULT_FORWARD_POLICY="DROP"

와 함께:

DEFAULT_FORWARD_POLICY="ACCEPT"

CTRL+X를 누르고 Y로 승인하여 저장하고 닫습니다.

마지막으로 UFW를 다시 로드합니다.

sudo ufw reload

전체 지침은 여기에서 설치에 대한 도커 설명서를 확인하십시오.

도커 사용 방법

docker를 설치하면 직관적인 사용 환경을 통해 작업하기가 매우 쉽습니다. 이제 docker 데몬이 백그라운드에서 실행됩니다. 그렇지 않은 경우 다음 명령을 사용하여 docker 데몬을 실행합니다.

도커 데몬을 실행하려면:

sudo docker -d &

사용법 구문:

CLI를 통해 docker를 사용하는 것은 일련의 옵션과 명령 뒤에 인수를 전달하는 것으로 구성됩니다. 도커가 작동하려면 sudo 권한이 필요합니다.

sudo docker [option] [command] [arguments]

참고: 아래 지침 및 설명은 가이드로 사용하고 도커 사용 및 작업에 대한 전반적인 아이디어를 제공하기 위해 제공됩니다. 그것에 익숙해지는 가장 좋은 방법은 새로운 VPS에서 연습하는 것입니다. 무엇이든 부수는 것을 두려워하지 마십시오. 실제로 부수십시오! 도커를 사용하면 진행 상황을 저장하고 거기에서 매우 쉽게 계속할 수 있습니다.

시작

docker에서 사용할 수 있는 모든 명령을 살펴보는 것으로 시작하겠습니다.

사용 가능한 모든 명령 목록을 docker에 요청하십시오.

sudo docker

현재(0.7.1부터) 사용 가능한 모든 명령:

attach    Attach to a running container
build     Build a container from a Dockerfile
commit    Create a new image from a container's changes
cp        Copy files/folders from the containers filesystem to the host path
diff      Inspect changes on a container's filesystem
events    Get real time events from the server
export    Stream the contents of a container as a tar archive
history   Show the history of an image
images    List images
import    Create a new filesystem image from the contents of a tarball
info      Display system-wide information
insert    Insert a file in an image
inspect   Return low-level information on a container
kill      Kill a running container
load      Load an image from a tar archive
login     Register or Login to the docker registry server
logs      Fetch the logs of a container
port      Lookup the public-facing port which is NAT-ed to PRIVATE_PORT
ps        List containers
pull      Pull an image or a repository from the docker registry server
push      Push an image or a repository to the docker registry server
restart   Restart a running container
rm        Remove one or more containers
rmi       Remove one or more images
run       Run a command in a new container
save      Save an image to a tar archive
search    Search for an image in the docker index
start     Start a stopped container
stop      Stop a running container
tag       Tag an image into a repository
top       Lookup the running processes of a container
version   Show the docker version information
wait      Block until a container stops, then print its exit code

시스템 전체 정보 및 도커 버전을 확인하십시오.

# For system-wide information on docker:
sudo docker info

# For docker version:
sudo docker version

이미지 작업

오랫동안 논의한 것처럼 도커 컨테이너 작업을 시작하는 핵심은 이미지를 사용하는 것입니다. docker 이미지 인덱스에서 공유되는 많은 무료 이미지가 있으며 CLI를 사용하면 이미지 리포지토리를 쿼리하고 새 이미지를 다운로드하기 위한 간단한 액세스가 가능합니다.

준비가 되면 여기에서도 이미지를 공유할 수 있습니다. 자세한 내용은 "푸시\ 섹션을 참조하십시오.

도커 이미지 검색:*

# Usage: sudo docker search [image name]
sudo docker search ubuntu

이렇게 하면 Ubuntu 쿼리와 일치하는 사용 가능한 모든 이미지의 매우 긴 목록이 제공됩니다.

이미지 다운로드(PULLing):

컨테이너를 빌드/생성할 때 또는 그 전에 컨테이너가 존재할 호스트 시스템에 이미지가 있어야 합니다. 이미지를 다운로드하려면(아마도 "search\ 다음에) pull을 실행하여 이미지를 가져올 수 있습니다.

# Usage: sudo docker pull [image name]
sudo docker pull ubuntu

이미지 나열:

커밋하여 생성한 이미지(자세한 내용은 아래 참조)를 포함하여 시스템의 모든 이미지는 "이미지\를 사용하여 나열할 수 있습니다. 이것은 사용 가능한 모든 이미지의 전체 목록을 제공합니다.

# Example: sudo docker images
sudo docker images

REPOSITORY          TAG                 IMAGE ID            CREATED             VIRTUAL SIZE
my_img              latest              72461793563e        36 seconds ago      128 MB
ubuntu              12.04               8dbd9e392a96        8 months ago        128 MB
ubuntu              latest              8dbd9e392a96        8 months ago        128 MB
ubuntu              precise             8dbd9e392a96        8 months ago        128 MB
ubuntu              12.10               b750fe79269d        8 months ago        175.3 MB
ubuntu              quantal             b750fe79269d        8 months ago        175.3 MB

이미지 변경 사항 커밋:

컨테이너로 작업하고 작업을 계속 수행할 때(예: 소프트웨어 다운로드 및 설치, 파일 구성 등) 상태를 유지하려면 "커밋\해야 합니다. 커밋하면 모든 것이 원래 위치에서 계속됩니다. 다음 번에 하나(예: 이미지)를 사용할 때 남습니다.

# Usage: sudo docker commit [container ID] [image name]
sudo docker commit 8dbd9e392a96 my_img

이미지 공유(PUSHing):

지금은 조금 이르지만 - 우리 글에서, 다른 사람들과 공유하고 싶은 자신만의 컨테이너를 만들었다면, 푸시를 사용하여 모든 사람이 다운로드하여 사용할 수 있는 색인에 귀하의 이미지가 나열됩니다.

모든 변경 사항을 "커밋\해야 함을 기억하십시오.

# Usage: sudo docker push [username/image name]  
sudo docker push my_username/my_first_image

참고: 도커 인덱스에 이미지를 푸시하려면 index.docker.io에서 가입해야 합니다.

컨테이너 작업

이미지를 사용하여 프로세스를 "실행\하면 그 대가로 컨테이너가 생깁니다. 프로세스가 활발하게 실행되지 않을 때 이 컨테이너는 실행되지 않는 컨테이너가 됩니다. rm 명령을 통해 제거할 때까지 시스템에 상주합니다.

모든 현재 컨테이너 나열:

기본적으로 다음을 사용하여 실행 중인 모든 컨테이너를 나열할 수 있습니다.

sudo docker ps

실행 중인 목록과 실행되지 않는 목록을 모두 보려면 다음을 사용하십시오.

sudo docker ps -l 

새 컨테이너 만들기

현재로서는 아무 것도 실행하지 않고(예: 명령) 컨테이너를 생성할 수 없습니다. 새 컨테이너를 생성하려면 기본 이미지를 사용하고 실행할 명령을 지정해야 합니다.

# Usage: sudo docker run [image name] [command to run]
sudo docker run my_img echo "hello"

# To name a container instead of having long IDs
# Usage: sudo docker run -name [name] [image name] [comm.]
sudo docker run -name my_cont_1 my_img echo "hello"

이것은 "hello\를 출력하고 당신이 있던 곳으로 바로 돌아갈 것입니다. (즉, 호스트의 쉘)

컨테이너를 생성한 후 실행하는 명령을 변경할 수 없으므로(따라서 "생성\ 중에 하나를 지정함) 다른 명령을 실행할 수 있도록 프로세스 관리자 및 사용자 정의 시작 스크립트를 사용하는 것이 일반적입니다.

컨테이너 실행:

컨테이너를 생성하고 중지하면(프로세스 종료 또는 명시적으로 중지로 인해) "run\을 사용하여 컨테이너를 생성하는 데 사용된 동일한 명령으로 컨테이너를 다시 작동시킬 수 있습니다.

# Usage: sudo docker run [container ID]
sudo docker run c629b7d70666

컨테이너를 찾는 방법을 기억하십니까? 나열하려면 위 섹션을 참조하세요.

컨테이너 중지:

컨테이너의 프로세스 실행을 중지하려면 다음을 수행하십시오.

# Usage: sudo docker stop [container ID]
sudo docker stop c629b7d70666

컨테이너 저장(커밋):

컨테이너에 대한 진행 상황 및 변경 사항을 저장하려면 위에서 설명한 "commit\을 사용하여 이미지로 저장할 수 있습니다.

이 명령은 컨테이너를 이미지로 바꿉니다.

docker를 사용하면 커밋이 저렴하다는 점을 기억하십시오. 주저하지 말고 이미지를 만들어 진행 상황을 저장하세요.

컨테이너 제거/삭제:

컨테이너의 ID를 사용하여 rm으로 하나를 삭제할 수 있습니다.

# Usage: sudo docker rm [container ID]
sudo docker rm c629b7d70666

공식 문서를 읽어 Docker에 대해 자세히 알아볼 수 있습니다.

기억하세요: docker에서는 상황이 매우 빠르게 진행되고 있습니다. 커뮤니티가 제공하는 추진력은 놀랍고 많은 대기업이 지원 제공에 참여하려고 합니다. 그러나 이 제품은 여전히 생산 준비로 표시되지 않았으므로 아직 미션 크리티컬 배포에 대해 100% 신뢰하는 것이 권장되지 않습니다. 릴리스가 나올 때마다 릴리스를 확인하고 계속해서 모든 docker를 최신 상태로 유지하십시오.

제출자: