如何自定义镜像到Docker仓库

一、持续集成

1.1 公司的部门

人事部:HR 招聘网站发布招聘信息、你投递简历、她就会联系你预约面试。当你面试成功、发送offer。

​ 当你进公司,给你签定劳务合同,保密合同。后期管理的你的考核。当你离职等事情

财务部:发工资、报销

行政部:采购、保修

技术部:美工、前端、移动端、后台、数据库、测试、运维、产品经理、项目经理

项目开始阶段 产品经理和项目经理提供方案,市场调研。开会商讨可行性,分工。制定周期,分工(风险控制)。

美工设计原型图。需求分析之后开始数据库设计。多方开始动工---接口文档,多方联调---交付测试。

1.2 持续集成

持续集成(Continuous Integration,CI):代码合并、构建、部署、测试都在一起,不断地执行这个过程,并对结果反馈。持续部署(Continuous Deployment,CD):部署到测试环境、预生产环境、生产环境。持续交付(Continuous Delivery,CD):将最终产品发布到生产环境,给用户使用。高效的CI/CD环境可以获得:

• 及时发现问题             • 大幅度减少故障率          • 加快迭代速度             • 减少时间成本

1.3 DEVOPS

DevOps(Development和Operations的组合词)是一组过程、方法与系统的统称,用于促进开发(应用程序/软件工程)、技术运营和质量保障(QA)部门之间的沟通、协作与整合。它是一种重视“软件开发人员(Dev)”和“IT运维技术人员(Ops)”之间沟通合作的文化、运动或惯例。透过自动化“软件交付”和“架构变更”的流程,来使得构建、测试、发布软件能够更加地快捷、频繁和可靠。它的出现是由于软件行业日益清晰地认识到:为了按时交付软件产品和服务,开发和运维工作必须紧密合作。

 

1.4 交付流程

 

1、开发人员将代码推送至git仓库。

2、通过Jenkins上事先设置好的触发器来拉取git仓库的代码。

3、代码在Jenkins上通过设置好的规则编译打包,然后build成docker镜像,推送至docker仓库。

4、Jenkins执行shell,连接到服务器上,拉取刚刚build的docker镜像并运行。

5、发布完成后,通过邮件通知测试人员。

二 docker

为了更好的理解 Docker 是什么,我们先来讲个故事:

我需要盖一个房子,于是我搬石头、砍木头、画图纸、盖房子。一顿操作,终于把这个房子盖好了。(搭项目 写代码)

结果,住了一段时间,心血来潮想搬到海边去。(写好的项目 需要部署到服务器中)

这时候按以往的办法,我只能去海边,再次搬石头、砍木头、画图纸、盖房子。(去服务器中进行 项目构建)

( 写项目的时候 是开发人员写的,写完之后将项目打包,写一个配置清单。 将其交付给运维人员。运维人员按照开发人员给的清单进行配置。但是中间必然后问题,因为我们开发是使用windows系统,服务器一般都是Linux系统,有很多软件 在windows中好使 Linux中不好使,此时有可能出现运维人员 按照你的清单搭建,就是跑步起来项目。此时运维人员会联系 开发人员: 项目部署有问题。 开发人员:在我这没问题 你再看看吧!? 运维人员此时很恼火,又搭建了一遍....有可能是好几遍,此时还是不行,运维人员此时就说了一句要程序员命的话: 是不是你的代码有问题?! )

烦恼之际,跑来一个魔法师教会我一种魔法。这种魔法可以把我盖好的房子复制一份,做成「镜像」,放在我的背包里。等我到了海边,就用这个「镜像」,复制一套房子,拎包入住。

​ A 把开发人员的电脑 当成服务器 。显然太low了

​ B 把你电脑的系统整体复制 拷贝到服务器

​ C 把你电脑的内容 关于开发的所有内容 赋值一份,整体拷贝。

是不是很神奇?对应到我们的项目中来,房子就是项目本身,镜像就是项目的复制,背包就是镜像仓库。

如果要动态扩容,从仓库中取出项目镜像,随便复制就可以了。Build once,Run anywhere!

不用再关注版本、兼容、部署等问题,彻底解决了「上线即崩,无休止构建」的尴尬。

2.1 虚拟机和容器

①虚拟机:虚拟化硬件

虚拟机 Virtual Machine 指通过软件模拟的具有完整硬件系统功能的、运行在一个完全隔离环境中的完整计算机系统。在实体计算机中能够完成的工作在虚拟机中都能够实现。

