>  기사  >  운영 및 유지보수  >  도커를 설치하고 구성하는 방법

도커를 설치하고 구성하는 방법

WJ
WJ원래의
2020-06-08 17:06:382319검색

도커를 설치하고 구성하는 방법

Docker를 설치하고 구성하는 방법은 무엇입니까?

이 문서는 클라우드에서 컨테이너화된 워크로드 배포 및 관리에 대한 웹 세미나 시리즈를 보완합니다. 이 시리즈에서는 컨테이너 수명주기 관리, 다중 컨테이너 애플리케이션 배포, 워크로드 확장, Kubernetes 이해 등 컨테이너의 기본 사항을 소개하고 상태 저장 애플리케이션 실행을 위한 모범 사례를 강조합니다.

이 튜토리얼에서는 이 시리즈의 첫 번째 부분인 "컨테이너 시작하기"에서 소개한 개념과 명령을 다룹니다.

소개

Docker는 컨테이너화된 애플리케이션을 배포하고 관리하기 위한 플랫폼입니다. 컨테이너는 유연성을 제공하므로 개발자, 관리자, DevOps 엔지니어 사이에서 인기가 높습니다.

Docker에는 세 가지 기본 구성 요소가 있습니다.

Docker 엔진 Docker 도구 Docker 레지스트리

Docker 엔진은 컨테이너 관리를 위한 핵심 기능을 제공합니다. 기본 Linux 운영 체제와 인터페이스하여 컨테이너 수명주기를 처리하기 위한 간단한 API를 노출합니다.

Docker 도구는 Docker 엔진에서 제공하는 API와 상호 작용하는 명령줄 도구 세트입니다. 컨테이너를 실행하고, 새 이미지를 생성하고, 스토리지 및 네트워킹을 구성하고, 컨테이너 수명주기에 영향을 미치는 더 많은 작업을 수행하는 데 사용됩니다.

Docker Registry는 컨테이너 이미지가 저장되는 곳입니다. 각 이미지에는 고유한 태그로 식별되는 여러 버전이 있을 수 있습니다. 사용자는 레지스트리에서 기존 이미지를 가져오고 새 이미지를 푸시합니다. Docker Hub는 Docker, Inc.에서 관리하는 관리형 레지스트리입니다. 이미지를 엔진에 더 가깝게 유지하기 위해 자체 환경에서 레지스트리를 실행하는 것도 가능합니다.

이 튜토리얼이 끝나면 DigitalOcean Droplet에 Docker를 설치하고, 컨테이너를 관리하고, 이미지를 처리하고, 지속성을 추가하고, 개인 레지스트리를 설정하게 됩니다.

전제 조건

이 튜토리얼을 따르려면 다음이 필요합니다:

루트가 아닌 sudo 사용자와 방화벽이 포함된 Ubuntu 16.04 초기 서버 설정 튜토리얼에 따라 Ubuntu 16.04 드롭릿을 설정합니다.

Docker 허브 계정. Docker Hub에 대한 이 개요는 시작하는 데 도움이 될 것입니다.

기본적으로 docker 명령에는 루트 권한이 필요합니다. 그러나 docker 그룹의 docker 사용자로 docker를 실행하면 sudo 접두사 없이 명령을 실행할 수 있습니다.

이 방법으로 Droplet을 구성하려면 sudo usermod -aG docker ${USER} 명령을 실행하세요. 그러면 현재 사용자가 docker 그룹에 추가됩니다. 그런 다음 su - ${USER} 명령을 실행하여 새 그룹 멤버십을 적용합니다.

이 튜토리얼에서는 서버가 sudo 접두사 없이 docker 명령을 실행하도록 구성될 것으로 예상합니다.

1단계 - Docker 설치

Droplet에 SSH를 연결한 후 다음 명령을 실행하여 설치되었을 수 있는 모든 docker 관련 패키지를 제거한 다음 공식 저장소에서 Docker를 설치합니다.

