Doccker
Docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的
Linux机器上,也可以实现虚拟化,容器是完全使用沙箱机制,相互之间不会有任何接口。
一个完整的Docker有以下几个部分组成:
-
DockerClient客户端
-
Docker Daemon守护进程
-
Docker Image镜像
-
DockerContainer容器
docker安装
ubuntu下的安装。使用snap应该是最简单的方法。
- #安装docker
sudo snap install docker
#移除docker - sudo snap remove docker
查看snap的安装列表
可以看到本次安装的docker版本是18.06.1-ce
- lgj@lgj-Lenovo-G470:~$ snap list docker
- Name Version Rev Tracking Publisher Notes
- docker 18.06.1-ce 384 stable canonical* -
测试docker是否安装成功
- lgj@lgj-Lenovo-G470:~$ docker version
- Client:
- Version: 18.06.1-ce
- API version: 1.38
- Go version: go1.10.4
- Git commit: e68fc7a
- Built: Tue May 7 17:57:34 2019
- OS/Arch: linux/amd64
- Experimental: false
- Server:
- Engine:
- Version: 18.06.1-ce
- API version: 1.38 (minimum version 1.12)
- Go version: go1.10.4
- Git commit: e68fc7a
- Built: Tue May 7 17:57:34 2019
- OS/Arch: linux/amd64
- Experimental: false
docker常用命令
- #查看docker支持的所有命令
docker
#查看docker命令的使用方式
docker images --help
docker ps --help
#查看安装的镜像
docker images [OPTIONS] [REPOSITORY[:TAG]]
#查看运行的容器
docker ps
#查看所有的容器
docker ps -a
#删除镜像
docker rmi -f [REPOSITORY[:TAG]]
#删除容器
docker rm [OPTIONS] CONTAINER [CONTAINER...]
更多命令参考官方命令文档
dockerfile使用
docker的更多使用方法参考
<Docker开发实践><Docker开发指南><没什么难的Docker入门与开发实战><第一本DOCKER书>
Jenkins
Jenkins是一个独立的开源软件项目,是基于Java开发的一种持续集成工具,用于监控持续重复的工作,旨在提供一个开放易用的软件平台,使软件的持续集成变成可能。前身是Hudson是一个可扩展的持续集成引擎。可用于自动化各种任务,如构建,测试和部署软件。Jenkins可以通过本机系统包Docker安装,甚至可以通过安装Java Runtime Environment的任何机器独立运行。
安装
下载地址
选择下载war包

下载之后直接运行即可,指定端口为8097,访问地址为http://localhost:8097
- java -jar jenkins.war --httpPort=8097
运行后会在用户目录下生成.jenkins工作目录。
首次登录需要用户名和密码
用户名为:admin
密码查看 .jenkins/secrets/initialAdminPassword 文件中。
- lgj@lgj-Lenovo-G470:~$ cat .jenkins/secrets/initialAdminPassword
- 7d3bc703deb449debce0a25dfd3a00ad

配置
安装git插件
系统管理-插件管理

配置jdk和maven
系统管理-全局工具配置
可以选择本地或者自动安装


jemkins更多使用方式参考官方文档 <jenkins权威指南>
创建一个SpringBoot应用
只有一个controller类
- @RestController
- @RequestMapping("/web")
- public class WebController {
- @RequestMapping("/demo")
- public String demo(){
- return new Random().nextInt(100)+"";
- }
- }
访问端口为:8452
上传到git,仓库地址为https://github.com/lgjlife/web-demo
构建jenkins项目
首页-新建任务-构建一个maven项目(项目名称为:web-demo-docker)

创建成功后首页可以看到项目列表

项目配置
点击项目名称---配置---进入配置页面
1.配置git仓库
jenkins构建时会自动从git仓库拉取项目文件。
git@github.com:lgjlife/web-demo.git
注意url的写法,写错会自动报错。由于是从公共仓库拉取,所以没有进行认证配置。
本次获取的是master分支。

2.配置触发器
触发器就是定义何种条件下jenkins开始构建项目
这里选择轮询,*/1 * * * * 说明每隔一分钟就进行一次构建,这里只有在git仓库更新之后才起作用。也就是每分钟会去检测git仓库源码是否更新,不更新则不进行构建。
更多表达式的说明点击后面的?图标查看。