在计算机中创建虚拟机时,需要将实体机的部分硬盘和内存容量作为虚拟机的硬盘和内存容量。

每个虚拟机都有独立的 CMOS、硬盘和操作系统,可以像使用实体机一样对虚拟机进行操作。在容器技术之前,业界的网红是虚拟机。

虚拟机技术的代表,是 VMWare 和 OpenStack。

②容器:将操作系统层虚拟化,是一个标准的软件单元

其特点如下:

随处运行:容器可以将代码与配置文件和相关依赖库进行打包,从而确保在任何环境下的运行都是一致的。

高资源利用率:容器提供进程级的隔离,因此可以更加精细地设置 CPU 和内存的使用率,进而更好地利用服务器的计算资源。

快速扩展:每个容器都可作为单独的进程予以运行,并且可以共享底层操作系统的系统资源,这样一来可以加快容器的启动和停止效率。

区别与联系:

虚拟机虽然可以隔离出很多「子电脑」,但占用空间更大,启动更慢。虚拟机软件可能还要花钱,例如 VMWare。

容器技术不需要虚拟出整个操作系统,只需要虚拟一个小规模的环境,类似「沙箱」。

运行空间,虚拟机一般要几 GB 到 几十 GB 的空间,而容器只需要 MB 级甚至 KB 级。

 2.2docker简介 --- Empowering App Development for Developers | Docker/ docker中文社区,docker帮助,docker手册,docker教程,docker安装手册 - docker中文社区/

 2.3 docker核心概念

1)image镜像 docker镜像就是一个只读模板,比如,一个镜像可以包含一个完整的centos,里面仅安装apache或用户的其他应用,镜像可以用来创建docker容器,另外docker提供了一个很简单的机制来创建镜像或者更新现有的镜像,用户甚至可以直接从其他人那里下一个已经做好的镜像来直接使用 (我们需要打包好的东西 制作成的副本 就是 镜像)

2)container容器 docker利用容器来运行应用,容器是从镜像创建的运行实例,它可以被启动,开始、停止、删除、每个容器都是互相隔离的,保证安全的平台,可以吧容器看做是要给简易版的linux环境(包括root用户权限、镜像空间、用户空间和网络空间等)和运行再其中的应用程序 ( 镜像拿过来之后 要运行的空间就是容器)

3)repostory仓库 仓库是集中存储镜像文件的仓库,registry是仓库主从服务器,实际上参考注册服务器上存放着多个仓库,每个仓库中又包含了多个镜像,每个镜像有不同的标签(tag)

仓库分为两种,公有参考,和私有仓库,最大的公开仓库是docker Hub,存放了数量庞大的镜像供用户下周,国内的docker pool,这里仓库的概念与Git类似,registry可以理解为github这样的托管服务。

(A电脑制作好的镜像(image) 发布到 仓库(repostory)中 B电脑再去仓库中将这个镜像进行拉取,然后运行到自己电脑的容器(container)中)

2.4 docker的安装

Docker 要求 CentOS/Ubuntu 系统的内核版本高于 3.10 
查看本页面的前提条件来验证你的CentOS 版本是否支持 Docker,通过 uname -r 命令查看你当前的内核版本
检查内核: uname -r 

安装所需的软件包。yum-utils 提供了 yum-config-manager ,并且 device mapper 存储驱动程序需要 device-mapper-persistent-data 和 lvm2。Device mapper(内核中支持逻辑卷管理的通用设备映射机制,它为实现用于存储资源管理的块设备驱动提供了一个高度模块化的内核架构)存储驱动需要device-mapper-persistent-data 和 lvm2(Logical Volume Manager)逻辑卷管理,它是对此盘分区进行管理的一种机制,建立在硬盘和分区之上的一个逻辑层,用来提高磁盘管理的灵活性:

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

设置阿里镜像仓库,提高下载速度:yum-config-manager  --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo


查看所有docker版本: yum list docker-ce --showduplicates | sort -r
安装docker:yum  -y   install docker-ce    
查看docker状态 : service  docker  status
启动docker:service docker  start

2.5 docker的Hello World

拉取helloworld : docker run  hello-world

此时会连接超时:docker: Error response from daemon: Get https://registry-1.docker.io/v2/: net/http: TLS handshake timeout.
See 'docker run --help'.
    