sudo apt-get remove docker docker-engine docker.io
sudo apt-get install -y apt-transport-https ca-certificates curl software-properties-common
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -sudo apt-key fingerprint 0EBFCD88sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable"sudo apt-get update
sudo apt-get install -y docker-ce

Docker를 설치한 후 확인 다음 명령을 사용하여 설치:

docker info

위 명령은 환경에 배포된 Docker 엔진의 세부 정보를 보여줍니다. 다음 명령은 Docker 도구가 올바르게 설치 및 구성되었는지 확인합니다. Docker 엔진 및 도구의 버전이 인쇄되어야 합니다.

docker version

2단계 - 컨테이너 시작

Docker 컨테이너는 레지스트리에 저장된 기존 이미지에서 시작됩니다. Docker의 이미지는 개인 저장소나 공용 저장소에 저장할 수 있습니다. 비공개 저장소에서는 이미지를 가져오기 전에 사용자가 인증을 받아야 합니다. 공개 이미지는 누구나 액세스할 수 있습니다.

hello-world라는 이미지를 검색하려면 다음 명령을 실행하세요.

docker search hello-world

hello-world라는 이름과 일치하는 이미지가 여러 개 있을 수 있습니다. 가장 큰 별을 선택하면 이미지의 팝이 표시됩니다.

다음 명령을 사용하여 로컬 환경에서 사용 가능한 이미지를 확인하세요.

docker images

아직 컨테이너를 출시하지 않았으므로 이미지가 없습니다. 이제 이미지를 다운로드하여 로컬로 실행할 수 있습니다.

docker pull hello-world
docker run hello-world

이미지를 드래그하지 않고 docker run 명령을 실행하면 Docker 엔진이 먼저 이미지를 가져온 다음 실행합니다. docker Images 명령을 다시 실행하면 hello-world 이미지가 로컬에서 사용 가능하다는 것을 알 수 있습니다.

좀 더 이해하기 쉬운 컨테이너인 Apache 웹 서버를 시작해 보겠습니다.

docker run -p 80:80 --name web -d httpd

docker run 명령에 추가 옵션이 전달되는 것을 볼 수 있습니다. 다음은 이러한 스위치에 대한 설명입니다.

-p – 이는 Docker 엔진이 호스트의 포트 80에 컨테이너의 포트 80을 노출하도록 지시합니다. Apache는 포트 80에서 수신 대기하므로 이를 호스트 포트에 노출해야 합니다. --name - 이 스위치는 실행 중인 컨테이너에 이름을 할당합니다. 이를 생략하면 Docker 엔진이 임의의 이름을 할당합니다.

-d - 이 옵션은 Docker 엔진이 분리 모드에서 컨테이너를 실행하도록 지시합니다. 이것이 없으면 컨테이너가 포그라운드에서 시작되어 셸에 대한 액세스가 차단됩니다. 컨테이너를 백그라운드로 푸시하면 컨테이너가 계속 실행되는 동안 셸을 계속 사용할 수 있습니다.

要验证我们的容器是否确实在后台运行,请尝试以下命令:

docker ps

输出显示名为web的容器正在运行,端口80映射到主机端口80 。

现在访问Web服务器:

curl localhost

让我们停止并用下面的命令删除正在运行的容器:

docker stop web
docker rm web

运行docker ps再次确认容器已被终止。

第3步 - 添加存储到容器

容器是短暂的,这意味着当容器终止时,存储在容器内的任何东西都将丢失。 要将数据保存在容器的寿命之外,我们需要将容器附加到容器中。 卷是主机文件系统的目录。

首先在主机上创建一个新目录:

mkdir htdocs

现在,让我们用一个新开关启动容器来挂载htdocs目录,并将其指向Apache Web服务器的文档根目录:

docker run -p 80:80 --name web -d -v $PWD/htdocs:/usr/local/apache2/htdocs httpd

-v开关将容器中的htdocs目录指向主机的文件系统。 对这个目录所做的任何更改都将在两个位置都可见。

通过运行以下命令从容器中访问目录:

docker exec -it web /bin/bash

