docker打包项目
nginx镜像制作实战
docker容器的主业
docker理念里,容器启动时,应当为它指定主业是什么,如nginx容器主业就是nginx代理服务,tomcat容器就是web服务等等
1、容器创建时,必须指定主业任务,如不指定,则容器无事可干立即退出。
2、在dockerfile打包镜像时,可以使用cmd命令来指定一个默认的主业,如下:

3、既然镜像里是默认主业,即意味着创建容器时,可以覆盖此默认命令,如下

推荐的ENTRYPOINT方式
1、镜像本身应该有稳定的主业,应当指定后即不能更改用途,于是引入ENTRYPOINT
2、使用ENTRYPOINT字义即容器入口,它不能被run中cmd覆盖,如下例:

执行:docker build -t nginxx:v3 .

以后使用nginxx:v3这个镜像时,只能做nginx服务来使用啦
手动打包springboot镜像
我们需要对业务项目打包发布,一样需要制作成为业务镜像,供运维使用,下面讲述springboot的制作过程:
1、将springboot打好的jar包上传
2、在同级目录下,创建Dockerfile文件,内容如下:

3、dockerfile打包业务镜像

4、启动镜像,即得到业务运行
docker run -d -p 8090:8090 --name member member:v1

5、浏览器打开页面校验:http://192.168.244.7:8090/

maven源码打包用法
更多的情况,我们是直接在运维环境里,上传源码,直接maven打包jar,然后再进一步打包成镜像,与手动打包过程类似
如果环境中没有安装maven,请手动安装,脚本如下:
sudo yum install -y yum-utils device-mapper-persistent-data lvm2
# yum-config-manager --add-repo http://repos.fedorapeople.org/repos/dchen/apache-maven/epel-apache-maven.repo
# yum-config-manager --enable epel-apache-maven
// 安装maven
# yum install -y apache-maven
1、上传原码到docker环境中(一般是git/svn直接拉取源码)
2、maven打包
mvn clean package

生成的jar在同级target目录下

3、执行docker命令生成镜像
dockerfile文件内容

命令创建镜像

maven插件打包
前面打springboot包的方式,需要手动上传项目jar或者源码到服务器(违和感很强),这对于开发人员日常发布开发环境项目,极为不便
下面,演示一个maven插件:docker-maven-plugin用法,来打通环境。
前提条件
1、需要我们windows上安装docker服务
2、需要docker服务配置http仓库接口,windows上docker服务配置如下(传统配置模式无权限修改文件)
本地环境配置
1、windows上安装docker-toolbox,傻瓜安装即可。
2、打开Docker Quickstart Terminal终端,等待初始始化完成后。
3、输入docker-machine env命令,返回docker服务的api接口和证书位置,如下:

4、输入docker-machine ssh命令,进入sh环境中,配置http仓库路径

修改文件配置(当前用户是docker不是root,要sudo提升至root):
sudo vi /var/lib/boot2docker/profile

5、修改完成,保存。重启docker服务
sudo /etc/init.d/docker restart

项目环境配置maven插件
在我们的工程pom中加入docker-maven-plugin插件的配置,如下

1、其中,imageName配置镜像的全路径名,即指定私库的名称
2、dockerHost和dockerCertPath对应配置上一步中docker的api和证书值

打包运行
以idea为例,整个项目装配完成,只需要操作maven的一二三步骤,即直接镜像进入仓库,整个过程毫无违和感

若使用的不是idea工具,可直接使用maven命令,一句完成打包,如下:


校验镜像仓库结果
至此,我们的服务器环境,已经可以直接运行docker run 镜像得到结果了

Docker-Compose使用
当项目涉及容器较多时,需要一个管理容器的工具
docker-compose安装
curl方式安装
sudo curl -L https://github.com/docker/compose/releases/download/1.17.1/docker-compose-`uname -s`-`uname -m` > /usr/local/bin/docker-compose
增加可执行权限
sudo chmod +x /usr/local/bin/docker-compose
查看版本
docker-compose version

