从开发到部署会用到的 Docker 命令
本文的目的是理解容器开发在目标环境中部署的端到端流程,并列出这些操作所需的 Docker 命令。1. 介绍
整个流程包括使用代码、依赖软件和配置来开发容器映像,在开发环境中运行和测试容器,将容器映像发布到 Docker Hub,以及最后的部署和在目标环境中运行容器。
本文假设您已经在开发和目标环境中安装了 Docker 引擎。有关安装说明请参阅 6.3:https://docs.docker.com/engine/installation/。
2. 开发容器映像
在构建容器映像之前,你需要创建一个 dockerfile,它包含了所需要的信息。请参考https://nodejs.org/en/docs/guides/nodejs-docker-webapp/来编制一个 dockerfile。
2.1 构建 Docker 容器
https://mmbiz.qpic.cn/mmbiz_png/dkwuWwLoRKicOhhKdFLILOpmx1vG74v0YzwKaUXFricEZbiaY5wGveJS2GWCyncWPdPxFUicBibyQ1C0YlGk3TicXicrw/640?wx_fmt=png&tp=webp&wxfrom=5&wx_lazy=1
这个命令会使用当前目录下的 Dockerfile。如果 dockerfile 使用了其它文件名或者放在其它位置,可以使用 -f 参数来指定 dockerfile 的名称。“docker build” 命令会构建容器映像,这个容器映像的名称由 “-t” 参数指定。
https://mmbiz.qpic.cn/mmbiz_png/dkwuWwLoRKicOhhKdFLILOpmx1vG74v0YlLmmQeiaKfRCbtzaR34EM7ScicfpxqDvjLBiansstF6b9wIO23C8W3pTw/640?wx_fmt=png&tp=webp&wxfrom=5&wx_lazy=1
https://mmbiz.qpic.cn/mmbiz_png/dkwuWwLoRKicOhhKdFLILOpmx1vG74v0YPho5PoeoJwUusLdPp5cUpspAjibR9OenA32xOozqNNKTQOpWSjhONxw/640?wx_fmt=png&tp=webp&wxfrom=5&wx_lazy=1
2.2 Docker 映像命名规范
如果你只是在本地使用,那么你可以随意为 Docker 容器命名。它可以像上面那边简单的命名为“myApp”。但是如果你想将映像发布到 Docker Hub,就需要遵循特定的命名规范。这个规范有助于 Docker 工具将容器映像发布到正确的命名空间和仓库。
格式如下:
https://mmbiz.qpic.cn/mmbiz_png/dkwuWwLoRKicOhhKdFLILOpmx1vG74v0YNibw6CJnoJVvoyCN49vvjbQibYeIIaUWgj8u3ddQlhUyEm7bTsmx3OKw/640?wx_fmt=png&tp=webp&wxfrom=5&wx_lazy=1
现在我们按上面的规范来构建 Docker 映像:
https://mmbiz.qpic.cn/mmbiz_png/dkwuWwLoRKicOhhKdFLILOpmx1vG74v0YkroThhg3icnt28WCDlhI3vIKh2wGejR0kr5I7ib7ADOcSgQv8CNOOwIA/640?wx_fmt=png&tp=webp&wxfrom=5&wx_lazy=1
我们可以使用“docker tag”命令从已经存在的映像创建新的映像。“docker tag”命令会在下面说明。
2.3 列出 Docker 中所有映像
https://mmbiz.qpic.cn/mmbiz_png/dkwuWwLoRKicOhhKdFLILOpmx1vG74v0YdA5kVicWo0NknVQUYkyYN6GgJ09sC3kPEsUtMLSZL01l9JJ9BJzoVUw/640?wx_fmt=png&tp=webp&wxfrom=5&wx_lazy=1
https://mmbiz.qpic.cn/mmbiz_png/dkwuWwLoRKicOhhKdFLILOpmx1vG74v0Y7SMeAkejNYfWdWUlVnDBgrSC0iaBHK5EJNATdI7ibWgqicWMC6uV8hEYA/640?wx_fmt=png&tp=webp&wxfrom=5&wx_lazy=1
3. 运行容器
3.1 启动 Docker 容器
使用“docker run”命令来启动 Docker 容器。
https://mmbiz.qpic.cn/mmbiz_png/dkwuWwLoRKicOhhKdFLILOpmx1vG74v0YWLqtcIm5nItxtjDwF1TQfzzNYm0ib0ZOvkmDxwLvc0zx4joHOttXxSQ/640?wx_fmt=png&tp=webp&wxfrom=5&wx_lazy=1
https://mmbiz.qpic.cn/mmbiz_png/dkwuWwLoRKicOhhKdFLILOpmx1vG74v0Yod4CG106ImdqWZa7vaXYBhbOdLFP2G1ricGeLvsvIujGLf3MaZKNG3w/640?wx_fmt=png&tp=webp&wxfrom=5&wx_lazy=1
“-d” 参数会让容器以独立的模式来运行容器,这样即使终端关闭了容器仍然会保持运行。
“-p” 用于映射容器。比如,“-p 8080:8080” 的第一个端口号用在 Docker 主机上,第二个端口号是在 Docker 容器中使用的。根据这个参数的设置,所有对 Docker 主机端口的数据传输都会被转发到对应的 Docker 容器端口。
3.2 查看运行中的容器
https://mmbiz.qpic.cn/mmbiz_png/dkwuWwLoRKicOhhKdFLILOpmx1vG74v0Y68E3Y4dvGVBicNgDibG7iaicSZicPicIkjiaOWYniaBOJgHHiataial2eOtuakKw/640?wx_fmt=png&tp=webp&wxfrom=5&wx_lazy=1
https://mmbiz.qpic.cn/mmbiz_png/dkwuWwLoRKicOhhKdFLILOpmx1vG74v0YxSkwkMWUnLRicIzqIiaBC89KQwlhajiaUWxOqL2AQcEsNutC7JVia197hw/640?wx_fmt=png&tp=webp&wxfrom=5&wx_lazy=1
从上面的输出我们可以看到 Docker 容器以 “trusting_snyder” 这个名字在运行。
如果要列出所有容器,而不管其状态如何,使用 “-a” 参数。
https://mmbiz.qpic.cn/mmbiz_png/dkwuWwLoRKicOhhKdFLILOpmx1vG74v0YGMmpibicRPEE0NBoL4LxFntUylyic5ZjqWibVfcrX7bCkWKSI9NuysmGCw/640?wx_fmt=png&tp=webp&wxfrom=5&wx_lazy=1
3.3 显示运行中容器的控制台日志
https://mmbiz.qpic.cn/mmbiz_png/dkwuWwLoRKicOhhKdFLILOpmx1vG74v0Yf8ic2HNicyBNo9wfzSXfib9IdSdxcsa9wp2TBjrJ7Nc8s0yxiaXzxxzHHA/640?wx_fmt=png&tp=webp&wxfrom=5&wx_lazy=1
https://mmbiz.qpic.cn/mmbiz_png/dkwuWwLoRKicOhhKdFLILOpmx1vG74v0YD5AfMc7ZuhCy4fVibTSjf89c1LibVNN4ZkQNyzxolsNQwL1DhMQ8gicKA/640?wx_fmt=png&tp=webp&wxfrom=5&wx_lazy=1
ContainerName(容器名称) 可以通过 “docker ps” 命令找到。
3.4 登入容器
https://mmbiz.qpic.cn/mmbiz_png/dkwuWwLoRKicOhhKdFLILOpmx1vG74v0Y3ufyNcTmxlqy1zJdqEHiaoqcY0FriaqSrEuSeH8J8QLzqibOC2xS4GTzg/640?wx_fmt=png&tp=webp&wxfrom=5&wx_lazy=1
上面的命令会用容器中的 “bash” shell 给出提示。
https://mmbiz.qpic.cn/mmbiz_png/dkwuWwLoRKicOhhKdFLILOpmx1vG74v0Y1VWqRpLSzZ8PHia8RMCodIpGd5EPjTTZJoV5jnniaAV2P9XZ0VHBjINw/640?wx_fmt=png&tp=webp&wxfrom=5&wx_lazy=1
3.5停止容器运行
https://mmbiz.qpic.cn/mmbiz_png/dkwuWwLoRKicOhhKdFLILOpmx1vG74v0YEKLYhGXhI11SFQ8miap7oJtzUHxQ5gzwV74FV9nia8MXic5jS80yQdibtQ/640?wx_fmt=png&tp=webp&wxfrom=5&wx_lazy=1
https://mmbiz.qpic.cn/mmbiz_png/dkwuWwLoRKicOhhKdFLILOpmx1vG74v0YszYk2XPjw7mHnJk25uYuCiaianIibIXCLTc4qnEic62xVStXlwQwD7kvpg/640?wx_fmt=png&tp=webp&wxfrom=5&wx_lazy=1
3.6从 Docker 中删除容器映像
使用 “docker images” 或 “docker images -a” 命令找到 imageId(映像 ID)。
上面的命令会强制删除指定的映像。
3.7 清理 Docker / 删除本地 Docker 中所有容器映像
4. 发布容器映像
Docker 容器映像可以发布到本地库或公共的 Docker Hub。两种情况所使用的命令的操作过程一样。为了将你的 Docker 映像发布到 Docker Hub,你得先在 http://hub.docker.com 创建自己的命名空间和仓库。
我自己的命名空间是 “saravasu”,当前练习使用的仓库是 “techietweak”。
4.1 登录 Docker Hub
如果你想登录本地库,请先提供 URL。如果没有指定 URL,那么这个命令会登录 Docker Hub。
4.2 标记容器映像
在把容器映像推送到 Docker Hub 之前,必须按指定的格式对其进行标记:<Namespace>/<Repository>:<Version>。如果你没有指定版本(version),它会使用默认的 “default”。下面的命令演示了标记映像:
4.3 将 Docker 映像推送到 Docker Hub
https://mmbiz.qpic.cn/mmbiz_png/dkwuWwLoRKicOhhKdFLILOpmx1vG74v0YUO2DDmCQ8KppvHfWwBuNPqo4hco1IwxUQYhzkHN6u35uYbRCEgLNyw/640?wx_fmt=png&tp=webp&wxfrom=5&wx_lazy=1
4.4 在 Docker Hub 中检查容器映像
现在使用你的账号登录 Docker Hub 并检查映像的仓库中进行检查。
https://mmbiz.qpic.cn/mmbiz_png/dkwuWwLoRKicOhhKdFLILOpmx1vG74v0Y36vwbdsv5xpXFWiaROH5QlE8oIelo6axdqSPXufZS5hkmjpf3FsO8dw/640?wx_fmt=png&tp=webp&wxfrom=5&wx_lazy=1
5 部署容器
5.1 拉取 Docker 容器映像
在主机的目标环境中登录 Docker Hub 并从 Docker Hub 拉取容器映像。如果你想从私有的船坞(指 Docke 映像库)中拉取,需要使用命令 “$docker login <hostname>” 来指定私有仓船坞的主机名(hostname)。
https://mmbiz.qpic.cn/mmbiz_png/dkwuWwLoRKicOhhKdFLILOpmx1vG74v0Yibic11AwhQATxZqlaQC4lj1iaqen29GaDBhZmzRaTVITNwibDO6GAiaIFNA/640?wx_fmt=png&tp=webp&wxfrom=5&wx_lazy=1
由于上面的命令没有指定主机名称,它会登录 https://hub.docker.com。
https://mmbiz.qpic.cn/mmbiz_png/dkwuWwLoRKicOhhKdFLILOpmx1vG74v0Ymo77TibNVeHeJSuzR6yl2A9lrZ8pwfnO48ZVZGbmblS9DC6r0nu1cgg/640?wx_fmt=png&tp=webp&wxfrom=5&wx_lazy=1
https://mmbiz.qpic.cn/mmbiz_png/dkwuWwLoRKicOhhKdFLILOpmx1vG74v0YMPVR9xZXv115YJQCHK8VeqZuLVY4ZkmPFTgL9fWn8e4p8tvSCRYzZA/640?wx_fmt=png&tp=webp&wxfrom=5&wx_lazy=1
5.2 检查映像
docker pull 命令会从 Docker Hub 下载容器映像。我们可以使用 “docker images” 命令来对其进行检查。
https://mmbiz.qpic.cn/mmbiz_png/dkwuWwLoRKicOhhKdFLILOpmx1vG74v0YLhrW90F525ArXic5icl2WClxpJjmwJqUZD9rsepUicicrkiacBnf7YWxuEA/640?wx_fmt=png&tp=webp&wxfrom=5&wx_lazy=1https://mmbiz.qpic.cn/mmbiz_png/dkwuWwLoRKicOhhKdFLILOpmx1vG74v0Y3ufXjCEHDXrAUE5y6Vb0mhzKIdLAw8rO8sWFJsEhddpz7Ddk0EAM2Q/640?wx_fmt=png&tp=webp&wxfrom=5&wx_lazy=1
5.3 运行容器
现在我们用与在开发环境下运行测试相同的方法来运行 Docker 容器。之前做过,轻车熟路。
https://mmbiz.qpic.cn/mmbiz_png/dkwuWwLoRKicOhhKdFLILOpmx1vG74v0YaaZFEHxW9kwgkClzGwKzMtU3sxxR0ia04SJSdeuNcThhJg4icbIb4x7A/640?wx_fmt=png&tp=webp&wxfrom=5&wx_lazy=1
https://mmbiz.qpic.cn/mmbiz_png/dkwuWwLoRKicOhhKdFLILOpmx1vG74v0YrwiaicVaCrotdMtGmsCOEgCssYfxfGBXfde5sfT51ia8Fmpzsbr5WXVfw/640?wx_fmt=png&tp=webp&wxfrom=5&wx_lazy=1
docker run 命令会启动容器。可以使用 “docker ps” 命令来检查。Docker 创建并运行了一个新的容器,其名称为 “naughty_lewin”。
我们在上面看到 Docker 引擎为运行的容器提供了一个随机的名称,这在自动化过程中可能会产生问题,所以最好是按我们的意愿指定一个名称。这可以由 “-name” 参数实现。
https://mmbiz.qpic.cn/mmbiz_png/dkwuWwLoRKicOhhKdFLILOpmx1vG74v0YORCIxj1kst8Nq59WupjaVfrQBt2wIt5icaXUU5f2sbQcaHx0bQTmbiaA/640?wx_fmt=png&tp=webp&wxfrom=5&wx_lazy=1
https://mmbiz.qpic.cn/mmbiz_png/dkwuWwLoRKicOhhKdFLILOpmx1vG74v0YhDgNzeZMUxgTYIs6nVia5FRcqeHxU4rkAn6flEeWVxxLia60NMIHaD7g/640?wx_fmt=png&tp=webp&wxfrom=5&wx_lazy=1
6. 总结
本文涵盖了开发一个容器映像的流程和必要的命令,讲解了在本地环境运行,以及将映像发布到 Docker Hub,并在目标环境运行容器。想进一步研究,或者阅读详细的文档,请移步 Docker 网站。
页:
[1]