玩转docker之入门及部署springboot应用
Docker简介
Docker 是一个开源的应用容器引擎,基于 Go 语言 并遵从Apache2.0协议开源。
Docker 可以让开发者打包他们的应用以及依赖包到一个轻量级、可移植的容器中,然后发布到任何流行的 Linux 机器上,也可以实现虚拟化。
容器是完全使用沙箱机制,相互之间不会有任何接口(类似 iPhone 的 app),更重要的是容器性能开销极低。
1.docker安装
1.1 环境配置/要求
安装使用centos7 内核版本为3.10.0-514.el7.x86_64
最低内核版本为3.10,系统版本为64位
1.2 安装命令
安装需要在管理员权限下进行
Yum -y install docker
2.Docker容器常用命令
命令 解释
Service docker start 启动docker服务
Docker images 列出可用的docker镜像
Docker ps 列出当前在运行的docker实例
Docker search xxx 查询名为xxx的镜像,比如查询支持java8的环境,
使用docker search java即可
Docker stop xxx 停止名为xxx或者id为xxx的运行中的docker实例
Docker rmi xxx 删除名为xxx的docker镜像,使用-f选项强制删除
Docker build -t xxx dockerfile-path 通过某路径下的dockerFile构建名为xxx的镜像
例如,“docker build -t snowalker . ”
就表示通过当前路径下的dockerFile生成名为snowalker的镜像
Docker run -d -p 镜像名称 应用名称 -d参数表示在后台运行
-p指定dokcer容器的端口映射
比如:
docker run -d -p 8088:8080 app:boot-final
就表示
将名为app:boot-finald的容器中端口为8080的应用映射到宿主机的8088端口,
并在后台运行,也就是说宿主的8088是映射的容器的8080端口
Docker top xxx 查看容器xxx内部运行的进程
Docker logs -f xxx 查看id为xxx的容器内部的日志信息
Docker inspect xxx 查看容器xxx的运行状态信息和配置
Docker rm xxx 容器在停止状态下对其进行删除,如果不停止会报错
Docker pull xxx 下载一个名为xxx的本地不存在的镜像
3.部署一个boot应用到docker容器
我们的目的是将一个本地已经开发完毕的springboot应用打包之后通过docker容器将其发布。
3.1 准备打包好的应用jar包
1.我这里以一个现成的springboot web应用为例进行部署测试。它的效果看起来是这样的
2.在通过maven clean install 命令进行打包操作,在target目录下得到jar包
3.上传jar到服务器中,如果使用docker的maven插件可以在打包之后直接自动化的生成docker镜像,本次先不讲解这种方式,我们就用手动方式将jar上传即可。这里我使用的是secureCRT的rz命令进行上传,如图
3.2 书写dockerfile
这是比较关键的一步,先看下完成之后的dockerFile的主要内容:
稍作解释:
FROM 基于哪个镜像进行构建
VOLUME 将本地文件夹挂在到当前容器
ADD 复制文件倒容器
EXPOSE 声明需要暴露的端口
CMD 配置容器执行之后的命令
连起来解释就是:通过java:8这个镜像作为基础镜像,将应用复制为app.jar,并挂载在宿主的/tmp下,通过java -jar -Dserver.port=8080 app.jar启动。
3.3 构建镜像
通过命令 Docker build -t snowalker:test-build .
表示通过当前路径下的DockerFile构建镜像名为snowalker:test-build的镜像
通过docker images查看当前的镜像列表
已经有该镜像了
3.4 运行应用测试
通过命令docker run -d -p 8088:8080 snowalker:test-build
启动应用,如图
通过docker logs -f appId 查看日志
具体的appid 通过docker ps查看即可获得
同时别忘了为宿主的端口添加外网访问权限,效果如下图
打开浏览器,访问链接
如上图结果表示我们通过docker部署springboot应用成功。
备注: 1. 为docker配置加速
安装完毕之后最好添加docker国内镜像加速,直接连接速度很慢或者没有速度。
具体的步骤是:
1.登录阿里云https://dev.aliyun.com/search.html 管理中心
2.在后台获取具体的加速方式,我的主机是centos因此使用如图的策略进行配置
- 其他的主机选择对应方式即可
备注: 2. centos7 开放某个端口的外部权限
在centos7之前,开放端口的外部访问权限常常通过iptables进行控制,命令一般为
/sbin/iptables -I INPUT -p tcp --dport 8761-j ACCEPT
/etc/rc.d/init.d/iptables save
service iptables restart
表明为端口8761开放外部访问权限。
CentOS升级到7之后,发现无法使用iptables控制Linuxs的端口,google之后发现Centos 7使用firewalld代替了原来的iptables。下面记录如何使用firewalld开放Linux端口:
开启端口
firewall-cmd --zone=public --add-port=80/tcp --permanent
命令含义:
--zone #作用域
--add-port=80/tcp #添加端口,格式为:端口/通讯协议
--permanent #永久生效,没有此参数重启后失效
重启防火墙
firewall-cmd --reload