先说一下个人的一些思考。如果用docker来管理程序的部署,我们有两种方式,第一种是将我们的程序打包成镜像的方式并推送到docker本地仓库,然后将镜像实例化并运行。第二种方式是直接运行docker中的tomcat,但tomcat使用的war文件来自宿主机器(即docker服务器),这样我们每次只需覆盖掉war文件,然后重启tomcat即可,而非频繁的去推送镜像。后面使用docker来运行普通的java程序(例如springboot程序)时,我们也将使用同样的思路。

docker中运行tomcat


我们使用tomcat时,war文件是不需要放在docker容器中的,war文件通常放置在宿主机器。因此我们需要将tomcat容器中tomcat的webapps目录映射出来。

在tomcat容器内部,tomcat的webapps目录位于/usr/local/tomcat/webapps/,这里我们假设宿主机器要映射的webapps目录位于/usr/webapps下;另外我们通常需要为容器指定一个名字,例如projectTest1;为了使容器能开机启动(前提是docker是开机启动的),我们还需要使用–restart=always启动,完整的命令如下:

docker run -d -p 8080 -v /usr/webapps:/usr/local/tomcat/webapps/ --restart=always  --name=projectTest1 tomcat

执行此命令后,我们可以使用docker ps命令查看已经启动的tomat容器。

docker中运行普通的java程序(例如springboot程序)

先说明一下,springboot有专门的一个插件,可以将springboot打包为docker镜像,然后在容器中运行。本文介绍的是如何将springboot当作普通的java程序来运行

假设我们的java程序放在/usr/javaproject1/下,我们先要在其中放一个启动脚本,注意脚本不允许以&结尾。脚本名字假设为run.sh,别忘了赋予其可执行权限,其内容参考如下:

java -jar  xxxx.jar

然后操作docker。

  • 拉取java镜像
docker pull  java
  • 运行
# -w表示设定容器中当前的工作目录
docker run -d -p 8080:8080  -v /usr/javaproject1/:/usr/javaproject1/  -w /usr/javaproject1/ --name=projectTest2  java  ./run.sh

然后就可以使用docker ps命令查看我们的容器了。

bonous:在docker中运行centos

是的,你没看错,我们可以在docker中运行一个centos,直接如下命令即可拉取并运行一个centos容器,并接入到一个终端:

# -i表示交互式操作,-t表示开启一个终端,通常这两个参数一起使用
docker run -it centos