docker-compose.yaml命令
docker-compose的命令与docker命令极为相似,用法上没有区别,下面列出它特有的几种命令:
up 创建并启动容器:docker-compose up -d --scale 服务名=数字
---------- d表示后台运行,scale是表示对应的服务同时启动几个容器
down 停止并删除容器: docker-compose down
---------- 会停掉容器,并删除掉容器。如果不希望删除容器,请使用stop
docker-compose实战

编写一个项目整体服务,一个网关nginx + springboot的集群,如上图
其中nginx服务,将配置文件挂载在主机当前项目目录的路径下:nginx/conf.d/

命令:docker-compose up -d

docker-compose up -d --scale member-1=2
把member-1服务启动两个容器

Docker网络路由
docker的跨主机网络路由
假设我们现在有两台docker主机,各启动了自己的容器在运行

问题由来
1、在网桥模式下,同一个主机下的容器,使用同一个网桥docker0,它们组成一个局域网,如上图主机1的172.17.6.0网段下的三个容器
2、同一个主机下的容器,相互之间网络是通的
3、但不同主机下,是不同的局域网,它们之间网络不能互通。如:172.17.6.2的容器,想要访问172.17.8.2的容器
方案
a机192.168.244.7,容器网段172.17.6.1/16,a机起了容器ip是172.17.6.2
b机192.168.244.8,容器网段172.17.8.1/16,b机起了容器ip是172.17.8.2
两台机分别配置路由表
a机,route add -net 172.17.8.0 netmask 255.255.255.0 gw 192.168.244.8
b机,route add -net 172.17.6.0 netmask 255.255.255.0 gw 192.168.244.7
添加好后,路由表类似下图

然后a机ping b机容器,发现仍是ping不通,卡住ping不通,就是数据包被drop掉了
ip_forward配置
我们在b机上使用以下命令查看网络包转发情况,发现有掉包
iptables -t filter -nvL FORWARD

我们需要b机上配置,寻找172.17段ip的网络包不要丢掉,要转发
a机: iptables -I DOCKER --dst 172.17.0.0/16 -j ACCEPT
b机: iptables -I DOCKER --dst 172.17.0.0/16 -j ACCEPT
网络ok,整个网络包的流程,完整如下:

