「3个场景快速上手Docker容器技术」
考虑如下3个场景:
当然还有很多其他类似的问题,但现在用Docker容器技术统统可以帮我们解决。
我们知道,容器运行时,可以添加-p参数,以指定映射不同的主机端口:
# -p 指定主机端口和容器端口的映射关系
# -d 指定容器在后台运行
# 如下运行2个容器,映射到主机上不同的端口上
docker run -p 8080:80 -d helloworld:v1
docker run -p 8081:80 -d helloworld:v1
A、B测试人员分别使用不同的容器服务,是不是就没有之前的测试环境冲突的问题了?
此时我们使用docker commit打包一个状态镜像(还可以直接将镜像发布给开发),是不是也可以解决问题了?
Docker 提供了一个 docker commit 命令,可以将容器的存储层保存下来成为镜像。换句话说,就是在原有镜像的基础上,再叠加上容器的存储层,并构成新的镜像。以后我们运行这个新镜像的时候,就会拥有原有容器最后的文件变化。
docker commit 的语法格式为:
docker commit [选项] <容器ID或容器名> [<仓库名>[:<标签>]]
我们可以用下面的命令将容器保存为镜像:
$ docker commit \
--author "测试开发囤货 <jiawei.li2@qq.com>" \
--message "默认网页弹窗bug" \
webserver \
nginx:v2
sha256:07e33465974800ce65751acc279adc6ed2dc5ed4e0838f8b86f0c87aa1795214
镜像定制好后,我们可以来运行这个镜像:
docker run --name web2 -d -p 81:80 nginx:v2
针对不同项目工程部署在不同测试环境的问题,有了Docker容器技术,我们也可以使用docker build打包,然后运行在同一主机上。
需要注意的是端口冲突的问题,如果你看到如下的错误,请检查看一下是否是端口冲突了:
docker: Error response from daemon: failed to create endpoint drunk_babbage on network bridge: Bind for 0.0.0.0:80 failed: port is already allocated.