九、docker实战
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插件打包:
第一种(使用https):
前面打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 镜像得到结果了
第二种(使用http):
环境配置都同上,但是本地不需要安装dorcker-toolbox,在pom文件中这么配置
<build> <plugins> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> </plugin> <plugin> <groupId>com.spotify</groupId> <artifactId>docker-maven-plugin</artifactId> <version>0.4.13</version> <configuration> <forceTags>true</forceTags> <!--覆盖相同标签镜像--> <imageName>192.168.1.120:5000/test:v1.0.1</imageName> <!--指定镜像名称 仓库/镜像名:标签--> <dockerHost>http://192.168.1.120:2375</dockerHost> <!-- 指定仓库地址 --> <dockerDirectory>${project.basedir}/src/main/docker</dockerDirectory> <!--dockerfile文件路径--> <resources> <resource> <!-- 指定资源文件 --> <targetPath>/</targetPath> <!-- 指定要复制的目录路径,这里是当前目录 --> <directory>${project.build.directory}</directory> <!-- 指定要复制的根目录,这里是target目录 --> <include>${project.build.finalName}.jar</include> <!-- 指定需要拷贝的文件,这里指最后生成的jar包 --> </resource> </resources> </configuration> </plugin> </plugins> </build>
项目和宿主机都换了
项目结构如下:
Dockerfile文件内容:
FROM openjdk:8 ADD ["demo1-0.0.1-SNAPSHOT.jar","web.jar"] EXPOSE 8080 ENTRYPOINT ["java","-jar","web.jar"]
最重要的是宿主机的配置:
首先修改daemon.json文件
我的内容:
{
"registry-mirrors": ["https://registry.docker-cn.com","https://d8b3zdiw.mirror.aliyuncs.com"],
"insecure-registries": ["172.17.0.2:5000","192.168.1.120:5000"]
}
这一步修改的目的是告诉这个ip可以直接用http传输
下面打开服务docker的2375端口,这个端口主要负责传输
修改vi /usr/lib/systemd/system/docker.service
替换ExecStart
ExecStart=/usr/bin/dockerd -H unix:///var/run/docker.sock -H tcp://0.0.0.0:2375
然后重启docker
systemctl daemon-reload
systemctl restart docker
查看2375端口
curl http://127.0.0.1:2375/info
如果显示
则表示正常
开启firewall的2375让别的ip可以访问
firewall-cmd --zone=public --add-port=2375/tcp --permanet
firewall-cmd --reload
启动docker私服容器
docker run -d -p 5000:5000 --name myregistry -v /var/lib/registry:/var/lib/registry registry
执行package、push
(可以使用命令推送mvn clean package docker:build)
看结果:
已经传上来了
ps:使用idea出现了莫名其妙的错,push的时候说服务器无法连接,我重新build一下有的时候就好使,但是有的时候就不行,还在研究这个是什么问题(用命令的时候没有出现该问题)