docker打包项目的更多相关文章
- docker打包项目部署
1.首先在本地安装docker,步骤可参考https://www.cnblogs.com/conswin/p/11055853.html 2.在对应项目目录下增加Dockerfile文件,其内容可参考 ...
- 生产环境项目问题记录系列(二):Docker打包镜像Nuget包因权限问题还原失败
docker打包镜像遇到一个因为nuget权限验证问题导致镜像打包失败的问题,公司Nuget包用的是tfs管理的,tfs有权限验证,结果导致nuget还原失败,原有的NuGet.config文件如下: ...
- Docker 打包 部署
Docker 打包 部署 一贯的开场白,大家好: 开始学习Spring Boot ,同时也再学习 Maven 自动化构建. 项目的部署环境是 Linux 服务器,Docker容器. 之所以写这篇博客 ...
- 物联网架构成长之路(25)-Docker构建项目用到的镜像1
0. 前言 现在项目处于初级阶段,按照规划,先构建几个以后可能会用到的Image,并上传到阿里云的Docker仓库.以后博客中用到的Image,大部分都会用到这几个基础的Image,构建一个简单的物联 ...
- SpringBoot 部署 docker 打包镜像
SpringBoot 部署 docker 打包镜像 环境: 1.代码编写工具:IDEA 2.打包:maven 3.docker 4.linux 7.JDK1.8 8.Xshell 9.Xftp 第一步 ...
- jenkins+docker+k8s项目发布
目录 一.简介 二.新建docker-build工程 三.项目部署 四.访问测试 一.简介 1.该章节基于jenkins.Harbor.pipeline.k8s来做发布,如对这些不熟悉,请按以下进入学 ...
- 使用.NET 6开发TodoList应用(30)——实现Docker打包和部署
系列导航及源代码 使用.NET 6开发TodoList应用文章索引 需求 .NET 6 Web API应用使用最多的场景是作为后端微服务应用,在实际的项目中,我们一般都是通过将应用程序打包成docke ...
- 用Docker打包Python运行环境
虽然Docker作为部署环境打包镜像的工具,和我的科研并没有直接的关系.但我觉得在项目中运用Docker来打包环境依赖也可以大大提高工作效率,于是准备专门学习一下Docker. 1. Docker基础 ...
- cocos2d-x 2.1.4 使用create_project.py脚本创建项目+ant打包项目
1.创建项目:执行create_project.py脚本,进入Doc界面输入下面的命令: cd D:\cocos2d-x-2.1.4\cocos2d-x-2.1.4\tools\project-cre ...
随机推荐
- Ubuntu用户都应该了解的快捷键
无论我们使用什么操作系统还是什么软件,快捷键都是非常有用的,因为可以在启动应用程序或跳转到所需窗口,可以快速进行很多操作,而无需动鼠标到处点,节省时间和精力,提高效率. 就像在Windows中一样,U ...
- Kafka2.6.0发布——性能大幅提升
近日Kafka2.6版本发布,距离2.5.0发布只过去了不到四个月的时间. Kafka 2.6.0包含许多重要的新功能.以下是一些重要更改的摘要: 默认情况下,已为Java 11或更高版本启用TLSv ...
- 牛X!看完阿里P8架构师推荐的spring三剑客,成功涨薪5k
一直以来,Spring都被Java程序员视为杀手级别的应用,是为简化Java EE应用程序的开发为目标而创建的.Spring可以做很多事情,它为企业级开发提供给了丰富的功能,但是这些功能的底层都依赖于 ...
- Salesforce学习笔记之lwc
1.在Flow中使用Lightning Web Component(lwc)时,发现一个问题.给这个组件设置了一个输入参数,其值取自前一个Screen.第一次运行时,参数的值正确,但是如果这时退回前一 ...
- java进阶(8)--匿名类
一.概念 1.内部类:类的内部定义了一个类 2.内部类分类:静态内部类.实例内部类.局部内部类 3.缺点:内部类的可读性比较差,尽量不用 2.匿名内部类:局部内部类的一种 二.匿名内部类的缺点 1 ...
- (趣味哈哈镜)JMF中摄像头相关的问题
JMF已经非常古老了.最近由于做实验的需要,不得不使用JMF处理视频.开发使用win10系统和eclipse.使用中的问题如下: 1.首先想要使用JMF需要必须安装32位JDK,同时编译软件也需要是3 ...
- 简单实现C++Stack模板
栈的特点是先进后出以及只能在栈顶进行插入和删除操作 本次实现的栈的基本操作: 1)弹栈 2)压栈 3)求栈大小 4)求栈容量 5)判断栈空 6)获取栈顶元素 1.用数组的方式实现栈基本操作 /** * ...
- 完美解决方案-雪花算法ID到前端之后精度丢失问题
最近公司的一个项目组要把以前的单体应用进行为服务拆分,表的ID主键使用Mybatis plus默认 的雪花算法来生成. 快下班的时候,小伙伴跑过来找我,:"快给我看看这问题,卡这卡了小半天了 ...
- Hive 常见面试题(一)
面试题: hive 内部表和外部表的区别? hive 是如何实现分区的? Hive 有哪些方式保存元数据,各有哪些优缺点? hive中order by.distribute by.sort by和cl ...
- 喵的Unity游戏开发之路 - 在球体上行走
很多童鞋没有系统的Unity3D游戏开发基础,也不知道从何开始学.为此我们精选了一套国外优秀的Unity3D游戏开发教程,翻译整理后放送给大家,教您从零开始一步一步掌握Unity3D游戏开发. 本文不 ...