Mac版Docker桌面入门
预计阅读时间: 16分钟欢迎使用Docker桌面!
Mac版Docker桌面部分包含有关Docker桌面社区稳定版的信息。有关Edge版本中可用功能的信息,请参阅Edge版本说明 。有关Docker Desktop Enterprise(DDE)版本的信息,请参阅Docker Desktop Enterprise 。
Docker是用于创建容器化应用程序的完整开发平台。Docker Desktop是在Mac上开始使用Docker的最佳方法。
请参阅安装Docker桌面以获取下载信息,系统要求和安装说明。
检查版本
确保您的版本的docker
, docker-compose
,和docker-machine
是最新的更新和兼容Docker.app
。如果运行的是不同版本,则输出可能会有所不同。
$ docker --version
Docker version 19.03, build c97c6d6
探索应用程序
-
打开命令行终端,然后通过运行简单的Docker映像hello-world来测试安装是否正常:
$ docker run hello-world Unable to find image 'hello-world:latest' locally latest: Pulling from library/hello-world ca4f61b1923c: Pull complete Digest: sha256:ca0eeb6fb05351dfc8759c20733c91def84cb8007aa89a5bf606bc8b315b9fc7 Status: Downloaded newer image for hello-world:latest Hello from Docker! This message shows that your installation appears to be working correctly. ...
-
启动Dockerized Web服务器。就像上面的
hello-world
映像一样,如果在本地找不到该映像,则Docker将其从Docker Hub中拉出。$ docker run --detach --publish=80:80 --name=webserver nginx
-
在Web浏览器中,转到
http://localhost/
以查看nginx主页。由于我们指定了默认的HTTP端口,因此无需在URL末尾附加:80
。早期的beta版本使用
docker
作为主机名来构建URL。现在,端口在VM的专用IP地址上公开,并转发给localhost
(未设置其他主机名)。 -
在Web服务器运行时查看容器的详细信息(使用
docker container ls
或docker ps
):$ docker container ls CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 56f433965490 nginx "nginx -g 'daemon off" About a minute ago Up About a minute 0.0.0.0:80->80/tcp, 443/tcp webserver
-
使用以下命令停止并删除容器和图像。使用“ all”标志(
--all
或-a
)查看已停止的容器。$ docker container ls $ docker container stop webserver $ docker container ls -a $ docker container rm webserver $ docker image ls $ docker image rm nginx
优先
选择Docker菜单 >菜单栏中的首选项 ,并配置以下所述的运行时选项。
一般
在常规选项卡上,您可以配置何时启动和更新Docker:
-
登录时启动Docker Desktop :打开会话时自动启动Docker Desktop。
-
自动检查更新 :默认情况下,Docker Desktop自动检查更新并在更新可用时通知您。您可以随时通过从Docker主菜单中选择检查更新来手动检查更新。
-
在Time Machine备份中包括VM :选择此选项以备份Docker Desktop虚拟机。默认情况下禁用此选项。
-
将Docker登录名安全地存储在macOS钥匙串中 :默认情况下,Docker Desktop将您的Docker登录凭据存储在macOS钥匙串中。
-
发送使用情况统计信息 :Docker Desktop发送诊断,崩溃报告和使用情况数据。此信息可帮助Docker改善应用程序并进行故障排除。清除复选框以退出。
资源资源
资源选项卡允许您配置CPU,内存,磁盘,代理,网络和其他资源。
高级
在“高级”选项卡上,您可以限制可用于Docker的资源。
高级设置为:
CPU :默认情况下,Docker Desktop设置为使用主机上可用处理器数量的一半。要提高处理能力,请将其设置为更大的数字;减少,减少数字。
内存 :默认情况下,Docker Desktop设置为使用2
GB运行时内存,该内存是从Mac上的总可用内存分配的。要增加RAM,请将其设置为更大的数字。要减少它,请降低数字。
交换 :根据需要配置交换文件的大小。默认值为1 GB。
磁盘映像大小 :指定磁盘映像的大小 。
磁盘映像位置 :指定Linux卷的容器和映像的存储位置。
您也可以将磁盘映像移动到其他位置。如果尝试将磁盘映像移动到已有的映像,则会出现提示询问您是否要使用现有映像或替换现有映像。
文件共享
选择您要与容器共享的本地目录。如果项目位于/Users
目录之外,则卷共享需要文件共享。在这种情况下,请共享Dockerfile和卷所在的驱动器。否则,您将file not found
或cannot start service
在运行时cannot start service
错误。
文件共享设置为:
-
添加目录 :单击
+
并导航到要添加的目录。 -
Apply&Restart使用Docker的绑定安装(
-v
)功能使目录可用于容器。可以共享的目录有一些限制:
- 不能共享作为已共享目录的子目录的目录。
- 该目录不得在Docker内部存在。
有关更多信息,请参见:
- osxfs文件系统共享主题中的命名空间 。
- 卷挂载需要
/Users
以外的任何项目目录的文件共享 。)
代理人
Docker Desktop从macOS中检测HTTP / HTTPS代理设置,并将其自动传播到Docker和您的容器。例如,如果将代理设置设置为http://proxy.example.com
,则Docker在提取容器时将使用此代理。
启动容器时,代理设置会传播到容器中。例如:
$ docker run -it alpine env
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
HOSTNAME=b7edf988b2b5
TERM=xterm
HOME=/root
HTTP_PROXY=http://proxy.example.com:3128
http_proxy=http://proxy.example.com:3128
no_proxy=*.local, 169.254/16
您可以从上面的输出中看到设置了HTTP_PROXY
, http_proxy
和no_proxy
环境变量。当您的代理配置发生更改时,Docker会自动重启以获取新设置。如果您有任何容器想要在重新启动之间继续运行,则应考虑使用重新启动策略 。
网络
您可以配置Docker桌面网络以在虚拟专用网络(VPN)上工作。指定网络地址转换(NAT)前缀和子网掩码以启用Internet连接。
Docker引擎
Docker Engine页面允许您配置Docker守护程序以确定容器的运行方式。
在框中输入JSON配置文件以配置守护程序设置。有关选项的完整列表,请参阅《 Docker Engine dockerd命令行参考》 。
点击Apply&Restart保存设置并重启Docker Desktop。
命令行
在“命令行”页面上,您可以指定是否启用实验功能。
实验功能提供了对未来产品功能的早期访问。这些功能仅用于测试和反馈,因为它们可能在版本之间更改而不会发出警告,或者可以从将来的版本中完全删除。实验功能不得在生产环境中使用。Docker不提供对实验功能的支持。有关更多信息,请参阅实验功能 。
要在Docker CLI中启用实验性功能,请编辑
config.json
文件,并将experimental
设置为enabled。要从Docker桌面菜单启用实验性功能,请单击设置 (macOS上的首选项 )> 守护程序 ,然后选择实验性功能复选框。
在Docker Desktop Edge和Stable版本上,您都可以打开和关闭实验功能。如果您关闭实验性功能,则Docker桌面将使用当前普遍可用的Docker Engine版本。
您可以在命令行上查看是否正在运行实验模式。如果Experimental
是true
,那么Docker将以实验模式运行,如下所示。(如果为false
,则关闭实验模式。)
> docker version
Client: Docker Engine - Community
Version: 19.03.1
API version: 1.40
Go version: go1.12.5
Git commit: 74b1e89
Built: Thu Jul 25 21:18:17 2019
OS/Arch: darwin/amd64
Experimental: true
Server: Docker Engine - Community
Engine:
Version: 19.03.1
API version: 1.40 (minimum version 1.12)
Go version: go1.12.5
Git commit: 74b1e89
Built: Thu Jul 25 21:17:52 2019
OS/Arch: linux/amd64
Experimental: true
containerd:
Version: v1.2.6
GitCommit: 894b81a4b802e4eb2a91d1ce216b8817763c29fb
runc:
Version: 1.0.0-rc8
GitCommit: 425e105d5a03fabd737a126ad93d62a9eeede87f
docker-init:
Version: 0.18.0
GitCommit: fec3683
Kubernetes
Docker Desktop包含一个可在Mac上运行的独立Kubernetes服务器,因此您可以测试在Kubernetes上部署Docker工作负载。
Kubernetes客户端命令kubectl
已包括在内,并配置为连接到本地Kubernetes服务器。如果您已经安装了kubectl
并指向其他环境,例如minikube
或GKE集群,请确保更改上下文,以使kubectl
指向kubectl
docker-for-desktop
:
$ kubectl config get-contexts
$ kubectl config use-context docker-desktop
如果您通过Homebrew或通过其他方法安装了kubectl
,并且遇到冲突,请删除/usr/local/bin/kubectl
。
-
要启用Kubernetes支持并安装作为Docker容器运行的Kubernetes独立实例,请选择Enable Kubernetes 。要将Kubernetes设置为默认协调器 ,请默认选择将Docker堆栈部署到Kubernetes 。
单击“ 应用并重新启动”以保存设置。这将实例化将Kubernetes服务器作为容器运行所需的映像,并在Mac上安装
/usr/local/bin/kubectl
命令。启用并运行Kubernetes后,``Docker桌面首选项''对话框的右下角将显示一个附加状态栏项目。
Kubernetes的状态显示在Docker菜单中,上下文指向docker
docker-desktop
。 -
默认情况下,Kubernetes容器对于诸如docker
docker service ls
类的命令是隐藏的,因为不支持手动管理它们。要使其可见,请选择显示系统容器(高级) ,然后单击应用并重新启动 。大多数用户不需要此选项。 -
要随时禁用Kubernetes支持,请清除“ 启用Kubernetes”复选框。Kubernetes容器将停止并删除,并且
/usr/local/bin/kubectl
命令也将删除。有关将Kubernetes与Docker Desktop集成使用的更多信息,请参阅在Kubernetes上部署 。
重启
重置和重启选项
在Docker Desktop Mac上, `` 疑难解答''菜单中提供了``重启Docker桌面'' , `` 重置为出厂默认值''以及其他重置选项。
有关重置选项的信息,请参阅日志和故障排除 。
添加TLS证书
您可以将可信证书颁发机构(CA)(用于验证注册表服务器证书)和客户端证书(用于对注册表进行身份验证)添加到Docker守护程序。
添加自定义CA证书(服务器端)
支持所有受信任的CA(根或中间CA)。Docker Desktop根据Mac密钥链创建所有用户信任的CA的证书捆绑包,并将其附加到Moby信任的证书。因此,如果主机上的用户信任企业SSL证书,则Docker Desktop会信任它。
要手动添加自定义的自签名证书,请先将证书添加到macOS钥匙串中,然后由Docker Desktop获取。这是一个例子:
$ sudo security add-trusted-cert -d -r trustRoot -k /Library/Keychains/System.keychain ca.crt
或者,如果您只想将证书添加到自己的本地钥匙串中(而不是对所有用户),请运行以下命令:
$ security add-trusted-cert -d -r trustRoot -k ~/Library/Keychains/login.keychain ca.crt
另请参阅证书的目录结构 。
注意 :您需要在对钥匙串或
~/.docker/certs.d
目录进行任何更改后重新启动Docker Desktop,以使更改生效。
有关如何执行此操作的完整说明,请参阅博客文章“ 将自签名注册表证书添加到Docker和Mac的Docker桌面” 。
添加客户端证书
您可以将客户端证书放在~/.docker/certs.d/<MyRegistry>:<Port>/client.cert
和~/.docker/certs.d/<MyRegistry>:<Port>/client.key
。
Docker Desktop应用程序启动时,它将Mac上的~/.docker/certs.d
文件夹复制到Moby(Docker Desktop xhyve
虚拟机)上的/etc/docker/certs.d
目录。
您需要在对钥匙串或
~/.docker/certs.d
目录进行任何更改后重新启动Docker Desktop,以使更改生效。该注册表不能被列为不安全的注册表 (请参阅Docker Daemon )。Docker Desktop会忽略不安全注册表中列出的证书,并且不会发送客户端证书。诸如
docker run
类的命令尝试从注册表中拉出,在命令行以及注册表上都会产生错误消息。
证书的目录结构
如果您具有此目录结构,则无需手动将CA证书添加到Mac OS系统登录名:
/Users/<user>/.docker/certs.d/
└── <MyRegistry>:<Port>
├── ca.crt
├── client.cert
└── client.key
以下内容进一步说明和解释了使用自定义证书的配置:
/etc/docker/certs.d/ <-- Certificate directory
└── localhost:5000 <-- Hostname:port
├── client.cert <-- Client certificate
├── client.key <-- Client key
└── ca.crt <-- Certificate authority that signed
the registry certificate
只要CA证书也在钥匙串中,您也可以具有此目录结构。
/Users/<user>/.docker/certs.d/
└── <MyRegistry>:<Port>
├── client.cert
└── client.key
要了解有关如何为注册表安装CA根证书以及如何设置客户端TLS证书进行验证的更多信息,请参阅Docker Engine主题中的使用证书验证存储库客户端 。
安装外壳完成
Docker Desktop附带了用于启用docker
, docker-machine
和docker-compose
命令的脚本。完成脚本可以在Docker.app
中的Contents/Resources/etc/
目录中找到,并且可以安装在Bash和Zsh中。
重击
Bash 内置了对完成的支持要激活Docker命令的完成,需要将这些文件复制或bash_completion.d/
链接到您的bash_completion.d/
目录。例如,如果您通过Homebrew安装了bash:
etc=/Applications/Docker.app/Contents/Resources/etc
ln -s $etc/docker.bash-completion $(brew --prefix)/etc/bash_completion.d/docker
ln -s $etc/docker-machine.bash-completion $(brew --prefix)/etc/bash_completion.d/docker-machine
ln -s $etc/docker-compose.bash-completion $(brew --prefix)/etc/bash_completion.d/docker-compose
将以下内容添加到您的~/.bash_profile
:
[ -f /usr/local/etc/bash_completion ] && . /usr/local/etc/bash_completion
要么
if [ -f $(brew --prefix)/etc/bash_completion ]; then
. $(brew --prefix)/etc/bash_completion
fi
sh
在Zsh中, 完成系统负责处理事务。要激活Docker命令的完成功能,需要将这些文件复制或符号链接到Zsh site-functions/
目录。例如,如果您通过Homebrew安装了Zsh:
etc=/Applications/Docker.app/Contents/Resources/etc
ln -s $etc/docker.zsh-completion /usr/local/share/zsh/site-functions/_docker
ln -s $etc/docker-machine.zsh-completion /usr/local/share/zsh/site-functions/_docker-machine
ln -s $etc/docker-compose.zsh-completion /usr/local/share/zsh/site-functions/_docker-compose
提供反馈并获得帮助
要获得社区的帮助,请查看当前用户主题,加入或开始讨论,然后登录到我们的Docker Desktop for Mac论坛 。
要报告错误或问题,请在GitHub上登录适用于Mac的 Docker Desktop for Mac问题 ,您可以在其中查看社区报告的问题,并提出新的问题。有关更多详细信息,请参见日志和故障排除 。
有关提供有关文档反馈或自行更新的信息,请参阅“ 贡献文档” 。
Docker中心
从Docker桌面菜单中选择登录/创建Docker ID以访问您的Docker Hub帐户。登录后,您可以直接从Docker Desktop菜单访问Docker Hub存储库和组织。
有关更多信息,请参考以下Docker Hub主题 :
两因素验证
Docker Desktop使您可以使用两因素身份验证登录Docker Hub。当您访问Docker Hub帐户时,两要素身份验证提供了额外的安全性。
您必须先在Docker Hub中启用双重身份验证,然后才能通过Docker Desktop登录到您的Docker Hub帐户。有关说明,请参阅为Docker Hub启用两因素身份验证 。
启用两因素身份验证后:
-
转到Docker Desktop菜单,然后选择登录/创建Docker ID 。
-
输入您的Docker ID和密码,然后单击登录 。
-
成功登录后,Docker Desktop会提示您输入身份验证代码。输入手机的六位数代码,然后点击验证 。
成功通过身份验证后,您可以直接从Docker Desktop菜单访问组织和存储库。
接下来去哪里
-
在“入门”中尝试一下演练。
-
深入了解Docker Labs示例演练和源代码。
-
有关Docker命令行界面(CLI)命令的摘要,请参阅《 Docker CLI参考指南》 。