Docker入门

来源:互联网 发布:淘宝客服常用问候语 编辑:程序博客网 时间:2024/06/05 21:11

一、Docker是什么
    个人简单的认为,Docker作为一个容器引擎跑在linux宿主机上,容器内部署服务非常轻量,且做到容器随时创建删除的可伸缩性。

二、Docker怎么用
    以下为本人入门阶段的总结。

1、准备
开发环境和工具:
win7(64-bit)   jdk1.8   maven   eclipse
win10之前的版本只能安装Docker Toolbox,安装步骤全部默认。
Docker Quickstart Terminal用git的bash命令行打开。
一番初始化后,docker安装完成,运行在win7(本机)虚拟机上。

# Docker Quickstart Terminal可执行命令# 查看运行docker的宿主虚拟机$ docker-machine ls # 和default虚拟机docker daemon交互需要用到的环境变量$ docker_machine env default

2、开发阶段
主要利用docker-maven-plugin插件将Docker构建镜像集成到IDE内。

3、部署阶段
上篇部署helloworld时,最后将源码复制到了云端进行编译打包,再构建镜像运行容器。正式开发的话肯定不会将源码放到生产环境去编译打包部署。这时一般有两种方法:
1、生产环境Docker开启remote Api服务,本机远程访问Docker端口,并发布构建镜像、运行容器等命令。此方法安全风险非常高(安全加固方法主要解决访问控制和通信加密),但是对远程容器操作非常简单。
2、本地编译打包并构建镜像,将镜像保存成文件上传云端,云端加载镜像运行容器。此方法非常简单,但是步骤较多。

简单记录下第二种方法遇到的一些坑:
1、利用mvn clean package docker:build命令构建镜像时(简称构建,下同),抛出异常Connect localhost:2375 failed。
解决方法:缺少环境变量,执行docker-machine env default命令,把环境变量配置进系统。default虚拟机最好分配一个固定ip,默认为192.168.99.100。
2、构建时,抛出异常Get https://registry-1.docker.io/v2/: net/http: request canceled while waiting for connection。
解决方法:虚拟机默认是以NAT方式访问互联网,先排除本机网络问题。另外可以考虑Docker Quickstart Terminal执行命令docker-machine restart default,重启虚拟机。
3、docker save load迁移镜像,发现导入的镜像为none:none。
解决方法:save时使用image id作为源镜像参数,新导入的镜像会是none:none,旧镜像不变。使用repository时,如果repository:tag已存在则新镜像占用此rep:tag,旧镜像变成none:none。另外,还有其他几种情况会生成none:none镜像,可查阅资料解决。

# 保存镜像,第一个参数尽量使用repository$ docker save example | gzip > c:/example-latest.tar.gz# 载入镜像$ docker load -i example-latest.tar.gz

三、借鉴来的最佳实践
1、容器应做到层次精简,控制镜像大小。
2、应用解耦,每个容器运行单一服务,利用容器关联特性解决服务依赖问题。
3、易读的镜像标签,避免镜像和容器空间膨胀。
经验有限,暂时先写这么多。。。