在docker部署时首先要保证一般部署能够访问。
docker命令部署spring boot项目
目前主流的java框架为spring,软件包为jar包,只需以jar为基础构建容器环境。打包为jar后只需要jvm就可以运行,因此需要以jdk为镜像构建容器。
- 基于命令构建jdk环境
拉取openjdk镜像:docker pull openjdk:8
- 上传web文件,启动容器和web服务
sudo docker run -id --name=springboot1 -p 8080:8080 -v /home/master/java:/root/www openjdk:8
构建容器命令。
如上图所设计使用构建容器命令,创建了一个伪终端,终端编号是唯一的,新建一个终端使用docker ps
查看容器状态。共享文件需要时绝对路径
构建的容器由于映射了共享文件夹,所以容器和主机都会自动同步。
移动文件到共享文件夹
容器的共享文件夹自动同步了主机共享文件夹的内容,如下图:
启动的容器目录下存在jar文件,在容器终端使用命令行启动即可。
外部浏览器成功访问,到此可部署jar的web因此的docker容器构建成功。
启动成功后直接断开ssh连接即终端容器也继续在后台运行。
使用sudo docker exec -it [container_name] /bin/bash
进入容器内部。/bin/bash
时linux的交互式终端。一定要有-it
表示创建一个伪终端。
-i
表示创建交互式容器
-t
表示生成一个伪终端
由上图可以看到openjdk竟然526mb,这是由于镜像是一个分层的系统,openjdk底层也使用了其他镜像,软件工具包时构建在操作系统上的,因此jdk也需要构建在操作系统上,因此openjdk的镜像分层如下:
容器面向操作系统,因此操作系统是容器的最底层,镜像也是由此一层层构建,dockerhub中央仓库提供了很多构建完成的镜像,帮助用户省略了一步步构建的过程。
拉取的opennjdk也包含了底层的镜像,因此变的很大。
dockerfile构建镜像并部署spring boot项目
编写dockerfile文件vim dockerfile-jdk
# 构建镜像
FROM openjdk:8
# 维护者西信息
MAINTAINER xiaoux@example.com
# 将主机文件复制到容器目录
ADD ./springboottest-0.0.1-SNAPSHOT.jar /root/www/app.jar
# 端口映射
EXPOSE 8080 # 起一个声明作用并不会实际映射,需要docker run -p映射
# 容器内运行命令
CMD java -jar /root/www/app.jar
sudo docker build -f ./dockerfile-jdk8 -t app .
命令基于docckerfile构建容器。
-f
执行dockerfile位置
-t
给镜像起别名
.
指定当前目录
docker minages
查看构建的镜像
docker run
命令直接构建并启动容器。dockerfile的cmd
命令会直接当前docker run的启动命令执行。
也就是说dockerfile配置的参数直接作为docker run的启动的参数命令。由于在配置文件中配置了映射端口,服务启动的命令和共享文件夹,这里直接docker run 镜像名即可。docker run的参数命令会覆盖配置文件的命令。
通过如下命令启动容器,如图
docker run -it -v $pwd:/root/www -p 8080:8080 app
使用dockerfile的方便之处:
- 没有了拉镜像,配置分层镜像,配置共享文件夹一系列步骤。
- 直接基于dockerfile文件通过docker build构建镜像,docker run运行容器非常方便,避免了镜像版本冲突问题。
- 提高了复用性,任何开发者通过dockerfile构建的镜像都完全一样。
- 省略了docker run后的一堆参数,书写方便。
通过dockerfile构建镜像启动容器时,端口和共享文件夹是必须要要配置的。