• Docker基本使用与项目部署


    1.概述

    1.1介绍

    Docker 是一个开源的应用容器引擎, 可以让开发者打包他们的应用以及依赖包到一个轻量级、可移植的容器中,然后发布到任何流行的 Linux 机器上,也可以实现虚拟化。也就是说会将所有需要的内容放到不同的集装箱中,谁需要这些环境就直接拿这个集装箱。具有隔离性,即在运行集装箱内的内容时,会在Linux的内核中, 单独的开辟一片空间, 这片空间不会影响到其他程序。

    容器是完全使用沙箱机制,

    1.2相关术语

    注册中心:超级码头, 上面放的就是集装箱
    镜像:相当于集装箱
    容器:运行起来的镜像

    2.下载与安装

    2.1docker安装

    1)下载关于docker的依赖环境

    yum -y install yum-utils device-mapper-persistent-data lvm2

    2)设置下载docker的镜像

    yum-config-manager  --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo

    3)安装docker

    yum makecache fast
    yum -y install docker-ce

    4)启动

    systemctl start docker

    5)测试

    docker run hello-world

    6)设置开机启动

    systemctl enable docker

    7)安装完成,测试结果,看到下图说明安装成功

    8)查看版本

    docker -v

    9)停止、重启

    systemctl stop docker
    systemctl restart docker

    10)查看docker的状态

    systemctl status docker

    2.2中央仓库

    国外的仓库访问很慢,我们使用国内的仓库http://hub.daocloud.io/

    打开网址,搜索需要的容器,如tomcat

     点击搜索的内容

     选择版本后点击拉取

     复制拉取命令,后面可以直接使用

    3.镜像的操作

    Docker镜像是由文件系统叠加而成,可以认为镜像就是对某些运行环境或者软件打的包,用户可以从docker仓库中下载基础镜像到本地,保证开发人员的环境和测试人员的环境完全一致。

    镜像id(镜像标识)也叫IMAGE ID,如果镜像id中前面一部分是唯一的,则可以使用其直接代替整个id。后面的容器id也是类似。实例如下:

    可以看到只有两个镜像,对于tomcat镜像,就可以直接使用b8来代替b8dfe9ade316 ,显得非常简单。

    3.1基本操作命令

    1)拉取镜像到本地

    命令语法:

    docker pull tag
    

    实例:拉取tomcat镜像到本地

    docker pull daocloud.io/library/tomcat:8.5.15-jre8

    2)查看本地全部的镜像

    ducker images

    3)删除本地镜像

    命令语法:

    docker rmi 镜像标识

    实例:

    docker rmi b8

    4)镜像的导出

    命令语法:

    docker save -o 导出的路径 镜像id

    实例:

    docker save -o ./tomcat8.5.image b8

    5)加载导出的镜像

    命令语法:

    docker load -i 镜像路径

    实例:

    docker load -i tomcat8.5.image

    6)修改镜像的名称和tag

    命令语法:

    docker tag 镜像id 容器名称:版本

    实例:

    docker tag b8 tomcat:8.5

    8)运行容器

    命令简单语法:

    docker run -d -p 宿主服务端口:容器端口 --name 容器名称 镜像标识或名称

    参数分析:

    -d:服务后台运行
    
    -p 宿主服务端口:容器端口:指定映射端口。即linux对外暴露的端口:执行的容器的端口
    
    --name 容器名称:指定容器的名称

    实例1:

    docker run -d -p 9001:8080 --name tomcat b8

    实例2:

    docker run -d -p 9001:8080 --name tomcat daocloud.io/library/tomcat:8.5.15-jre8

    两个实例,运行一个即可。启动后,在浏览器通过ip:9001来访问tomcat。这里tomcat的默认端口是8080,在指定容器的端口时也必须是8080,否则外部无法访问。tomcat是指定容器启动后的名字,是自定义是,不能重复。

    实例3:

    docker run tomcat

    上面的两个实例是在初始化容器,指定了一些参数,而实例3是直接启动,已经启动过并停止的容器,可以使用这种方式。而且上面两个实例都是在后台运行的,还有一种方式不在后台运行

    docker run --rm -p 80:80 nginx:2.0

    运行容器,关闭运行后会自动删除此容器。

    9)查看正在运行的容器

    docker ps

    可以看到下图的信息,也标注了哪个是容器id

     

    查看所有的容器

    docker ps -a

    10)停止容器的运行

    命令语法:

    docker stop 容器id

    11)重启容器

    命令语法:

    docker start 容器id

    12)查看容器的执行日志

    命令语法:

    docker logs -f 容器id

    13)进入容器内部

    命令语法:

    docker exec -it 容器id bash

    14)删除容器

    命令语法:

    docker rm 容器id
    

    需要注意的是,删除之前,必须先停止容器的执行。删除之后,再次执行运行容器的命令来启动容器。

    15)查看版本信息

    docker version

    16)查看docker的详细信息

    docker info

    3.2安装其他的镜像

    以下直接使用一行命令拉取并启动容器。

    3.2.1把项目部署到tomcat

    1)先把项目打成war上传到linux中

    2)启动tomcat容器(如果已经启动则不操作)

    3)把宿主机的文件复制到容器中

    命令语法:

    docker cp 文件名称 容器id:存到容器的内部路径
    

    实例:

    docker cp test.war 222a:/usr/local/tomact/webapps

    3.2.2安装mysql

    mysql容器启动时需要添加额外的参数,来指明mysql服务的登录名和密码。

    docker run -d -p 3306:3306 --name mysql -e MYSQL_ROOT_PASSWORD=123456 daocloud.io/library/mysql:5.7.6

    安装之后就可以使用连接工具进行连接测试。

    3.3 dcoker run参数详解

    在启动镜像时,带了很多的参数,下面对常用的进行说明 :

    参数名称 说明 样例
    -d 后台启动此容器  
    -p 端口映射,宿主服务端口:容器端口 8080:8080
    --name 指定启动的容器的名称,自定义 tomcat
    -e  设置环境变量  MYSQL_ROOT_PASSWORD=123456
    -v 目录映射,宿主服务目录:容器目录 /opt/tomcat/webapps:/usr/local/tomcat/webapps

    4.数据卷

    4.1介绍

    数据卷就是把宿主机的目录与容器的某一个目录进行映射。容器中的文件操作起来比较麻烦,就直接操作宿主机的文件,容器可以动态的使用这些文件。

    4.2操作

    1)创建数据卷

    创建的数据卷默认存放在/var/lib/docker/volumes/目录下。

    命令语法:

    docker volume create 数据卷名称 

    实例:

    docker volume create test

    2)查看数据卷详细信息

    命令语法:

    docker volume inspect 数据卷名称
    

    实例:

    docker volume inspect test

    3)查看全部的数据卷

    docker volume ls

    4)删除数据卷

    命令语法:

    docker volume rm 数据卷名称
    

    实例:

    docker volume rm test

    5)映射数据卷

    第一种:

    命令语法:

    docker run -v 数据卷名称:容器内部映射的路径 镜像id 

    实例:

    docker run -v tomcat:/usr/local/tomcat/webapps b8

    可以看到webapps下的文件已经复制到指定的数据卷

     

    这种方式直接映射数据卷时,如果数据卷不存在,Docker 会自动创建,将容器内部自带的文件存储在默认的存放路径中。

    第二种:

    命令语法:

    docker run -v 路径:容器内部映射的路径 镜像id 

    实例: 

    docker run -v /usr/bk:/usr/local/tomcat/webapps b8

    映射后里面是空的

    在映射时直接指定一个路径作为数据卷的存放位置,映射后这个文件夹是空的。

    5.Docker-Compose

    5.1介绍

    解决运行镜像输入大量参数的问题,批量管理容器。只需要配置docker-compose.yml即可。

    5.2下载与安装

    1)下载

    下载地址:https://github.com/docker/compose/releases/tag/1.24.1,也可以使用其他的版本。

    2)把下载的文件复制到linux的/usr/local/bin目录下

    3)修改其名称并给与操作权限

    mv docker-compose-Linux-x86_64 docker-compose
    chmod 777 docker-compose

    4)添加环境变量,可全局使用

    vi /etc/profile
    #在尾部追加
    export PATH=$PATH:/usr/local/bin
    #刷新 source
    /etc/profile

    5)测试

    在任意目录下输入

    docker-compose

    看到下图说明安装成功。

    5.3基本配置

    只需要在其目录下创建一个docker-compose.yml文件,然后输入相关配置即可。

    一般会把映射的文件放在/opt目录下,因此先在/opt目录下新建一个文件夹,存放配置文件和其他文件

    cd /opt
    mkdir docker_mysql_tomcat
    cd docker_mysql_tomcat
    touch docker-compose.yml

    docker-compose.yml中mysql和tomcat的配置如下,其他容器同:

    version: '3.1'
    services:
      #服务的名字
      mysql:
        #只要docker,此容器也启动
        restart: always
        #指定镜像路径
        image: daocloud.io/library/mysql:5.7.6
        #设置容器名称
        container_name: mysql
        #设置端口号映射
        ports:
          - 3306:3306
        environment:
          #设置服务登录的密码
          MYSQL_ROOT_PASSWORD: 123456
          #设置时区
          TZ: Asia/Shanghai
    
      tomcat:
        restart: always
        image: daocloud.io/library/tomcat:8.5.15-jre8
        container_name: tomcat
        ports:
          - 9001:8080
        environment:
          TZ: Asia/Shanghai
        volumes:
          - /opt/docker_mysql_tomcat/tomcat_webapps:/usr/local/tomcat/webapps
          - /opt/docker_mysql_tomcat/tomcat_logs:/usr/local/tomcat/logs

    在上述的配置中,environment中使用的是key: value方式,其实也可以使用列表(-和=)方式,关键代码如下:

        environment:
          #设置服务登录的密码
          - MYSQL_ROOT_PASSWORD=123456
          #设置时区
          - TZ=Asia/Shanghai

    这两种方式都是可以的,可以相互替换。也就是说,对于凡是可以使用列表方式的地方,都可以使用key: value方式;对于凡是可以使用key: value方式的地方,都可以使用列表方式。可根据自己的想法选择。不过需要注意的是,使用key: value方式是,在冒号后面与value直角必须留一个空格。

    5.4操作命令

    1)启动管理的容器,需要在对应的yml目录中运行

    docker-compose up -d

    2)关闭并删除管理的容器

    docker-compose down

    3)开启(关闭stop、重启restart)已管理的容器

    docker-compose start

    4)查看由docker-compose管理的容器

    docker-compose ps

    5)查看日志

    docker-compose logs -f

    yml配置后在/opt/docker_mysql_tomcat目录执行上面的启动命令,就可以同时启动这两个容器,也是可以访问的。

    6.自定义镜像Dockerfile

    6.1介绍

    在前面介绍了中央仓库,里面的镜像其实也有docker用户自己上传的,我们也可以自定义镜像。常用的命令如下,具体使用见后面:

    命令 说明
    from 指定镜像要依赖的环境,如tomcat
    env 设置环境变量(可设置多条)
    run 要执行的命令(可设置多条)
    add 把宿主机的文件复制到容器内容,如果是压缩文件会自动解压
    copy 同add,但是压缩文件不会自动解压
    workdir 设置工作目录

    6.2使用Dockerfile自定义镜像

    1)先创建一个目录,存放Dockerfile文件

    cd /opt
    mkdir dockerfile

    2)把自己的war包放到这个目录下

    我的war可以下载后使用,链接:https://pan.baidu.com/s/1Nn17bKJeaxAspfQN_wAKig 提取码:1235

    3)创建Dockerfile文件,内容如下

    FROM daocloud.io/library/tomcat:8.5.15-jre8
    RUN rm -rf /usr/local/tomcat/webapps/*
    ADD springboot.war /usr/local/tomcat/webapps

    上面的命令分析:从仓库中使用tomcat镜像,然后删除webapps下面的文件,把war包放到webapps下。

    4)生成镜像

    docker build -t springboot:1.0 .

    springboot:1.0指定自定义镜像的名称和版本号,点表示war包和Dockerfile文件是在同一目录下。

    5)启动镜像

    docker run -d -p 8080:8080 --name springboot 33

    6)测试

    在浏览器之间访问对应的路径,这里是http://192.168.101.33:8080/springboot/api/user,可以看到返回的正常数据。

    6.3结合docker-compose自定义镜像

    1)结合上一步的操作,在/opt/dockerfile目录下新建docker-compose.yml,内容如下

    version: '3.1'
    services:
      #服务的名字
      springboot:
        #只要docker,此容器也启动
        restart: always
        #构建自定义镜像
        build:
          #设置dockerfile的路径
          context: .
          #指定dockerfile的名称
          dockerfile: Dockerfile
        #指定镜像路径,这里使用自己的镜像
        image: springboot:2.0
        #设置容器名称
        container_name: springboot
        #设置端口号映射
        ports:
          - 8080:8080
        environment:
          #设置时区
          TZ: Asia/Shanghai

    其中version是指定docker-compose的版本。

    2)使用docker-compose启动容器。如果上一步的镜像没有停止,请先停止后再启动。

    docker-compose up -d

    如果需要重新构建自定义镜像,可使用下面的命令

    docker-compose build

    7.安装Jenkins

    7.1介绍

    https://www.jenkins.io/

    7.2安装与运行

    1)在/opt目录下新建一个文件夹,映射jenkins

    mkdir docker_jenkins

    2)配置docker-compose.yml

    version: '3.1'
    services:
      jenkins:
        restart: always
        image: jenkins/jenkins
        container_name: jenkins
        ports:
          - 8888:8080
          - 5000:5000
        volumes:
          - ./data:/var/jenkins_home

    3)启动运行,等待文件下载完成,查看日志发现data文件夹没有授权

    docker-compose up -d
    docker-compose logs -f

    4)给data权限,然后再次运行后查看日志

    chmod 777 data
    docker-compose restart

    看到下图说明运行成功

    5)在浏览器访问http://192.168.1.161:8888即可看到jenkins在初始化网络,然后在登录页面输入上图中的密码

    6)点击选择插件来安装

    7)搜索安装必要的插件,这里安装git和publish

     

    选择好后点击安装,会安装插件,这个过程需要一段时间,网络良好的话两个小时左右,

     8)创建管理员账户

     9)配置实例页面不用选择,直接下一步即可

    10)进入首页,如下图

    7.3配置

    7.3.1配置docker集群

    1)安装插件

    打开系统管理->插件管理,选择可选插件后在搜索框输入docker

    选择后进行安装,安装完成后需重启jenkins,同理需要安装SSH、Locale、Version Number和Maven插件。SSH是后面连接docker要用到的,Locale是中文插件,把语言切换为中文,Version Number。安装完成后需重启jenkins。

    2)开启docker的2375端口,用于远程访问

    打开docker的配置文件,添加参数

    vi /usr/lib/systemd/system/docker.service

    参数配置如图

    可复制的参数

    -H tcp://0.0.0.0:2375 -H unix://var/run/docker.sock

    配置后保存,重启docker

    systemctl daemon-reload
    systemctl restart docker

    3)配置dcoker集群

    打开系统管理->系统配置,找到下图的地方,点击

     选择docker详情

    配置docker,点击测试,测试成功会显示版本号等信息。

    7.3.2配置全局的jdk和maven

    第一步:把jdk和maven的压缩包上传到linux,然后把文件都解压到/opt/docker_jenkins/data目录下,这个目录和/var/jenkins_home是映射关系(7.2中配置的)。

    第二步:打开系统管理->全局工具配置,分别点击jdk安装和maven安装来配置jdk和maven,配置如下图

    7.3.3添加凭据

    由于后面要用到虚拟机,就先添加一个虚拟机的凭证。方法是在系统管理中,找到下图的安全凭证,

    进去之后点击全局后面的三角,

    添加一个凭证

     保存后在系统配置中配置SSH远程主机信息,配置后点击连接进行测试。

    8.jenkins+docker实现SpringBoot项目自动化部署

    8.1项目准备

    新建一个springboot的项目,这是使用springboot-test来创建项目,但是指定的打包名是springboot(详见源码https://github.com/zhongyushi-git/springboot-test.git),写一个简单的测试接口。然后在项目的根目录下新建一个Dockerfile的文件,内容如下

    #设置tomcat镜像
    FROM daocloud.io/library/tomcat:8.5.15-jre8
    #删除webapps下面之前的war包
    RUN rm -rf /usr/local/tomcat/webapps/*.war
    #把新的war包放webapps下面
    ADD target/springboot.war /usr/local/tomcat/webapps
    #切换到指定目录,如果不需要修改端口号可不加这两行
    #WORKDIR /usr/local/tomcat/conf/
    #设置tomcat的启动端口
    #RUN sed -i 's|"8080"|"9020"|' server.xml

    说明:

    1)/usr/local/tomcat是官方给出的tomcat容器的目录,若使用不同的tomcat镜像,请参考官网。

    2)springboot.war是我定义的名称,可自定义,接着把项目推送到github上。在这个配置文件中,后两行代码是来修改tomcat的启动端口的,也就是把tomcat默认的8080端口改为9020,可根据需要进行使用。如果这里改变了端口,那么在后面的任务配置中也要做相应的修改。

    3)springboot的项目有内置的tomcat,要想在外部的tomcat中部署,需要做相应的打包准备,详见https://www.cnblogs.com/zys2019/p/11945450.html#_label13

    8.2任务配置

    1)选择新建任务,创建一个maven任务

     2)配置源码

    3)设置忽略test文件

    -U clean install -DskipTests=true

    如果pom.xml不是在项目的路径下,而是在下一层目录,则可写为下一层目录/pom.xml

    4)配置版本规则

    VERSION_NUMBER

    ${JOB_name}_${BUILD_DATE_FORMATTED,"yyyyMMdd"}

    5)在Post Steps下点击add  post-build Stepst添加构建docker镜像

    springboot:${VERSION_NUMBER}.${BUILD_NUMBER}

    如果Dockerfile文件不是在当前目录下,而在docker目录下,那么上面的位置就是./docker

     6)再添加一个SSH,用于打包后启动tomcat容器,如图

    配置命令:

    docker rm -f springboot
    docker run -d -p 8080:8080 --name springboot springboot:${VERSION_NUMBER}.${BUILD_NUMBER}

    这样设置后,进行构建,版本信息显示格式是springboot_20200727.4。如果在Dockerfile文件中修改了tomcat的端口,那么这里也要做相应的修改,把容器的端口改为对应的端口

    docker run -d -p 8080:9020 --name springboot springboot:${VERSION_NUMBER}.${BUILD_NUMBER}

    8.3构建测试

    在上面的任务中,选择左侧的立即构建

    在下面看到在构建的任务,点击进行,选择控制台输出,可以看到构建过程中的部分日志信息。构建成功后就可以直接访问项目了,虚拟机ip:8080/项目请求的路径(这里是http://192.168.159.129:8080/springboot/test)。后期使用起来就很方便了,把更新后的项目提交到github,然后进行jenkins上,点击构建即可。

    8.4加入mysql服务

    在前面的springboot项目中,并没有使用数据库,但是在实际开发中会用数据库,就简单介绍一下。在源码中,并没有看到mysql的使用,因为我只写了一个简单的模板,可以根据需要自行添加,下面的创建表和访问数据接口也需要自行添加。

    1)在docker中新建一个目录,编写docker-compose.yml文件,配置mysql服务并启动

    version: '3.1'
    services:
      #服务的名字
      mysql:
        #只要docker,此容器也启动
        restart: always
        #指定镜像路径
        image: daocloud.io/library/mysql:5.7.6
        #设置容器名称
        container_name: mysql
        #设置端口号映射
        ports:
          - 3306:3306
        environment:
          #设置服务登录的密码
          MYSQL_ROOT_PASSWORD: 123456
          #设置时区
          TZ: Asia/Shanghai

    2)导入mysql和mybatis等相关的坐标

            <!--mysql-->
            <dependency>
                <groupId>mysql</groupId>
                <artifactId>mysql-connector-java</artifactId>
                <scope>runtime</scope>
            </dependency>
            <!--数据库连接池-->
            <dependency>
                <groupId>com.alibaba</groupId>
                <artifactId>druid</artifactId>
                <version>${druid.version}</version>
            </dependency>
            <!--fastjson-->
            <dependency>
                <groupId>com.alibaba</groupId>
                <artifactId>fastjson</artifactId>
                <version>${fastjson.version}</version>
            </dependency>
            <!--mybatis-->
            <dependency>
                <groupId>org.mybatis.spring.boot</groupId>
                <artifactId>mybatis-spring-boot-starter</artifactId>
                <version>${mybatis.version}</version>
            </dependency>

    版本控制如下:

     <properties>
           <druid.version>1.1.9</druid.version>
            <fastjson.version>1.2.47</fastjson.version>
            <mybatis.version>1.3.2</mybatis.version>
     </properties>

    3)编写配置文件和接口

    spring.datasource.type=com.alibaba.druid.pool.DruidDataSource
    spring.datasource.url=jdbc:mysql://172.17.0.1:3306/db2020?serverTimezone=CTT
    spring.datasource.username=root
    spring.datasource.password=123456

    把配置文件的一部分单独拿出来,原因是ip必须是docker服务对应的ip,只有这个ip才能在本地访问容器中的mysql服务。

    4)创建数据库。连接到docker中的mysql,数据库和表请自行创建。

    5)测试。把项目提交到github上后进行构建,自定义的查询数据库的接口是正常的。

    8.5加入redis服务

    加入redis服务同mysql,在此略。

    version: '3.1'
    services:
      redis:
        restart: always
        image: redis
        container_name: redis
        ports:
          - 6379:6379
        command: redis-server --requirepass 123456
        environment:
          TZ: Asia/Shanghai
        volumes:
          - ./data:/data

    9.jenkins+docker实现Vue项目自动化部署

    9.1项目准备

    1)新建一个vue的项目,写一个简单的测试页面。然后在项目的根目录下新建一个Dockerfile的文件,内容如下

    FROM nginx
    COPY dist /usr/share/nginx/html/
    COPY nginx.conf /etc/nginx/nginx.conf

    2)在根目录下创建一个nginx.conf,内容如下

    worker_processes  1;
    events {
        worker_connections  1024;
    }
    http {
        include       mime.types;
        default_type  application/octet-stream;
        sendfile        on;
        server {
            listen       9999;
            server_name  localhost;
            location / {
                root   /usr/share/nginx/html;
                try_files $uri $uri/ /index.html;
            }
    
            error_page   500 502 503 504  /50x.html;
            location = /50x.html {
                root   html;
            }
        }
    }

    红色的内容可自行修改。项目源码:https://github.com/zhongyushi-git/vue-print.git

    9.2任务配置

    1)下载nodeJs的压缩包,然后解压到/opt/jenkins_docker/data下

    2)在jenkins中安装nodeJs插件,然后重启jenkins

    3)配置全局工具nodeJs

    4)新建一个自由风格的软件项目

    5)源码配置

    6)配置版本规则

    VERSION_NUMBER

    ${JOB_name}_${BUILD_DATE_FORMATTED,"yyyyMMdd"}

    7)配置ndoeJS

    在构建环境中设置nodeJS的路径

     8)构建打包

    配置:

    echo $PATH
    node -v
    npm -v
    npm config set registry https://registry.npm.taobao.org/
    npm install
    npm run build

    9)构建镜像

     test:${VERSION_NUMBER}.${BUILD_NUMBER}

    10)启动镜像

    docker rm -f test
    docker run -d -p 8080:9999 --name test test:${VERSION_NUMBER}.${BUILD_NUMBER}

    11)构建测试

    在上面的任务中,选择左侧的立即构建,构建成功后就可以测试,页面能正常访问。

    10.常见问题

    10.1 Bind for 0.0.0.0:80 failed: port is already allocated

    这个问题的意思就是容器占用的port还没有完全释放。

    查看进程,发现相关的容器并没有在运行,而 docker-proxy 却依然绑定着端口:

    docker ps

    查看被docker-proxy占用的端口

    ps -aux | grep -v grep | grep docker-proxy

    停止 doker 进程,删除所有容器,然后删除 local-kv.db 这个文件

    service docker stop
    docker rm $(docker ps -aq)
    rm /var/lib/docker/network/files/local-kv.db
    service docker start

    10.2 Jenkins时区设置为北京时间

    打开 【系统管理】->【脚本命令行】运行下面的命令

    System.setProperty('org.apache.commons.jelly.tags.fmt.timeZone', 'Asia/Shanghai')

    10.3如何进行jenkins容器内部

    docker exec -it jenkins bash

    如果需要进入其他容器内部,只要把jenkins换成对应的容器名称或容器id即可。

    10.4怎么把外部文件复制到容器内部?

    docker cp /opt/jenkins.sh fd:/usr/local/bin

    上面就是把/opt下面的jenkins.sh复制到jenkins容器的/usr/local/bin目录下,复制的时候,要指定容器的id。同理也可以把容器内部的文件复制到外部。容器内部一般贸易vi命令,因此会把容器内部的文件复制出来修改后再复制到内部。

    10.5若直接安装jenkins,则打包的文件在哪里?

    在用户根目录下.jenkins/workspace/projectname/target/

    就是这么简单,你学废了吗?感觉有用的话,给笔者点个赞吧 !
  • 相关阅读:
    【个人杂谈】MacBook Pro的使用心得
    【网页加速】lua redis的二次升级
    使用Openresty加快网页速度
    中间件——canal小记
    Java面试总结(二)
    RedissonLock分布式锁源码分析
    面试总结
    Spring AOP小记
    谈谈个人网站的建立(八)—— 缓存的使用
    Kafka、Logstash、Nginx日志收集入门
  • 原文地址:https://www.cnblogs.com/zys2019/p/13292619.html
Copyright © 2020-2023  润新知