本文链接:https://blog.csdn.net/qq_26235847/article/details/84635250

一、war包(SpringMVC项目)镜像部署

1、拉取tomcat镜像

docker pull tomcat:8.5.30

2、上传需要部署的war包(以hello.war为例)到自定义的工作目录下

3、在上个步骤创建的工作目录下创建Dockerfile文件。将war包和Dockerfile文件放在同一目录下。Dockerfile文件内容如下:

  1. from tomcat:8.5.30

  2. ENV LANG C.UTF-8

  3. ENV TZ=Asia/Shanghai

  4. ENV JAVA_OPTS "-Djava.awt.headless=true"

  5. RUN touch /usr/local/tomcat/bin/setenv.sh && chmod +x /usr/local/tomcat/bin/setenv.sh && echo "CLASSPATH=/xx/hello" >/usr/local/tomcat/bin/setenv.sh

  6. RUN ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone

  7. RUN rm -rf /usr/local/tomcat/webapps/*

  8. ADD hello.war  /usr/local/tomcat/webapps/

  9. WORKDIR /usr/local/tomcat/bin/

  10. CMD ["catalina.sh", "run"]

4、创建镜像(注:-t 表示为该镜像起名称,另外,构建命令后面有个英文实心点,表示当前目录。)

docker build -t hello .

5、通过docker images可以查看该镜像是否已经创建成功了

docker images | grep hello

6、运行自己的镜像,查看是否正常启动(注: -d:表示在后台运行该镜像,按ctrl+C不会终止该程序;-p:表示指定本机的访问端口对应容器的端口)

docker run -d -p 30802:8080 hello

7、docker镜像导出,tar镜像包可以拷贝到其他机器docker环境中加载

docker save hello -o hello.tar

8、docker镜像加载

docker load -i hello.tar

9、测试示例

http://ip:30802/hello

二、zip包(SpringBoot项目)镜像部署

1、拉取tomcat镜像

docker pull java:8

2、上传需要部署的zip包(以hello.zip为例)到自定义的工作目录下。

3、在上个步骤创建的工作目录下创建Dockerfile文件。将zip包解压,和Dockerfile文件放在同一目录下。Dockerfile文件内容如下:

  1. from java:8

  2. ENV LANG C.UTF-8

  3. ENV TZ=Asia/Shanghai

  4. ENV JAVA_OPTS=" -Dspring.config.location=/hello/application.properties"

  5. RUN ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone

  6. ADD hello.zip  .

  7. RUN unzip hello.zip

  8. RUN chmod +x /hello/bin/start.sh

  9. RUN chmod +x /hello /bin/stop.sh

  10. CMD cd /hello /bin/&&./start.sh

4、创建镜像(注:-t 表示为该镜像起名称,另外,构建命令后面有个英文实心点,表示当前目录。)

docker build -t hello .

5、通过docker images可以看到该镜像已经创建成功了

docker images | grep hello

6、运行自己的镜像(注: -d:表示在后台运行该镜像,按ctrl+C不会终止该程序;-p:表示指定本机的端口对应容器中的端口。-it表示以交互模式运行容器并分配伪终端。uap-service项目内置了一个tomcat容器,在其application.properties配置文件中server.port=8080。若设置server.port=xxx,则命令相应位置为30803:xxx)(打开伪终端,进去容器)

docker run -p 30803:8080 hello

7、docker镜像导出,tar镜像包可以拷贝到其他机器docker环境中加载

docker save hello -o hello.tar

8、docker镜像加载

docker load -i hello.tar

9、测试示例

http://ip:30803/hello

三、镜像部署常用操作

查看所有容器

docker ps -a

停止容器运行

docker stop {containerID}

删除容器(-f强制删除,正在运行的容器也删除)

docker rm -f {containerID}

删除镜像(-f强制删除,否则需先停止容器运行才能删除镜像)

docker rmi -f hello

镜像打tag(可以用这种方法更新tag)

docker tag hello hello:1.0.0

查看指定镜像

docker images |grep hello

查看指定进程

docker ps | grep hello

将镜像push到镜像仓库

docker push xx.xx.xx.xx/hello

进入正在运行的容器执行指令(exec命令进入容器再退出后,容器不会停止;attach进入容器再退出后,容器停止)

docker exec -it 0e6d50eb1469(container ID) /bin/bash

docker attach 0e6d50eb1469(container ID)

退出容器

exit / ctrl + c

根据容器的状态,删除exited状态的容器

sudo docker rm $(sudo docker ps -qf status=exited)

退出容器伪终端

按顺序依次ctrl+p,ctrl+q(退出终端不关闭容器)

exit或ctrl+d(退出终端并关闭容器)

CMD

支持三种格式

CMD ["executable","param1","param2"] 使用 exec 执行,推荐方式;

CMD command param1 param2 在 /bin/sh 中执行,提供给需要交互的应用;

CMD ["param1","param2"] 提供给 ENTRYPOINT 的默认参数;

指定启动容器时执行的命令,每个 Dockerfile 只能有一条 CMD 命令。如果指定了多条命令,只有最后一条会被执行。

如果用户启动容器时候指定了运行的命令,则会覆盖掉 CMD 指定的命令。

ENTRYPOINT

两种格式:

ENTRYPOINT ["executable", "param1", "param2"]

ENTRYPOINT command param1 param2(shell中执行)。

配置容器启动后执行的命令,并且不可被 docker run 提供的参数覆盖。每个 Dockerfile 中只能有一个 ENTRYPOINT,当指定多个时,只有最后一个起效。

在容器执行脚本时,注意。当前容器本身是主进程,start.sh的操作是守护进程,必须保证最后一个守护进程处于前台运行状态,否则容器会在执行脚本完成会自动关闭容器,容器停止运行后,所有的脚本里面的进程也随之终止。

之所以出现这种现象,究其原因,一个docker容器同时只能管理一个进程,这个进程退出后,容器也就退出了。这并不意味着一个容器里只能同时运行一个进程(那样太浪费了),只是最后一个运行的进程不能退出。

修改start.sh,保持java命令前台运行,即可避免容器在执行完脚本后exited的情况。start.sh修改如下:

  1. #! /bin/sh

  2. APPNAME=com.xx.xx.rest.Application

  3. java -Xms2048m -Xmx2048m -classpath $CLASSPATH $APPNAME >/dev/null 2>&1

start.sh总结总结:

(1)容器中运行多个守护进程时,前面的进程要用后台方式运行(或添加 &),否则后面的服务无法启动。

(2)容器中最后一个守护进程一定要用前台方式运行,否则start.sh退出,容器退出,所有的服务就白启动了。

【转载】Docker镜像打包示例相关推荐

  1. Docker镜像打包示例

    一.war包(SpringMVC项目)镜像部署 1.拉取tomcat镜像 docker pull tomcat:8.5.30 2.上传需要部署的war包(以hello.war为例)到自定义的工作目录下 ...

  2. docker镜像打包save,载入load,启动run

    docker镜像打包save,载入load,启动run docker打包,针对的是镜像,而不是运行中的容器. 查看当前系统的镜像文件: docker images 首先,将当前运行中的,已经自定义修改 ...

  3. tez-ui docker镜像打包配置并部署K8S

    一.下载tez ui安装包并修改配置文件 1.1 选择版本下载, tez-ui下载官方地址 mkdir tez-ui && cd tez-ui wget https://reposit ...

  4. docker镜像打包传输

    镜像提交: docker commit -a "作者名称" -m "修改记录" 容器id|容器名称 自定义镜像名称:镜像版本例如:docker commit - ...

  5. docker镜像打包上传

    首先我们先到docker官网注册一个账号,这样我们才能将制作好的镜像上传到docker仓库,打开https://hub.docker.com/ 1.查看本地所有镜像 docker images 2.选 ...

  6. 怎么把一个Java应用打包成Docker镜像

    怎么把Java应用打包成Docker镜像?对熟悉Docker的同学这应该是一个很简单的问题,把项目打包成JAR包然后在Dockerfile里用ADD命令把JAR文件放到镜像里,启动命令设置执行这个JA ...

  7. springboot项目打包为docker镜像并上传nexus私服

    springboot项目docker打包镜像上传Nexus私服 1.springboot项目打包为docker镜像并上传nexus私服 1.0. 必要条件 1.1.开启docker远程访问 1.2.配 ...

  8. docker配置python环境_PyCharm使用Docker镜像搭建Python开发环境

    在我们平时使用PyCharm的过程中,一般都是连接本地的Python环境进行开发,但是如果是离线的环境呢?这样就不好搭建Python开发环境,因为第三方模块的依赖复杂,不好通过离线安装包的方式安装.本 ...

  9. Docker容器的备份与恢复,Docker镜像的备份与恢复

    1. 备份容器 首先,为了备份Docker中的容器,我们会想看看我们想要备份的容器列表.要达成该目的,我们需要在我们运行着Docker引擎,并已创建了容器的Linux机器中运行 docker ps 命 ...

最新文章

  1. Asp.net支持的最大上传文件大小
  2. 【noiOJ】P1996
  3. Go 永久阻塞的方法
  4. 复习上学期的HTML+CSS(1)
  5. oracle set markup,oracle sql*plus set spool介绍(二)
  6. 使用事件委托降低重复的事件绑定,从而降低dom操作的对性能的消耗[兼容IE版]
  7. python中if语句求最大值_python 判断三个数字中的最大值实例代码
  8. mongodb从2.6迁移到3.0过程
  9. java中sort的cmp_快速排序(cmp函数详解)
  10. linux 开发板模拟u盘,ARM-Linux开发 - USB Gadget Storage 制作模拟U盘
  11. BZOj 4540: [Hnoi2016]序列 [莫队 st表 预处理]
  12. 金庸群侠传 3小时爆机
  13. Java 报表工具选择
  14. IEBrowser IE升级工具 下载
  15. 如何深入Delphi编程
  16. 软考 系统架构设计师 2009-2018年英语翻译及重点词汇
  17. python caffe框架_Windows下的caffe框架的配置
  18. 数独的Java版解法
  19. python eel + vue开发桌面应用
  20. 电子邮件附件下载器简介

热门文章

  1. B - Cube HDU - 1220 (数学计数)
  2. Linux用户管理(六)Linux磁盘管理
  3. 《并行计算的编程模型》一1.10 MPI开发心得
  4. 解决在Windows 2003的 IIS 6.0 中无法上传超过200K的附件以及无法下载超过4M的附件问题...
  5. springBoot入门第一章springBoot第一个程序
  6. MonetDB heap bug?
  7. PS2: 这篇文章中的图片绘图工具使用的是Dia (sudo apt-get install dia)。据说yEd也很不错。...
  8. C语言基础函数(二)
  9. windows 和 linux服务器环境下j2sdk 的安装和环境设置
  10. CSS样式:2、超出隐藏控制