• Docker、Linux、Jenkins


    Docker

    什么是Docker?

    Docker本质上是一个采用虚拟化技术的容器,基于Linux容器进行再封装,使用户不用关心容器的管理,而简化应用操作。从2013开始有这个项目到现在也不过5年时间,但是发展应用却极其迅速,主要原因就是应用简单方便,传统的虚拟化是基于硬件实现的,如果要部署10个应用,则需要创建10个虚拟机,而Docker是基于操作系统做的虚拟化,也就是复用本地主机的操作系统,部署运营10个应用时只需要起10个隔离的应用即可。

    Docker的镜像、仓库、容器的概念

    镜像:Docker运行容器前需要本地存在对应的镜像,一个镜像可以创建多个容器。一个镜像可以包含一个完整的操作系统环境和用户需要的其它应用程序。

    仓库:仓库是存放所有的镜像文件的场所。个人理解就如同maven的中央仓库,Docaker公司提供了官方仓库叫DockerHub,存放了数量庞大的镜像供用户下载,repository本身就是一个开源的项目,任何人都可以自己下载后部署一个自己的仓库。

    容器:容器好比软件集装箱,它内部可以安装任何软件和库文件,做任意的运行环境配置。开发和运维人员,在转移和部署应用的时候,不用关心容器内部有什么软件,也无需知道他们是如何配置的。而管理容器Docker引擎同样不关心容器的内容,只要像码头工人一样让这个容器运行起来就行。容器是通过镜像创建的实例。它可以被启动、开始、停止、删除。每个容器都是 相互隔离的、保证安全的平台,如果说容器是动态的,那么镜像就是静态的,我们可以理解镜像和容器的关系就如同java中class类和实例对象的关系。

    如何在Docker上安装Redis?

    #拉取redis镜像,不指定版本则拉取最新版
    docker pull redis
    
    #docker启动redis容器命令(指定容器卷、配置文件、--appendonly yes  开启redis 持久化)
    docker run -p 6379:6379 --name myredis -v /usr/local/docker/redis.conf:/etc/redis/redis.conf -v /usr/local/docker/data:/data -d redis redis-server /etc/redis/redis.conf --appendonly yes  
    
    • 1
    • 2
    • 3
    • 4
    • 5

    Docker镜像如何加速?

    三种办法(一般使用第三种)

    1. 在拉取镜像时候指定镜像源地址
      您可以使用以下命令直接从该镜像加速地址进行拉取 $ docker pull registry.docker-cn.com/myname/myrepo:mytag 例如: $ docker pull registry.docker-cn.com/library/ubuntu:16.04

    使用 –registry-mirror 配置 Docker 守护进程
    2. 可以配置 Docker 守护进程默认使用 Docker 官方镜像加速。这样可以默认通过官方镜像加速拉取镜像,而无需在每次拉取时指定 registry.docker-cn.com。
    可以在 Docker 守护进程启动时传入 --registry-mirror 参数:
    $ docker --registry-mirror=https://registry.docker-cn.com daemon

    1. 为了永久性保留更改,您可以修改 /etc/docker/daemon.json 文件并添加上 registry-mirrors 键值。值如下:
       
      {
      “registry-mirrors”: [“http://hub-mirror.c.163.com”]
      }
      #可以换成阿里云、网易等。
      替换完之后需要重新启动docker
      systemctl restart docker

    如何将自己的微服务项目部署到Docker中?

    第一种方法:将Java项目打包成可部署的jar包或者war包,编写dockerfile将项目包构建成镜像,然后利用这个镜像启动容器,项目就部署成功了。
    难点:编写dockerfile。下面是一个简单的dockerfile文件
    From java:8
    ADD microservice-eureka-server-0.0.1-SNAPSHOT.jar /app.jar
    EXPOSE 8761 # 微服务项目的启动端口
    ENTRYPOINT [“java”,“-jar”,“/app.jar”]

    第二种方法:利用jenkins工具从git上拉去代码打包成镜像。

    Docker的常用命令有哪些?

    1、docker pull java:8 拉取镜像
    2、docker images 展示所有镜像
    3、docker rmi java 移除镜像
    4、docker run -d -p 91:80 nginx 启动并生成容器
    5、docker ps 列出正在运行的容器
    6、docker stop f0b1c8ab3633 停止容器
    7、docker kill f0b1c8ab3633 强制停止容器
    8、docker start f0b1c8ab3633 启动容器
    9、docker inspect f0b1c8ab3633 查看容器所有信息
    10、docker logs f0b1c8ab3633 查看容器日志
    11、docker top f0b1c8ab3633 查看容器里面的进程
    12、docker exec -it f0b1c8ab3633 /bin/bash 进入容器
    13、docker rm f0b1c8ab3633 删除容器
    14、docker build -t nginx:qingfeng . 构建镜像 (其中,-t指定镜像名字,命令最后的点(.)表示Dockerfile文件所在路径)

    Docker中安装的软件如何修改配置呢?

    两种方式
    1、容器挂载外部配置文件 –v,使用挂载方式,外部的配置文件覆盖内部容器配置文件。
    2、也可以进入到容器中直接修改。

    使用docker安装mysql、nginx

    安装方式和上述安装redis方式基本相同,首先拉取镜像文件,然后用run命令启动生成容器。启动命令中加上各种参数来进行各种配置。

    Linux

    Linux常用命令?

    系统信息
    arch 显示机器的处理器架构
    uname -m 显示机器的处理器架构
    uname -r 显示正在使用的内核版本
    dmidecode -q 显示硬件系统部件 - (SMBIOS / DMI)
    hdparm -i /dev/hda 罗列一个磁盘的架构特性
    hdparm -tT /dev/sda 在磁盘上执行测试性读取操作
    cat /proc/cpuinfo 显示CPU info的信息
    cat /proc/interrupts 显示中断
    cat /proc/meminfo 校验内存使用
    cat /proc/swaps 显示哪些swap被使用
    cat /proc/version 显示内核的版本
    cat /proc/net/dev 显示网络适配器及统计
    cat /proc/mounts 显示已加载的文件系统
    lspci -tv 罗列 PCI 设备
    lsusb -tv 显示 USB 设备
    date 显示系统日期
    cal 2007 显示2007年的日历表
    date 041217002007.00 设置日期和时间 - 月日时分年.秒
    clock -w 将时间修改保存到 BIOS
    关机 (系统的关机、重启以及登出 )
    shutdown -h now 关闭系统
    init 0 关闭系统
    telinit 0 关闭系统
    shutdown -h hours:minutes & 按预定时间关闭系统
    shutdown -c 取消按预定时间关闭系统
    shutdown -r now 重启
    reboot 重启
    logout 注销
    文件和目录
    cd /home 进入 ‘/ home’ 目录’
    cd … 返回上一级目录
    cd …/… 返回上两级目录
    cd 进入个人的主目录
    cd ~user1 进入个人的主目录
    cd - 返回上次所在的目录
    pwd 显示工作路径
    ls 查看目录中的文件
    ls -F 查看目录中的文件
    ls -l 显示文件和目录的详细资料
    ls -a 显示隐藏文件
    ls [0-9] 显示包含数字的文件名和目录名
    tree 显示文件和目录由根目录开始的树形结构
    lstree 显示文件和目录由根目录开始的树形结构
    mkdir dir1 创建一个叫做 ‘dir1’ 的目录’
    mkdir dir1 dir2 同时创建两个目录
    mkdir -p /tmp/dir1/dir2 创建一个目录树
    rm -f file1 删除一个叫做 ‘file1’ 的文件’
    rmdir dir1 删除一个叫做 ‘dir1’ 的目录’
    rm -rf dir1 删除一个叫做 ‘dir1’ 的目录并同时删除其内容
    rm -rf dir1 dir2 同时删除两个目录及它们的内容
    mv dir1 new_dir 重命名/移动 一个目录
    cp file1 file2 复制一个文件
    cp dir/* . 复制一个目录下的所有文件到当前工作目录
    cp -a /tmp/dir1 . 复制一个目录到当前工作目录
    cp -a dir1 dir2 复制一个目录
    cp -r dir1 dir2 复制一个目录及子目录
    ln -s file1 lnk1 创建一个指向文件或目录的软链接
    ln file1 lnk1 创建一个指向文件或目录的物理链接
    touch -t 0712250000 file1 修改一个文件或目录的时间戳 - (YYMMDDhhmm)
    file file1 outputs the mime type of the file as text
    iconv -l 列出已知的编码

    文件搜索
    find / -name file1 从 ‘/’ 开始进入根文件系统搜索文件和目录
    find / -user user1 搜索属于用户 ‘user1’ 的文件和目录
    find /home/user1 -name *.bin 在目录 ‘/ home/user1’ 中搜索带有’.bin’ 结尾的文件
    find /usr/bin -type f -atime +100 搜索在过去100天内未被使用过的执行文件
    find /usr/bin -type f -mtime -10 搜索在10天内被创建或者修改过的文件
    find / -name *.rpm -exec chmod 755 ‘{}’ ; 搜索以 ‘.rpm’ 结尾的文件并定义其权限
    find / -xdev -name *.rpm 搜索以 ‘.rpm’ 结尾的文件,忽略光驱、捷盘等可移动设备
    locate *.ps 寻找以 ‘.ps’ 结尾的文件 - 先运行 ‘updatedb’ 命令
    whereis halt 显示一个二进制文件、源码或man的位置
    which halt 显示一个二进制文件或可执行文件的完整路径

    挂载一个文件系统
    mount /dev/hda2 /mnt/hda2 挂载一个叫做hda2的盘 - 确定目录 ‘/ mnt/hda2’ 已经存在
    umount /dev/hda2 卸载一个叫做hda2的盘 - 先从挂载点 ‘/ mnt/hda2’ 退出
    fuser -km /mnt/hda2 当设备繁忙时强制卸载
    umount -n /mnt/hda2 运行卸载操作而不写入 /etc/mtab 文件- 当文件为只读或当磁盘写满时非常有用
    mount /dev/fd0 /mnt/floppy 挂载一个软盘
    mount /dev/cdrom /mnt/cdrom 挂载一个cdrom或dvdrom
    mount /dev/hdc /mnt/cdrecorder 挂载一个cdrw或dvdrom
    mount /dev/hdb /mnt/cdrecorder 挂载一个cdrw或dvdrom
    mount -o loop file.iso /mnt/cdrom 挂载一个文件或ISO镜像文件
    mount -t vfat /dev/hda5 /mnt/hda5 挂载一个Windows FAT32文件系统
    mount /dev/sda1 /mnt/usbdisk 挂载一个usb 捷盘或闪存设备
    mount -t smbfs -o username=user,password=pass //WinClient/share /mnt/share 挂载一个windows网络共享

    磁盘空间
    df -h 显示已经挂载的分区列表
    ls -lSr |more 以尺寸大小排列文件和目录
    du -sh dir1 估算目录 ‘dir1’ 已经使用的磁盘空间’
    du -sk * | sort -rn 以容量大小为依据依次显示文件和目录的大小
    rpm -q -a --qf ‘%10{SIZE}t%{NAME}n’ | sort -k1,1n 以大小为依据依次显示已安装的rpm包所使用的空间 (fedora, redhat类系统)
    dpkg-query -W -f=‘ I n s t a l l e d − S i z e ; 10 t {Installed-Size;10}t InstalledSize;10t{Package}n’ | sort -k1,1n 以大小为依据显示已安装的deb包所使用的空间 (ubuntu, debian类系统)

    用户和群组
    groupadd group_name 创建一个新用户组
    groupdel group_name 删除一个用户组
    groupmod -n new_group_name old_group_name 重命名一个用户组
    useradd -c "Name Surname " -g admin -d /home/user1 -s /bin/bash user1 创建一个属于 “admin” 用户组的用户
    useradd user1 创建一个新用户
    userdel -r user1 删除一个用户 ( ‘-r’ 排除主目录)
    usermod -c “User FTP” -g system -d /ftp/user1 -s /bin/nologin user1 修改用户属性
    passwd 修改口令
    passwd user1 修改一个用户的口令 (只允许root执行)
    chage -E 2005-12-31 user1 设置用户口令的失效期限
    pwck 检查 ‘/etc/passwd’ 的文件格式和语法修正以及存在的用户
    grpck 检查 ‘/etc/passwd’ 的文件格式和语法修正以及存在的群组
    newgrp group_name 登陆进一个新的群组以改变新创建文件的预设群组

    文件的权限 - 使用 “+” 设置权限,使用 “-” 用于取消
    ls -lh 显示权限
    ls /tmp | pr -T5 -W$COLUMNS 将终端划分成5栏显示
    chmod ugo+rwx directory1 设置目录的所有人(u)、群组(g)以及其他人(o)以读(r )、写(w)和执行(x)的权限
    chmod go-rwx directory1 删除群组(g)与其他人(o)对目录的读写执行权限
    chown user1 file1 改变一个文件的所有人属性
    chown -R user1 directory1 改变一个目录的所有人属性并同时改变改目录下所有文件的属性
    chgrp group1 file1 改变文件的群组
    chown user1:group1 file1 改变一个文件的所有人和群组属性
    find / -perm -u+s 罗列一个系统中所有使用了SUID控制的文件
    chmod u+s /bin/file1 设置一个二进制文件的 SUID 位 - 运行该文件的用户也被赋予和所有者同样的权限
    chmod u-s /bin/file1 禁用一个二进制文件的 SUID位
    chmod g+s /home/public 设置一个目录的SGID 位 - 类似SUID ,不过这是针对目录的
    chmod g-s /home/public 禁用一个目录的 SGID 位
    chmod o+t /home/public 设置一个文件的 STIKY 位 - 只允许合法所有人删除文件
    chmod o-t /home/public 禁用一个目录的 STIKY 位

    文件的特殊属性 - 使用 “+” 设置权限,使用 “-” 用于取消
    chattr +a file1 只允许以追加方式读写文件
    chattr +c file1 允许这个文件能被内核自动压缩/解压
    chattr +d file1 在进行文件系统备份时,dump程序将忽略这个文件
    chattr +i file1 设置成不可变的文件,不能被删除、修改、重命名或者链接
    chattr +s file1 允许一个文件被安全地删除
    chattr +S file1 一旦应用程序对这个文件执行了写操作,使系统立刻把修改的结果写到磁盘
    chattr +u file1 若文件被删除,系统会允许你在以后恢复这个被删除的文件
    lsattr 显示特殊的属性

    打包和压缩文件
    bunzip2 file1.bz2 解压一个叫做 'file1.bz2’的文件
    bzip2 file1 压缩一个叫做 ‘file1’ 的文件
    gunzip file1.gz 解压一个叫做 'file1.gz’的文件
    gzip file1 压缩一个叫做 'file1’的文件
    gzip -9 file1 最大程度压缩
    rar a file1.rar test_file 创建一个叫做 ‘file1.rar’ 的包
    rar a file1.rar file1 file2 dir1 同时压缩 ‘file1’, ‘file2’ 以及目录 ‘dir1’
    rar x file1.rar 解压rar包
    unrar x file1.rar 解压rar包
    tar -cvf archive.tar file1 创建一个非压缩的 tarball
    tar -cvf archive.tar file1 file2 dir1 创建一个包含了 ‘file1’, ‘file2’ 以及 'dir1’的档案文件
    tar -tf archive.tar 显示一个包中的内容
    tar -xvf archive.tar 释放一个包
    tar -xvf archive.tar -C /tmp 将压缩包释放到 /tmp目录下
    tar -cvfj archive.tar.bz2 dir1 创建一个bzip2格式的压缩包
    tar -jxvf archive.tar.bz2 解压一个bzip2格式的压缩包
    tar -cvfz archive.tar.gz dir1 创建一个gzip格式的压缩包
    tar -zxvf archive.tar.gz 解压一个gzip格式的压缩包
    zip file1.zip file1 创建一个zip格式的压缩包
    zip -r file1.zip file1 file2 dir1 将几个文件和目录同时压缩成一个zip格式的压缩包
    unzip file1.zip 解压一个zip格式压缩包

    查看文件内容(查看日志)
    cat file1 从第一个字节开始正向查看文件的内容
    tac file1 从最后一行开始反向查看一个文件的内容
    more file1 查看一个长文件的内容
    less file1 类似于 ‘more’ 命令,但是它允许在文件中和正向操作一样的反向操作
    head -2 file1 查看一个文件的前两行
    tail -2 file1 查看一个文件的最后两行
    tail -f /var/log/messages 实时查看被添加到一个文件中的内容

    Jenkins

    Jenkins是什么?

    Jenkins是一个开源的、可扩展的持续集成、交付、部署(软件/代码的编译、打包、部署)的基于web界面的平台。允许持续集成和持续交付项目,无论用的是什么平台,可以处理任何类型的构建或持续集成。

    为什么使用jenkins?

    Jenkins是一种使用Java编程语言编写的开源持续集成软件工具,用于实时测试和报告较大代码库中的孤立更改。 Jenkins软件使开发人员能够快速找到并解决代码库中的缺陷,并自动进行构建测试。

    CI/CD是什么?

    CI(Continuous integration,中文意思是持续集成)是一种软件开发时间。持续集成强调开发人员提交了新代码之后,立刻进行构建、(单元)测试。根据测试结果,我们可以确定新代码和原有代码能否正确地集成在一起。

    CD(Continuous Delivery, 中文意思持续交付)是在持续集成的基础上,将集成后的代码部署到更贴近真实运行环境(类生产环境)中。比如,我们完成单元测试后,可以把代码部署到连接数据库的Staging环境中更多的测试。如果代码没有问题,可以继续手动部署到生产环境。

    集中常见的CI工具?

    以下是前8种持续集成工具的列表:
    Jenkins
    TeamCity
    Travis
    CIGo
    CDBamboo
    GitLabCI
    CircleCI
    Codeship

    什么是Jenkins pipeline?

    答:Pipeline,简而言之,就是一台运行于Jenkins上的工作流框架,将原本独立运行于单个或者多个节点的任务连接起来,实现单个任务难以完成的复杂流程编排与可视化。

    Jenkins Pipeline是一组插件,让Jenkins可以实现持续交付管道的落地和实施。

    为什么在jenkins中使用管道?

    Pipeline在Jenkins上添加了一套强大的自动化工具,支持从简单的持续集成到全面的持续交付管道的用例。 通过对一系列相关任务进行建模,用户可以利用Pipeline的许多功能: 代码:流水线是用代码实现的,通常会检查到源代码管理中,从而使团队能够编辑,查看和迭代其交付流水线。耐用:管道可以在Jenkins主服务器的计划内和计划外重启中生存。可暂停:管道可以选择停止并等待人工输入或批准,然后再继续管道运行。多功能:管道支持复杂的现实世界中的连续交付需求,包括加入,循环和并行执行工作的能力。

    什么是jenkinsfile?为什么使用jenkinsfile?

    Jenkinsfile是一个文本文件,其中包含Jenkins Pipeline的定义,并已签入源代码管理。
    虽然用于定义管道的脚本语法和jenkinsfile类似,但通常认为在项目中定义管道Jenkinsfile并检查源代码管理是最佳实践。

    为所有分支和请求自动创建一个管道构建过程。
    管道上的代码审查/迭代。
    审核追踪管道

    什么是Blue Ocean?

    Blue Ocean是pipeline的可视化UI。同时他兼容经典的自由模式的job。Jenkins Pipeline从头开始设计,但仍与自由式作业兼容,Blue Ocean减少了经典模式下的混乱并为团队中的每个成员增加了清晰度。Blue Ocean的主要特点包括:

    连续交付(CD)管道的复杂可视化,可以让您快速直观地理解管道状态。
    管道编辑器 - 通过引导用户通过直观和可视化的过程来创建管道,从而使管道的创建变得平易近人。
    个性化以适应团队中每个成员的基于角色的需求。
    在需要干预和/或出现问题时确定精确度。Blue Ocean显示的标注了关键步骤,促进异常处理和提高生产力。

    如何在jenkins中备份和复制文件?

    创建备份,需要做的就是定期备份JENKINS_HOME目录。 这包含所有构建作业配置,从属节点配置以及构建历史记录。 要创建Jenkins设置的备份,只需复制此目录。

    jenkins的优势是什么?

    Jenkins的优势包括:
    1、在开发环境的早期阶段, 错误跟踪很容易。
    2、提供大量的插件支持。
    3、对代码的迭代改进。
    4、构建失败会在集成阶段进行缓存。
    5、对于每个代码提交更改, 都会生成一个自动生成报告通知。
    6、为了将构建报告的成功或失败通知开发人员, 它与LDAP邮件服务器集成在一起。
    7、实现持续集成的敏捷开发和测试驱动的开发。
    8、通过简单的步骤, 即可自动完成maven发布项目。

    Jenkins主要整合了两个组成部分?

    Jenkins与以下两个组件集成在一起:
    GIT, SVN等版本控制系统
    并构建诸如Apache Maven之类的工具。

    Jenkins中一些由用的插件?

    1、Maven 2 project
    2、Amazon EC2
    3、HTML publisher
    4、Copy artifact
    5、Join
    6、Green Balls

  • 相关阅读:
    Chrome速度惊人,不到30天修复40个漏洞
    【计算机网络】HTTPS的基础知识
    面试机器学习你一定会遇到的知识点汇总
    在Photoshop上标小图标的操作记录
    【云原生】这么火,你不来了解下?
    EMQX 入门教程②——文件目录 | 日志文件和配置文件
    MySQL事务详解
    FFmpeg开发笔记(二十)Linux环境给FFmpeg集成AVS3解码器
    2022年全球市场液相导热油总体规模、主要生产商、主要地区、产品和应用细分研究报告
    算法竞赛入门【码蹄集进阶塔335题】(MT2291-2295)
  • 原文地址:https://blog.csdn.net/weixin_44044929/article/details/126253398