Docker and Jenkins

683 阅读6分钟

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到自己的私有仓库。