Docker and Jenkins
1.Docker
1.1Docker构成
-
镜像(Image)
-
容器
-
仓库注册中心(Registry)
- 公有
- 私有
-
仓库(Repository)
1.2docker的基本操作
1.2.1 docker安装
#linux 安装docker
yum install docker
#启动docker
systemctl start docker
#停止
systemctl stop docker
#重启
systemctl restart docker
1.2.2docker image操作
#现实本地有多少docker镜像
docker images
有如下几个参数及其含义:
-
REPOSTORY:镜像所在仓库名称
-
TAG:镜像的版本
-
IMAGE ID:镜像ID
-
CREATED:创建时间
-
SIZE:镜像大小
#查找docker镜像
docker search name
如下几个参数及其含义:
-
NAME:镜像名称
-
DESCRIOPTION:镜像描述
-
OFFICAL:是否官方
-
AUTOMATED:是否自动构建,表示该进镜像由Docker Hub 自动构建流程创建。
docker pull [OPTIONS] NAME[:TAG|@DIGEST]
#要删除镜像需要保证当前镜像不存在容器 才能进行删除
docker rmi imageName
docker官方默认下载镜像的地址是dockerhub,国内的网络下载特别慢,可以配置下ustc的
-
找到daemon.json文件,在/etc/docker目录下
-
修改daemon.json配置
{ "registry-mirrors":["https://docker.mirrors.ustc.edu.cn"] }
1.2.3 docekr container 操作
创建容器
docker run
run后边可以跟一下参数:
-
-i:运行容器
-
-t:容器启动后会进入其命令行。
-
--name 为创建的容器命名
-
-v 目录映射关系(前边是宿主机目录。后者是映射到宿主机上的目录)
-
-d :后台运行
-
-p 前者是宿主端口 ,。就后者是容器内的端口,可以使用多个-p映射多个端口
-
交互方式运行容器
docker run -it --name=containerName repository:tag||imageID /bin/bash
-
守护进程运行容器
docker run -di --name=yourName repository:tag||imageID
进入容器
创建完容器如果想要进入容器可以执行下边的命令
docker exec -it containerName||containerID /bin/bash
容器其他操作
docker ps
docker ps -a
#最近运行过的容器
docker ps -l
docker stop containerName||containerID
#运行的容器必须停止下来才能启动
docker rm containerName||containerID
1.3Dockerfile
dockerfile 就是应用于基础的镜像来创造出新的镜像。满足我们对不同场景下镜像需求的不同。
1.3.1 docekr file 基本参数
-参数- | -作用- |
---|---|
FROM image_name:tag | 定义了使用哪个基础镜像启动构建流程 |
MAINTAINER user_name | 声明镜像的创建者 |
ENV key value | 设置环境变量 (可以写多条) |
RUN command | 是Dockerfile的核心部分(可以写多条) |
ADD source_dir/file dest_dir/file | 将宿主机的文件复制到容器内,如果是一个压缩文件,将会在复制后自动解压 |
COPY source_dir/file dest_dir/file | 和ADD相似,但是如果有压缩文件并不能解压 |
WORKDIR path_dir | 设置工作目录 |
EXPOSE port1 prot2 | 用来指定端口,使容器内的应用可以通过端口和外界交互 |
CMD argument | 在构建容器时使用,会被docker run 后的argument覆盖 |
-- | -- |
---|---|
ENTRYPOINT argument | 和CMD相似,但是并不会被docker run指定的参数覆盖 |
VOLUME | 将本地文件夹或者其他容器的文件挂载到容器中 |
1.3.2搭建image镜像
需求:自己博客上的图片本地放在网上就找不到了,利用自己的一个服务器搭建一个简易的图片服务器,来实现自己的需求
需要修改nginx容器的default.conf文件,如果进入容器比较麻烦,所以选择创建一个新的镜像并通过本地的文件将其覆盖。
-
拉取nginx
-
创建default.conf文件
制作图片镜像 创建default.conf文件覆盖容器中的default.conf文件
server { listen 80; server_name localhost; #(5) #charset koi8-r; #access_log /var/log/nginx/host.access.log main; #location / { # root /usr/share/nginx/html; # index index.html index.htm; #} #(1) location / { root /home/yzhang/images; index index.html index.htm; } #error_page 404 /404.html; # redirect server error pages to the static page /50x.html # error_page 500 502 503 504 /50x.html; location = /50x.html { root /usr/share/nginx/html; } }
-
编写dockerfile
FROM nginx:latest MAINTAINER zy COPY default.conf /etc/nginx/conf.d/default.conf EXPOSE 80
-
制作镜像:
#-f 后边指向dockerfile 文件路径 -t 镜像的名称版本。 需要注意 后边的 空格. 不能省略
docker build -f dockerfile -t image:v1 .
#启动容器
docker -di --name image -p 80:80 -v /home/:/home/ image:v1
直接访问图片即可。
1.3.3 创建hello镜像
需求:为本地的一个简单的hello项目(springboot),hello.jar 创建镜像。
-
创建一个基于cenos系统的jdk镜像 jdk1.8
1.编写dockerfile
#依赖镜像名称和ID 创建一个jdk的容器依赖的操作系统是centos
FROM centos:latest
#指定镜像创建者信息
MAINTAINER Hulk
#切换工作目录
WORKDIR /javaee
ADD jdk-8u65-linux-x64.tar.gz /javaee
#ADD 是相对路径jar,把java添加到容器中
#配置java环境变量
ENV JAVA_HOME /usr/local/java/jdk1.8.0_65
ENV PATH $JAVA_HOME/bin:$PATH
2.制作镜像
构建镜像 -t -tag 指定镜像的名称版本
docker build ‐t='jdk1.8' .
#命令变形
docker build -t jdk1.8 .
#命令变形
docker build -t jdk1.8:v1 .
#指定dockerfile
docker build -f java/dockerfile -t eureka:v1 .
- 基于jdk1.8镜像创建 hello镜像。
ADD source_dir/file dest_dir/file. 将宿主机的文件复制到容器内,如果是一个压缩文件,将会在复制后自动解压
#注意空格及一些特殊符号‘-’编码问题,有严格要求,否则无法构建镜像
FROM jdk1.8
VOLUME /tmp
ADD supergo-eureka-1.0-SNAPSHOT.jar /usr/local/
ENTRYPOINT ["java","‐jar","/usr/local/supergo-eureka-1.0-SNAPSHOT.jar"]
2.制作镜像
docker build -t hello .
3.启动容器
访问即可。
1.3.4 搭建私有仓库
registry|harbor 都可以,这里使用的是registry
- 使用docker搭建:
#拉取registry镜像
docker pull registry
#创建registry容器
docker run ‐di ‐‐name=registry ‐p 5000:5000 registry
-
打开docker对私服的信任
-
mac
- 图形化界面添加
-
linux
-
修改 /lib/systemd/system/docker.service 文件
/usr/bin/dockerd -H unix:///var/run/docker.sock -H tcp://0.0.0.0:2375 --insecure-registry 192.168.66.66:5000
-
echo '{ "insecure-registries":["134.175.101.117:5000"] }' >etc/docker/daemon.json systemctl restart docker
-
-
上传镜像
#标记镜像 docker tag jdk1.8 registryhost:5000/jdk1.8 #上传镜像 docker push registryhost:5000/jdk1.8 #删除镜像 docker exec registry rm -rf /var/lib/registry/docker/registry/v2/repositories/supergo-eureka #清除blob文件 docker exec registry bin/registry garbage-collect /etc/docker/registry/config.yml
访问如下链接查看仓库镜像:
http://134.175.101.117:5000/v2/_catalog
2.jenkins继承docker
目的就是为了安装jenkins,使用jenkins,并通过配置让jenkins完成docker制作镜像的功能,以达到持续集成的目的。
2.1本地环境安装maven
官网地址:maven.apache.org/download.cg…
进行下载安装
配置环境变量 追加到/etc/profile文件最后
export M2_HOME=/home/yzhang/maven/maven3.6
export M2=$M2_HOME/bin
export PATH=$M2:$PATH
重载etc/profile文件
. /etc/profile
#或者
source /etc/profile
测试安装是否成功
mvn -version
2.2 docker 安装jenkins
#1.查找镜像
docker search jenkins
#2.安装 官方推荐blueocean
docker pull jenkinsci/blueocean
#3.docker 启动jenkins 需要配置maven jenkins 底层整合了maven
docker run \
-u root \
--rm \
-d \
-p 8080:8080 \
-p 50000:50000 \
-v jenkins-data:/var/jenkins_home \
-v /var/run/docker.sock:/var/run/docker.sock \
-v /usr/local/maven/3.6.0:/usr/local/maven \
jenkinsci/blueocean
2.3jenkins的基本使用和配置
1.打开docker2376端口
mac:
docker run -d -v /var/run/docker.sock:/var/run/docker.sock -p 2376:2375 bobrik/socat TCP4-LISTEN:2375,fork,reuseaddr UNIX-CONNECT:/var/run/docker.sock
linux 可以直接在文件中添加
2操作jekins
1.解锁,需要注意要进入docker容器内去获取管理员密码
2.安装插件
3.创建管理员用户
4.配置实例
5.jenkins配置
- 配置maven
7.安装如下插件
8.构建一个maven项目
配置build信息
clean package docker:bulid -DpushImage
9.代码添加自动部署插件
自动部署:
<build>
<finalName>eureka</finalName>
<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>
<imageName>134.175.101.117:5000/${project.artifactId}:${project.version}</imageName>
<baseImage>java</baseImage>
<entryPoint>["java", "‐jar","/${project.build.finalName}.jar"]</entryPoint>
<resources>
<resource>
<targetPath>/</targetPath>
<directory>${project.build.directory}
</directory>
<include>${project.build.finalName}.jar</include>
</resource>
</resources>
<dockerHost>http://134.175.101.117:2375</dockerHost>
</configuration>
</plugin>
</plugins>
</build>
jenkins最终会帮助我们构建项目,创建镜像,并且将镜像push到自己的私有仓库。