部署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文件,在容器终端使用命令行启动即可。
外部浏览器成功访问web,并且可以部署jar,至此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启动容器时,必须配置端口和共享文件夹。