回顾
「3个场景快速上手Docker容器技术」
背景
考虑如下3个场景:
- 问题一:A、B两位测试人员共同负责同一核心模块的测试,希望测试环境独立,互不影响;
- 问题二:测试过程中发现某个问题,希望保留此现象环境,以便后面排查定位问题;
- 问题三:有没有发现自己的host环境特别多,服务部署在各测试环境上,希望统一化管理。
解决措施
当然还有很多其他类似的问题,但现在用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.
下集预告
- 使用Docker管理测试数据