h一直做.NET项目,最近碰巧有个项目用java写的webapi需要发布到linux的docker中。由于第一次接触所以记录下
环境:目标服务器是是离线无外网访问的redhat,已经安装了docker
实现思路:本地开发,江项目在线发布到有外网访问的 中间服务器的docker中,然后将此docker 导出后 copy到最终服务器 (docker save \ docker load)
插曲:之所以我要来研究这个发布,小组java工程师每次发布项目都是一个整体的java包 (六七百M),这样在离线环境联调更新一次程序要废很长时间。虽然有告知每次发布更新值覆盖修改的模块文件就行了,但java工程师告知:这个实现不了!
第一步:项目上次不在是一个jar包
1.1、在项目右键--Open Module Setting
1.2 选择“手动挡”--Artifacts ,然后点击 “加号”新增
1.3 选择 JAR --From modules with Dependecies...
1.4 选择对应的Module,然后点击 Main Calss 后的 文件图标(用于自动加载入口函数)
重点来了:
1.5 JAR Files From libraries 选择 第二个,(如果选择第一个 就是生成一个整体的jar包)
同时, META-INF/MANIFEST.MF 选择和项目跟目录(我也不知道为什么要选根目录,只是网上说不选根目录容易发布失败【我试过不选根目录果然出问题了,千奇百怪的问题】)
1.6 勾选上 include in project build,这个不是不须项
验证下,能否使用 ,成功!
第二步,配置docker 准备发布到docker环境
2.1、确认已经按照docker插件,如果没有则先安装
2.2在docker服务器上,配置docker允许远程访问(按如下修改一行配置内容)
我们登陆到docker机器上,进行docker远程访问配置:
# vi /lib/systemd/system/docker.service
修改:
ExecStart=/usr/bin/dockerd -H tcp://tcp://0.0.0.0:2375 -H unix://var/run/docker.sock --containerd=/run/containerd/containerd.sock
重启docker 服务:
[root@dev_vonedao_95 ~]# systemctl daemon-reload
[root@dev_vonedao_95 ~]# systemctl restart docker
[root@dev_vonedao_95 ~]# ps -ef |grep docker
root 12319 1 1 18:27 ? 00:00:00 /usr/bin/dockerd -H tcp://tcp://0.0.0.0:2375 -H unix://var/run/docker.sock --containerd=/run/containerd/containerd.sock
root 12461 12217 0 18:27 pts/0 00:00:00 grep --color=auto docker
再次连接就成功了!
2.3 Idea上 File-Setting 然后Build,Execution,Depolyment 然后选择 Docker 选择添加
Name :自己填
链接 docker 选择 :TCP sockect ,Engine API URL 填写:tcp://dockerIP:docker端口 配置正确 且docker启用了 在最下方会自动链接,链接成功则提示“connection successful”
2.4 编辑配置项目
如下图 Sever选择 选择之前配置的docker 下面是一些 Build 和Run的参数 (就是 根据参数构建 docker build 很 docker run)
第三步,导出到离线服务器
docker 导入镜像:
1、将源头镜像 docker save 保存镜像 xxxx.tar
docker save -o analyapi_.tar ecac195d15af
2、在目标docker上 load镜像
docker load --input analyapi_1.tar
或者 导入导出 容器 (容器导出后 在import 其实导入的镜像)
docker export c_nameorid -o filename.tar
或者
docker export c_nameorid > filename.tar
然后
docker import .fienameanddir.tar cname:tag
如 :docker import test.tar c_newbag:v2.2