3.构建操作
这里选择运行两个shell脚本,脚本后面进行说明

jenkins项目配置完成。
编写Dockerfile文件

注意dockerfile位于主工程目录下。
POM文件配置
- <build>
- <plugins>
- <plugin>
- <groupId>org.springframework.boot</groupId>
- <artifactId>spring-boot-maven-plugin</artifactId>
- <configuration>
- <!-- 指定该Main Class为全局的唯一入口 -->
- <mainClass>com.demo.web.WebApplication</mainClass>
- <layout>ZIP</layout>
- </configuration>
- <executions>
- <execution>
- <goals>
- <goal>repackage</goal><!--可以把依赖的包都打包到生成的Jar包中-->
- </goals>
- </execution>
- </executions>
- </plugin>
<!-- docker 插件配置-->- <plugin>
- <groupId>com.spotify</groupId>
- <artifactId>dockerfile-maven-plugin</artifactId>
- <version>1.4.10</version>
- <configuration>
- <repository>lgj/webdemo</repository>
- <tag>1.0</tag>
- <buildArgs>
- <JAR_FILE>/target/web-1.0.jar</JAR_FILE>
- </buildArgs>
- </configuration>
- </plugin>
-
- </plugins>
- </build>
说明:
dockerfile-maven-plugin ,maven 的docker插件
- <repository>lgj/webdemo</repository>:镜像名称
- <tag>1.0</tag>:镜像标签
一个镜像的完整标识是:镜像仓库/镜像名称:镜像标签
- <JAR_FILE>/target/web-1.0.jar</JAR_FILE>:构建时的传入dockerfile的参数
dockerfile
- #基于jdk8镜像进行构建,创建的镜像已经配置好java环境
FROM openjdk:8
#上述的pom中配置的JAR_FILE将会传入到该参数
#也可以在这里直接配置 ARG JAR_FILE=/target/web-1.0.jar
#用于配置spingboot应用maven打包生成的jar文件- ARG JAR_FILE
#在镜像中创建一个工作目录- run mkdir /worker
#将jar文件复制到工作目录中- add ${JAR_FILE} /worker
#暴露镜像的端口8452,其他端口不开放- expose 8452
#镜像启动时执行的命令,配置多条仅执行最后一条
#这里配置启动jar文件: java -jar /worker/web-1.0.jar- entrypoint ["java","-jar","/worker/web-1.0.jar"]
构建脚本build.sh
用于根据dockerfile创建docker脚本
- mvn clean
- mvn package -DskipTests
- docker rmi -f lgj/webdemo:1.0
- mvn dockerfile:build
- docker images
先使用mvn进行打包
再删除旧的镜像,由于不能覆盖创建,因此需要删除再创建。
由于已经pom中已经配置docker插件,可以直接调用:mvn dockerfile:build 进行构建。
运行脚本run.sh
用于创建并运行docker容器
- docker ps -a
- docker stop webdemo-8452
- docker rm -f webdemo-8452
- docker run -d --name webdemo-8452 -p 8452:8452 lgj/webdemo:1.0
- docker ps -a
和创建镜像类似,运行之前必须先删除容器。
docker run 说明:
-d:以后台进程的方式运行。
--name :指定容器的名称为 webdemo-8452
-p : 指定主机和容器的端口映射。docker是基于主机运行的,数据--》主机端口--》容器端口。因此需要配置端口映射。一般配置成一样的。这里只需要访问springboot应用的8452,所以配置成8452.
lgj/webdemo:1.0: 镜像名称
所有文件编写完成后,重新pull到git仓库。
jenkins构建
点击项目页面的立即构建
可以看到下方的构建历史。
点击进去查看每次构建的具体情况。

点击控制台输出,可以查看构建过程的输出

构建过程:
1.拉取远端的git仓库文件到jenkins的工作目录/home/lgj/.jenkins/workspace/web-demo-docker
2. 执行配置的相关命令和操作。
输出 Finished: SUCCESS 则表示构建成功。
完成!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!