怎麼安裝和設定docker?
本文補充了在雲端部署和管理容器化工作負載的網路研討會系列 。 本系列介紹了容器的基本知識,包括容器生命週期管理,部署多容器應用程序,擴展工作負載以及理解Kubernetes,以及突出顯示運行有狀態應用程序的最佳實踐。
本教學包括本系列第一部分「容器入門」中介紹的概念和指令。
介紹
#Docker是一個部署和管理容器化應用程式的平台。 容器在開發人員,管理員和devops工程師中很受歡迎,因為他們提供了靈活性。
Docker有三個基本元件:
Docker引擎Docker工具Docker註冊表
Docker Engine提供了管理容器的核心功能。 它與底層的Linux作業系統進行接口,以公開簡單的API來處理容器的生命週期。
Docker Tools是一組與Docker Engine公開的API互動的命令列工具。 它們用於運行容器,創建新映像,配置儲存和網絡,以及執行更多影響容器生命週期的操作。
Docker Registry是儲存容器映像的地方。 每個影像可以有多個版本透過獨特的標籤來標識。 用戶從登錄中拉出現有的影像,並推送新的影像。 Docker Hub是由Docker,Inc.管理的託管註冊表。還可以在自己的環境中運行註冊表,以使映像更靠近引擎。
在本教學結束時,您將在DigitalOcean Droplet上安裝Docker,管理容器,處理映像,新增持久性,並設定私人註冊表。
先決條件
要學習本教程,您將需要:
按照Ubuntu 16.04初始伺服器設定教程設定一個Ubuntu 16.04 Droplet,其中包含一個sudo非root使用者和一個防火牆。
Docker Hub帳號 。 Docker Hub的這個概述將幫助你開始。
預設情況下, docker指令需要root權限。 但是,可以透過在docker群組中以docker使用者身分執行docker來執行不帶sudo前綴的命令。
要以此方式設定您的Droplet,請執行指令sudo usermod -aG docker ${USER} 。 這會將目前使用者新增至docker群組。 然後,執行指令su - ${USER}以應用新的群組成員身分。
本教學希望您的伺服器配置為不使用sudo前綴來執行docker指令。
第1步- 安裝Docker
在SSH進入Droplet後,執行以下命令刪除所有可能已經安裝的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 Engine的詳細資訊。 下一個指令將驗證Docker Tools是否正確安裝和設定。 它應該列印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 Engine將首先拉取映像然後運行它。 再次執行docker images指令顯示我們有本機可用的hello-world映像。
讓我們啟動一個更有意義的容器:一個Apache Web伺服器。
docker run -p 80:80 --name web -d httpd
您可能會注意到傳遞給docker run命令的其他選項。 以下是對這些開關的解釋:
-p - 這告訴Docker引擎在主機的連接埠80上公開容器的連接埠80 。 由於Apache在連接埠80上監聽,我們需要在主機連接埠上公開它。 --name - 這個開關為我們正在運作的容器分配一個名字。 如果我們省略這個,Docker Engine將會分配一個隨機的名字。
-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 '<h1>Hello World from Container</h1>' > index.htmlexit
再次执行curl localhost命令显示Web服务器正在返回我们创建的页面。
我们不仅可以从主机访问这个文件,但我们也可以修改它:
cd htdocs cat index.html echo '<h1>Hello World from Host</h1>' | 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 '<h1>Welcome to my Web Application</h1>' > 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教程
以上是怎麼安裝和配置docker的詳細內容。更多資訊請關注PHP中文網其他相關文章!