修改文件vim /etc/docker/daemon.json ( 如果文件不存在,你可以直接创建它 ) :
{
    "registry-mirrors": [
       "https://to18y8uc.mirror.aliyuncs.com", "https://registry.docker-cn.com","http://hub-mirror.c.163.com"    ]
}

重启docker : service  docker  restart
运行hello world :  docker  run  hello-world

Docker原理:
To generate this message, Docker took the following steps:
 1. The Docker client contacted the Docker daemon.   Docker客户端联系了Docker守护进程
 2. The Docker daemon pulled the "hello-world" image from the Docker Hub.
    (amd64)Docker守护进程从Docker Hub中提取“hello world”镜像
 3. The Docker daemon created a new container from that image which runs the
executable that produces the output you are currently reading.
     
Docker守护进程从该镜像创建了一个新容器,该容器运行生成当前正在读取的输出的可执行文件。
     
 4. The Docker daemon streamed that output to the Docker client, which sent it
to your terminal.
     
Docker守护进程将输出流传输到Docker客户机,后者将其发送到终端

2.6 docker 常用命令

查看帮助:docker --help
  查看docker版本:docker  version
  查看docker信息:  docker  info
  查看docker镜像:  docker  images
  查询镜像: docker  search  nginx
  拉取镜像: docker  pull  tomcat:8.0
  
   以前我们运行tomcat 需要 安装jdk 配置环境变量 下载tomcat 解压 配置环境变量 写shell脚本  
   我们使用docker之后 此时只需要pull 下载, 启动 关闭 打开也是直接使用docker自带
  也就是说 无论什么软件 下载 启动都是这些命令
      
  运行容器:docker  run  --name 任意名称  -d  镜像名称:版本
  docker run --name hahaha   -d    -p 8083:8080    tomcat:8.0  
  -d 守护进程  -p 外部访问端口映射
  192.168.239.120:8083  
      
  查看容器运行情况: docker   ps  -a
  查看日志: docker  logs   hahaha
  停止容器: docker  stop   名字/版本
  再次启动: docker  start  名字/版本
  删除容器: docker  rm     名字/版本
  删除镜像: docker  rmi    -f        tomcat:8.0

2.7 自定义镜像到docker仓库

1 将我们的项目打包
我们是springboot项目 可以运行到tomcat中 需要添加maven的依赖和插件  这个方案一般 
我们都是直接运行 springboot项目打好的jar包。也就是说 我们的服务器 不需要安装tomcat
首先我们先找到自己的项目  添加一个maven的插件
 <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
        </plugins>
  </build>


选择maven的快捷工具 点击package 打包

springbootdemo01-1.0-SNAPSHOT.jar

java  -jar  springbootdemo01-1.0-SNAPSHOT.jar

2 创建一个文件夹 用来打包镜像
mkdir  /home/myimage
cd   /home/myimage
使用xftp将这个项目springbootdemo01-1.0-SNAPSHOT.jar上传到我们linux电脑中

3 在当前文件夹中 创建一个 dockerfile文件 配置打包镜像的信息
vim   dockerfile

FROM       java:8
VOLUME     /tmp
ADD         boot.jar   haha.jar
RUN         sh   -c  'touch   /haha.jar'
ENV         JAVA_OPTS=""
ENTRYPOINT  [ "sh" ,  "-c"  , "java  $JAVA_OPTS  -jar  /haha.jar" ]

4 构建镜像
启动docker:  service  docker  start
构建镜像 :   docker  build  -t  xxx  . 
查看镜像:    docker  images
运行镜像:    docker  run --name mvc -d -p 8877:8888  xxx:latest


5 打开百度 搜索 阿里云  搜索镜像 管理平台  镜像仓库  创建镜像仓库   填写信息   本地仓库  管理  
  访问凭证  设定固定密码


 docker login --username=loveeccc registry.cn-hangzhou.aliyuncs.com
 
 docker  images 
[root@docker120 myimage]# docker images
REPOSITORY    TAG       IMAGE ID       CREATED          SIZE
xxxxx         latest    421f331a4875   13 minutes ago   761MB
hello-world   latest    bf756fb1ae65   11 months ago    13.3kB
java          8         d23bdf5b1b1b   3 years ago      643MB

docker tag c038ace3189a registry.cn-hangzhou.aliyuncs.com/test/zq34:1.0
docker push registry.cn-hangzhou.aliyuncs.com/test/zq34:1.0

6 拉取远程仓库的内容

docker pull registry.cn-hangzhou.aliyuncs.com/test/zq34:1.0

 

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值