最近自己在学习docker,顺便记录一下学习过程,本人电脑是win 10 家庭版的,所以没有在本地安装Docker Desktop For Windows(因为不支持Hyper-v,可通过官网查看 https://docs.docker.com/install ),但是可以通过安装Docker Toolbox + VirtualBox来搭建环境。由于我电脑已经安装了VMWare和centos7,所以只需在centos7上安装docker-ce便可以。

什么是docker,为什么要使用docker?

Docker 是一个开源的应用容器引擎,基于 Go 语言 并遵从Apache2.0协议开源。

Docker 可以让开发者打包他们的应用以及依赖包到一个轻量级、可移植的容器中,然后发布到任何流行的 Linux 机器上,也可以实现虚拟化。

容器是完全使用沙箱机制,相互之间不会有任何接口(类似 iPhone 的 app),更重要的是容器性能开销极低。

Docker 从 17.03 版本之后分为 CE(Community Edition: 社区版) 和 EE(Enterprise Edition: 企业版),我们用社区版就可以了。

Docker的应用场景

Web 应用的自动化打包和发布。

自动化测试和持续集成、发布。

在服务型环境中部署和调整数据库或其他的后台应用。

从头编译或者扩展现有的OpenShift或Cloud Foundry平台来搭建自己的PaaS环境。

Docker 的优点

1、简化程序:

Docker 让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的 Linux 机器上,便可以实现虚拟化。Docker改变了虚拟化的方式,使开发者可以直接将自己的成果放入Docker中进行管理。方便快捷已经是 Docker的最大优势,过去需要用数天乃至数周的 任务,在Docker容器的处理下,只需要数秒就能完成。

2、避免选择恐惧症:

如果你有选择恐惧症,还是资深患者。Docker 帮你 打包你的纠结!比如 Docker 镜像;Docker 镜像中包含了运行环境和配置,所以 Docker 可以简化部署多种应用实例工作。比如 Web 应用、后台应用、数据库应用、大数据应用比如 Hadoop 集群、消息队列等等都可以打包成一个镜像部署。

3、节省开支:

一方面,云计算时代到来,使开发者不必为了追求效果而配置高额的硬件,Docker 改变了高性能必然高价格的思维定势。Docker 与云的结合,让云空间得到更充分的利用。不仅解决了硬件管理的问题,也改变了虚拟化的方式。

上面摘抄自菜鸟教程, 下面我将从环境搭建开始讲起:

1. Win 10 安装 VMWare

下载地址: 链接:https://pan.baidu.com/s/10NA1AtaxPW-HY9borvldXw 含激活教程和注册码

提取码:gf5i ,安装教程可参考: http://www.zhanshaoyi.com/10143.html (可直接下载这个链接中提供的软件)

2. VMWare 安装 centos7

可参考:https://www.jianshu.com/p/0416e6242e67

由于是个人开发测试用,安装centos7后我关闭了防火墙,后面不涉及防火墙的问题

3. centos7 安装jdk、maven

自行百度,maven也可不安装,我当时是为了测试一下将jar包上传到centos7上,然后再打镜像的。

4. centos7 安装 docker

可参考官网: https://docs.docker.com/install/linux/docker-ce/centos/

5. docker服务开通tcp访问

vi /usr/lib/systemd/system/docker.service // 编辑配置

将配置项ExecStart 改为 :ExecStart=/usr/bin/dockerd -H unix:///var/run/docker.sock -H tcp://0.0.0.0:2375

systemctl daemon-reload //重新读取配置文件

systemctl restart docker //重新启动服务

lsof -i:2375 // 查看2375端口是否开启

netstat antlp | grep 2375 // 也可以查看

这一步很重要,为后面的docker_host配置做铺垫,当时我踩了坑,后面查资料才知道。。。

6. IDEA 创建 springboot 应用

springboot应用的创建自行了解,pom.xml截图如下:

docker入门,springboot + docker-maven-plugin_docker

本demo是使用Dockerfile方式构建镜像,如果不使用此方式,Dockerfile文件可以不要,只需将pom的中​​<dockerDirectory></dockerDirectory>​​注释掉,把​​<baseImage></baseImage>​​和​​<entryPoint></entryPoint>​​的注释放开,*​特别注意的是,需要在windows上配置环境变量,DOCKER_HOST:tcp://192.168.2.101:2375,或者在pom中指定​​<dockerHost>http://192.168.2.101:2375</dockerHost>​​,这就是上文提到的为什么要打开2375端口,相当于提供docker环境信息。​IP是虚拟机的IP​。Dockerfile截图如下:

docker入门,springboot + docker-maven-plugin_springboot docker_02

然后打开IDEA的terminal,输入mvn clean package docker:build -DskipTests ,-DskipTests 为跳过测试,构建成功后如下图:

docker入门,springboot + docker-maven-plugin_docker-maven-plugin_03

7. 用Secure CRT 连接虚拟机(其他方式也可)

输入 docker images -a 查看镜像是否上传到centos7上,截图如下:

docker入门,springboot + docker-maven-plugin_docker-maven-plugin_04

8. 运行docker镜像

在secure crt上输入 docker run -d -p 8088:8080 registry.cn-shenzhen.aliyuncs.com/oyc/my-first-docker:1.0.0 运行docker镜像,然后在本地访问 http://192.168.2.101:8088/ ,显示如下:

docker入门,springboot + docker-maven-plugin_docker-maven-plugin_05

-d :后台运行

-p :指定端口映射 8088为主机对外暴露的端口,即Dockerfile中配置的,8080为容器端口,也就是springboot应用的端口,我这里使用默认的。

9. dock push 推送镜像至阿里云镜像仓库

https://cr.console.aliyun.com/ 自行注册阿里账号及创建镜像仓库,具体操作可百度。

sudo docker login --username=[你的账号] registry.cn-shenzhen.aliyuncs.com

sudo docker tag [镜像ID] registry.cn-shenzhen.aliyuncs.com/oyc/my-first-docker:[镜像版本号]

sudo docker push registry.cn-shenzhen.aliyuncs.com/oyc/my-first-docker:[镜像版本号]

截图如下:

docker入门,springboot + docker-maven-plugin_centos_06

上传需要一定时间,上传成功后,可到阿里云的容器镜像服务里面查看上传的镜像。

10. 通过docker-maven-plugin插件推送镜像

上文介绍了使用docker push 命令推送镜像,现在介绍一下通过maven插件推送,相当于少了手动docker push的操作。

  1. 修改maven的配置文件settings.xml,在​​<servers></servers>​​节点中新增配置如下:
<server>
<!--maven的pom中可以根据这个id找到这个server节点的配置-->
<id>docker-francis</id>
<!--这里是在阿里云注册的账号,也可以是docker hub的账号和密码-->
<username>123@qq.com</username>
<!--这里是在阿里云注册的密码-->
<password>123456</password>
<configuration>
<!--这是在阿里云注册时填写的邮箱-->
<email>123@qq.com</email>
</configuration>
</server>
  1. 修改pom.xml配置,将上文pom截图中的一段注释放开即可,所需放开配置如下:
<!-- 推送阿里云相关 -->
<serverId>docker-francis</serverId>
<!--表示阿里云的docker仓库地址。阿里云的容器镜像服务地址-->
<registryUrl>registry.cn-shenzhen.aliyuncs.com</registryUrl>
<!--表示推送镜像到仓库。-->
<pushImage>true</pushImage>
  1. 在terminal中输入mvn clean package docker:build -DskipTests,可看到如下信息:
    docker入门,springboot + docker-maven-plugin_springboot docker_07
    通过截图很明显看到相比dock push 操作,多了push/pushing 相关的字眼,表明正在推送镜像,这时候你可以在虚拟机上执行docker images -a 命令,发现镜像已经传上去了,但是传送到阿里镜像仓库真是一个漫长的操作。。。

11. 在阿里镜像仓库查看镜像

docker入门,springboot + docker-maven-plugin_springboot docker_08

github代码地址: https://github.com/francisoyc/my-first-docker