该命令以交互模式将我们的终端连接到容器的外壳。 你应该看到你现在被丢在容器内。

导航到htdocs文件夹并创建一个简单的HTML文件。 最后退出shell返回主机:

cd /usr/local/apache2/htdocs
echo &#39;<h1>Hello World from Container</h1>&#39; > index.htmlexit

再次执行curl localhost命令显示Web服务器正在返回我们创建的页面。

我们不仅可以从主机访问这个文件,但我们也可以修改它:

cd htdocs
cat index.html
echo &#39;<h1>Hello World from Host</h1>&#39; | sudo tee index.html >/dev/null

再次运行curl localhost ,确认Web服务器正在提供从主机创建的最新页面。

使用以下命令终止容器。 ( -f迫使Docker先停止而不停止。)

docker rm -f web

第4步 - 建立图像

除了从注册表中运行现有的图像,我们可以创建自己的图像,并将其存储在注册表中。

您可以从现有的容器中创建新的图像。 首先提交对容器所做的更改,然后将图像标记并推送到注册表。

让我们再次启动httpd容器并修改默认文档:

docker run -p 80:80 --name web -d httpd
docker exec -it web /bin/bash
cd htdocs
echo &#39;<h1>Welcome to my Web Application</h1>&#39; > index.htmlexit

该容器现在运行一个自定义的index.html 。 你可以使用curl localhost来验证它。

在我们提交更改后的容器之前,最好停止它。 停止后,我们将运行commit命令:

docker stop web
docker commit web doweb

使用docker images命令确认图像的创建。 它显示了我们刚刚创建的doweb图像。

要在Docker Hub中标记和存储此映像,请运行以下命令将映像推送到公共注册表:

docker login
docker tag your_docker_hub_username/doweb
docker push

您可以通过从浏览器或命令行在Docker Hub中搜索来验证新映像。

第5步 - 启动私人注册表

可以在私人环境中运行注册表以保持图像更加安全。 它也减少了Docker引擎和映像库之间的延迟。

Docker Registry是一个可以像任何其他容器一样启动的容器。 由于注册表拥有多个图像,因此最好将存储卷附加到该图像上。

docker run -d -p 5000:5000 --restart=always --name registry -v $PWD/registry:/var/lib/registry registry

请注意,容器是在后台启动的,端口5000暴露, registry目录映射到主机文件系统。 您可以通过执行docker ps命令来验证容器正在运行。

我们现在可以标记一个本地图像,并将其推送到私人注册表。 我们首先从Docker Hub中取出busybox容器并对其进行标记。

docker pull busybox
docker tag busybox localhost:5000/busybox
docker images

以前的命令确认busybox容器现在用localhost:5000标记,所以将图像推送到私有注册表。

docker push localhost:5000/busybox

将图像推送到本地注册表,让我们尝试从环境中删除它,并从注册表中拉回。

docker rmi -f localhost:5000/busybox
docker images
docker pull localhost:5000/busybox
docker images

我们经历了拉动图像,标记,推送到本地注册表,最后拉回来的整个圈子。

可能有些情况下您想要在专用主机中运行私有注册表。 在不同的机器上运行的Docker引擎会与远程注册表进行通信,以获取和推送图像。

由于注册表不安全,我们需要修改Docker引擎的配置以启用对不安全注册表的访问。 为此,编辑位于/etc/docker/daemon.json的daemon.json文件。 创建文件,如果它不存在。

添加以下条目:

编辑/etc/docker/daemon.json

{
 "insecure-registries" : ["REMOTE_REGISTRY_HOST:5000"]}

REMOTE_REGISTRY_HOST替换为远程注册表的主机名或IP地址。 重新启动Docker引擎以确保应用配置更改。

结论

本教程帮助您开始使用Docker。 它涵盖了安装,容器管理,映像管理,存储和私有注册表等基本概念。 本系列即将发布的会议和文章将帮助您超越Docker的基础知识。

相关参考:docker教程

위 내용은 도커를 설치하고 구성하는 방법의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.