赞
踩
我用于记录命令和流程
- # 基础镜像使用java
- FROM java:8
- # 作者 名字 邮箱 (可以不写)
- MAINTAINER lixilin <15133119533@163.com>
- # 将jar包添加到容器中并更名为app.jar
- ADD network-0.0.1-SNAPSHOT.jar app.jar
- # 运行端口
- EXPOSE 11530
- # 启动命令,加载指定路径的配置文件
- ENTRYPOINT ["java","-jar","app.jar","--spring.config.location=/config/application.yml"]
- ## 设置所属时区
- ENV TZ=Asia/Shanghai
- ## 创建本地和容器的连接
- RUN ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone
(1)这里会出现一个镜像去多个客户部署的情况,这种就需要动态修改配置文件
这个时候需要加上指定配置路径
ENTRYPOINT ["java","-jar","app.jar","--spring.config.location=/config/application.yml"]
(2)设置时区,如果不设置时区,查看日志的时候你会发现时间相差八小时。。原因是因为默认使用的0时区的时间。
所以需要指定时区和时间
正常情况下面这个配置就可以生效
ENV TZ=Asia/Shanghai
如果上面配置不生效可以使用下面
RUN ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone
将服务器的时间目录复制到容器内部
必须要有docker环境才能打包啊,这肯定是前提
一般你去部署都是有docker的,也有别人去部署你提供镜像的情况
这个时候就需要在本地安装一个docker,然后去自己打包成镜像然后给部署的人
默认是有docker环境
前提:cd /usr/local/java_project/network 目录下
命令:注意不要少后边的 '.' 不然会报错
docker build -t 你的镜像名称(一般是你的项目名+版本).
-
- docker build -t network-0.0.1 .
不出意外的话就是下图
命令:
使用内部配置文件的启动命令
- #--restart=always [docker重启之后自动启动]
- # --name network-0.0.1 [运行时候的名字,docker ps能查到的]
- # -p 10530:11530 [外部请求的端口:容器内部端口dockerfile规定的端口]
- # network-0.0.1:latest 是你上一步打包镜像时候的名字:是你的镜像版本(默认)
- docker run -d --restart=always --name network-0.0.1 -p 10530:11530 network-0.0.1:latest
使用指定目录下的配置文件启动命令(就是多一个挂载目录)把目录映射出来
- #--restart=always [docker重启之后自动启动]
- # --name network-0.0.1 [运行时候的名字,docker ps能查到的]
- # -p 10530:11530 [外部请求的端口:容器内部端口dockerfile规定的端口]
- # network-0.0.1:latest 是你上一步打包镜像时候的名字:是你的镜像版本(默认)
- docker run -d --restart=always --name network-0.0.1 -p 10530:11530 -v /usr/local/java_project/network:/config -v /etc/localtime:/etc/localtime network-0.0.1:latest
后边的挂载是防止打包镜像时的时区不生效,再次将时间改成当前时间
运行顺利的话就会是返回这个运行镜像的id
不确定的话用docker ps 看一下
如图所示他会告诉你那个镜像用的这个端口
解决办法:换个端口就行,如果不知道具体那些端口占用的话
docker ps 查看一下运行的镜像的信息,找一个没用的就行,容器内部端口不用管,只需要宿主机的端口唯一就行
如图会告诉你这个名字已经被用了
解决方法:改个名字加上版本号就行(简单暴力)
还有一个方法就是你能确定这个同名镜像是自己的直接把镜像停了。(一定确定是自己管理的项目)
docker stop 镜像id/名字
使用docker的查看容器日志命令
docker logs --tail 300 -f efe348fc21e1
还有个方法是将日志文件映射到外部来
当你第二次部署同一个项目的时候你也不想打那么多的同名类似的镜像时候使用(慎用)
docker rmi e4d5e864dc86
如非必要不要使用,一定要看清楚id是不是自己的镜像别删错了就等着挨枪子把。
名字重名了直接加个版本号或者时间都是可以的如非必要不要乱用
使用场景:项目需要迁移,或者去用户现场部署,或者交给运维人员部署都要用到
先查询自己的镜像的id
docker images
复制id并导出
docker save -o network-0.0.1.tar network-0.0.1:latest
如果没有报错的情况下去你的物理机上看下是不是已经导出了
进入到你导出的镜像目录,或者直接写全路径
- docker load -i my.tar
- 或者
- docker load -i /home/my.tar
再看一下镜像列表 docker images
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。