이 문서는 云计算中容器化工作负载的部署与管理 相关的 Webinar 系列를 supplement 합니다. 이 시리즈는 コンテナ의 기본 사항을 涵蓋하며, コンテナ 生命周期 관리, マルチコンテナ 응용 배포, 工作情况 スケーリング, Kubernetes 이해를 includes 합니다. 이를 통해 状態 유지 응용을 실행하는 베스트 사례를 강조하고 있습니다.
이 튜토리얼은 시리즈의 첫 세션, 컨테이너 시작하기에서 涵蓋되는 개념과 명령어를 포함합니다.
소개
Docker는 컨테이너 기반 응용 배포와 관리를 위한 플랫폼입니다. 컨테이너는 開発자, 관리자, 以及 DevOps 엔지니어들에 대해 유연성을 제공하여 인기를 얻고 있습니다.
Docker은 다음 세 가지 기본 组建이 있습니다 :
- Docker Engine
- Docker Tools
- Docker Registry
Docker Engine는 컨테이너 관리의 的核心 기능을 제공합니다. 이를 이용하여 하底层 Linux 오퍼레이팅 시스템과 간단한 API를 노출하여 컨테이너의 生命周期을 대면할 수 있습니다.
Docker Tools는 Docker Engine에 노출된 API와 通讯하는 명령어 行 工具로 배포되고 있습니다. 이들은 컨테이너를 실행하고 새로운 이미지를 생성하고, 스토리지와 네트워크를 구성하고, 컨테이너의 生命周期에 영향을 줄 수 있는 많은 operaions를 실행합니다.
Docker Registry는 컨테이너 이미지가 저장되는 장소입니다. 각 이미지는 고유한 태그를 통해 여러 버전을 가질 수 있습니다. 사용자는 레지스트리에서 기존 이미지를 pull하고, 새로운 이미지를 push할 수 있습니다. Docker Hub은 Docker, Inc.에 의해 관리되는 호스팅 레지스트리입니다. 또한, 이미지를 엔진에 더 가깝게 유지하기 위해 자신의 환경 내에서 레지스트리를 실행할 수 있습니다.
이 튜토리얼을 끝내면, DigitalOcean Droplet에 Docker를 설치하고, 컨테이너를 관리하며, 이미지를 작업하며, 지속성을 추가하고, 개인 레지스트리를 설정하는 방법을 배우게 될 것입니다.
사전 조건
이 튜토리얼을 따라가면서 필요한 것들은 다음과 같습니다:
-
이 Ubuntu 16.04 초기 서버 설정 튜토리얼을 따라 설정한 Ubuntu 16.04 Droplet 한 개, sudo 비루트 사용자와 방화벽 포함.
-
Docker Hub 계정。Docker Hub의 개요를 통해 시작하는 데 도울 수 있습니다.
기본적으로 docker
명령어는 루트 特权이 필요합니다. 그러나 sudo
접두사 없이 명령어를 실행할 수 있る 것은 사용자가 docker 그룹에 있으면 되며, docker
명령어를 사용자 권한으로 실행합니다.
이러한 방식으로 Droplets를 구성하려면 sudo usermod -aG docker ${USER}
명령어를 실행합니다. 이렇게 현재 사용자를 docker
그룹에 추가합니다. 그러다가 su - ${USER}
명령어를 실행하여 새로운 그룹 멤버십을 적용합니다.
이 튜토리얼은 서버가 docker
명령어를 sudo
접두사 없이 실행하도록 구성되었음을 기대합니다.
Step 1 — Docker 설치
Droplet에 SSH를 사용하여 들어가신 다음, 이미 설치되어 있는 docker-related 패키지를 제거하고 공식 仓储에서 Docker를 설치하기 위한 다음 명령어를 실행합니다.:
Docker 설치 후, 다음 명령어를 사용하여 설치를 확인합니다.:
护航环境에 배치된 Docker 엔진의 세부정보를 표시하는 위의 명령어입니다. 다음 명령어는 Docker 도구가 올바르게 설치되었고 구성되었는지 확인합니다. 이 명령어는 Docker 엔진과 도구의 버전을 인쇄합니다.
##Step 2 — 컨테이너 실행
Docker 컨테이너는 レジス트리에 보관されている 기존 이미지로 시작됩니다. Docker의 이미지는 개인 또는 공개 리포지토리에 보관할 수 있습니다. 개인 리포지토리는 이미지를 풀기 전에 사용자에게 인증을 요구합니다. 공개 이미지는 누구나 액세스 할 수 있습니다.
이름이 hello-world
인 이미지를 찾기 위해 다음 명령어를 실행합니다:
이름이 hello-world
인 이미지가 여러 개가 있을 수 있습니다. 가장 많은 별이 있는 것을 선택하십시오. 이것은 이미지의 인기를 나타냅니다.
다음 명령어를 사용하여 로컬 환경의 사용 가능한 이미지를 확인하십시오:
아직 컨테이너를 실행한 적이 없기 때문에 이미지가 없을 것입니다. 이제 이미지를 다운로드하고 로컬에서 실행할 수 있습니다:
이미지를 풀지 않고 docker run
명령어를 실행하면 Docker 엔진은 이미지를 먼저 풀고 그 다음에 실행하게 됩니다. docker images
명령어를 다시 실행하면 hello-world
이미지가 로컬에서 사용 가능하다는 것을 확인할 수 있습니다.
Apache 웹 서버를 더 meaningful한 컨테이너로 시작하십시오.
docker run
명령어에 추가적인 옵션이 있을 수 있을 것입니다. 이러한 switch의 설명입니다:
-p
— 이 옵션은 Docker Engine가 컨테이너의 포트80
을 호스트의 포트80
에 노출할지 여부를 지시합니다. Apache는 포트80
을 듣는 것이기 때문에, 우리는 이를 호스트 포트로 노출해야 합니다.--name
— 이 스위치는 실행중인 컨테이너에 이름을 부여합니다. 이를 생략하면 Docker Engine가 임의의 이름을 부여합니다.-d
— 이 옵션은 Docker Engine가 컨테이너를 미치기 모드로 실행할지 여부를 지시합니다. 이를 사용하지 않으면 컨테이너는 전경에서 실행되며, 쉘의 액세스를 차단합니다. 컨테이너를 배경에 밀어넣으면, 컨테이너가 실행되는 동안 쉘을 사용할 수 있습니다.
우리의 컨테이너가 실제로 배경에서 실행되고 있는지 확인하려면 다음 명령을 시도하십시오:
출력은 컨테이너가 web
이라는 이름으로 80
号를 호스트 포트 80
에 맵핑하여 실행되고 있음을 보여줍니다.
이제 웹 서버에 접근하십시오:
실행 중인 컨테이너를 정지하고 제거하는 명령어를 다음과 같이 사용합니다:
다시 docker ps
를 실행하면 컨테이너가 정지되었음을 확인할 수 있습니다.
Step 3 — 컨테이너에 스토리지 추가
컨테이너는 영구적이지 않은 특성을 가지고 있으며, 컨테이너를 종료할 때 컨테이너 내에 보관되는 모든 것이 사라지게 됩니다. 컨테이너의 lifetime 을 벗어나도 데이터를 유지하려면 컨테이너에 볼륨을 挂载해야 합니다. 볼륨은 호스트 파일 시스템의 디렉터리입니다.
호스트에 새로운 디렉터리를 만들기 시작하ます:
이제, htdocs
디렉터리를 挂载하고 Apache 웹 서버의 문서 루트를 가리키는 새로운 스위치를 사용하여 컨테이너를 시작하겠습니다:
-v
스위치는 컨테이너 내의 htdocs
디렉터리를 호스트 파일 시스템에 연결합니다. 이 디렉터리에 대한 모든 변경은 두 곳에서 모두 표시됩니다.
컨테이너 내에서 디렉터리를 이용하여 명령어를 실행하여 접근합니다:
이 명령어는 인터랙티브 모드로 컨테이너의 셸에 我们的端 terminal을 연결합니다. 이제 你们 发现自己已经进入了容器内部。
htdocs
폴더로 이동하고 simplicity HTML 파일을 생성합니다. 마지막으로 셸을 나가고 호스트로 돌아가는 것입니다:
다시 curl localhost
명령어를 실행하면 우리가 만든 页面을 웹 서버가 반환하는 것을 확인할 수 있습니다.
이 파일을 호스트から only 액세스할 수 있고, 수정할 수도 있습니다:
curl localhost
명령어를 다시 실행하면 latest 页面을 호스트에서 만든 것으로 웹 서버가 서비스 하는 것을 확인할 수 있습니다.
다음 명령어를 사용하여 컨테이너를 종료합니다. (-f
는 Docker가 정지하고 전부 종료하는 것을 강제하는 것입니다.)
fourth step — 이미지 생성
레지스트리에서 现存的 이미지를 실행할 뿐만 아니라, 우리는 자신의 이미지를 생성하고 registry에 보관할 수 있습니다.
现有 컨테이너로부터 새 이미지를 생성할 수 있습니다. 컨테이너에 대한 변경은 먼저 마감되고, 그 다음 이미지가 тегован하고 registry에 推送됩니다.
이제 httpd
컨테이너를 다시 실행하고 기본 문서를 수정하겠습니다:
index.html
가 custmoized 되어 있는 container를 실행하고 있습니다. 이를 curl localhost
로 확인할 수 있습니다.
changed container를 마감하기 전에, 그를 정지하는 것이 좋습니다. 정지 후 commit 명령을 실행합니다:
docker images
명령으로 image가 생성되었는지 확인할 수 있습니다. 우리가 Just created 한 doweb
image를 보여줍니다.
이 이미지를 Docker Hub에 тегован하고 보관하기 위해서는, 다음과 같은 명령을 실행하여 공개 registry에 이미지를 推送합니다:
browser 또는 명령 行에서 Docker Hub에서 new image를 확인할 수 있습니다.
fifth step — 개인 레지스트리 실행
다음은 이미지를 보다 안전하게 관리할 수 있도록 privatized environment에서 registry를 실행할 수 있습니다. 이는 다른 프로세스와의 통신을 최소화하여 이미지 조작의 latency를 줄이기 위해서 유용합니다.
Docker Registry는 어떤 컨테이너나 다른 시스템과 같이 실행할 수 있는 Container로 availabled 합니다. 특히, registry가 많은 이미지들을 보유한다면 그 이mage repository와 Docker Engine 사이에서의 딜레이를 줄이기 위해서 Storage Volume를 附加해야 합니다.
주목해야 할 것은 registry가 다음과 같이 실행되어 있는데, 포트 5000
が 노출되고, registry 디렉토리가 호스트 파ystem에 매핑되었다는 것입니다. 이를 확인하려면 docker ps
명령을 실행해보세요.
Container가 실행되어 있으므로, docker ps 명령을 실행하여 현재 실행중인 모든 Container를 보여줍니다. 우리가 만난 busybox
이미지는 이제 다음과 같이 태gged 상태로 변경되었습니다. 이를 확인하려면 다음과 같이 실행합니다.
이전에 실행했던 방법과 같이 이미지를 다시 pulls 하고, 나는 이 이mage를 다시 從 private registry 로 pulls 합니다. 이를 위해서 먼저 다음과 같이 실행합니다.
이미지를 pushes 하고, 나는 이 이mage를 다시 從 private registry 로 pulls 합니다. 이를 위해서 다음과 같이 실행합니다.
이제 registry를 삭제하고, 다시 이mage를 pulls 합니다. 이를 위해서 다음과 같이 실행합니다.
이 과정은 다시 다음과 같이 반복할 수 있습니다. 즉, 이미지를 pulls 하고, 나는 이 이mage를 다시 從 private registry 로 pushes 합니다. 이후, 다시 pulls 합니다.
등록 기록이 보안되지 않았기 때문에, 불안전한 등록 기록에 접근할 수 있도록 Docker Engine의 구성을 수정해야 합니다. 이를 위해 /etc/docker/daemon.json
에 위치한 daemon.json
파일을 편집하세요. 파일이 존재하지 않으면 생성하세요.
다음 항목을 추가하세요:
{
"insecure-registries" : ["REMOTE_REGISTRY_HOST:5000"]
}
REMOTE_REGISTRY_HOST
를 원격 등록 기록의 호스트 이름이나 IP 주소로 대체하세요. 구성 변경 사항이 적용되도록 Docker Engine를 재시작하세요.
## 결론
이 가이드는 Docker 시작에 도움이 되었습니다. 설치, 컨테이너 관리, 이미지 관리, 저장소 및 개인 등록 기록 등 필수 개념을 다루었습니다. 이 сер리스의 다음 세션과 기사들 에서 Docker의 기본 이상에 대해 알아볼 수 있습니다.
Source:
https://www.digitalocean.com/community/tutorials/how-to-install-and-configure-docker