zoukankan      html  css  js  c++  java
  • Docker registry 与 持续集成

    1.如何建立私有的 Docker Hub

    docker是一个非常好用的虚拟化工具。

    Registry 在git上分为老代码库和新代码库,老代码push,pull 存在性能问题,新代码库采用go语言编写大大优化了push和pull的效率。

    下面给出建立私有docker hub的方法。docker将私有hub的环境打包在registry image中

    tag 为latest的版本为 0.9.1 版本,这里直接采用2.1.1版本
    执行指令:

    $ sudo docker pull registry:2.1.1

    启动容器:

    $ sudo docker run -d -v /opt/registry:/var/lib/registry -p 5000:5000 --restart=always --name registry registry:2.1.1

    Registry服务默认会将上传的镜像保存在容器的/var/lib/registry,我们将主机的/opt/registry目录挂载到该目录,即可实现将镜像保存到主机的/opt/registry目录了。

    这条指令启动一个基于registry image的cotainer。并将host主机的port 5000绑定到虚拟机的端口5000。

    通过docker ps 查看

    [root@hadoop /]# docker ps
    CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS                    NAMES
    6e6f720c3fbc        registry:2.1.1      "/bin/registry /et..."   5 seconds ago       Up 3 seconds        0.0.0.0:5000->5000/tcp   registry
    711859caf110        ubuntu              "/bin/bash"              23 hours ago        Up 23 hours                                  newcontent
    b206b1748020        mysql:5.5           "docker-entrypoint..."   23 hours ago        Up 23 hours         3306/tcp                 mysqldb
    abdf172d98e0        test/centos         "./var/tmp/tomcat/..."   40 hours ago        Up 40 hours         0.0.0.0:8090->8080/tcp   testContainer
    [root@hadoop /]# 

    可通过浏览器查看:

    这样,对该host主机端口5000的任何访问都转移到虚拟机中。
    上传image:
    首先通过docker tag 将image标志为要推送到私有仓库:

    docker tag $ID $IP:$port/$name

    [root@hadoop /]# docker tag hello-world 127.0.0.1:5000/hello-world

    查看镜像:

    [root@hadoop /]# docker images
    REPOSITORY                   TAG                 IMAGE ID            CREATED             SIZE
    test/centos                  latest              0235ea6a1dc1        40 hours ago        655 MB
    <none>                       <none>              f07e6d9bd519        42 hours ago        192 MB
    mysql                        5.5                 0697aa95507c        2 days ago          255 MB
    ubuntu                       latest              0ef2e08ed3fa        3 days ago          130 MB
    ubuntu                       14.04               7c09e61e9035        3 days ago          188 MB
    docker-whale                 latest              17104b3a899f        3 days ago          256 MB
    127.0.0.1:5000/hello-world   latest              48b5124b2768        6 weeks ago         1.84 kB
    hello-world                  latest              48b5124b2768        6 weeks ago         1.84 kB
    centos                       latest              67591570dd29        2 months ago        192 MB
    registry                     2.1.1               52bb991b482e        16 months ago       220 MB
    [root@hadoop /]# 

    直接使用doker push 将镜像上传到私有库

    [root@hadoop /]# docker push 127.0.0.1:5000/hello-world
    The push refers to a repository [127.0.0.1:5000/hello-world]
    98c944e98de8: Pushed 
    latest: digest: sha256:720abce70775606fa539d38acc4d58d96eea22d51d7d06d269f6c5d6702e50a5 size: 2103
    [root@hadoop /]# 

    在浏览器中输入 http://127.0.0.1:5000/v2/_catalog可以查看已经上传的镜像

    同时可在宿主机本地/opt/registry目录下查看到,这样在Container挂掉的时候,我们在宿主机依旧可以查看到镜像

    [root@hadoop ~]# cd /opt/registry/
    [root@hadoop registry]# ls
    docker


    下载image:

    先将本地的 hello-world 镜像删除掉

    [root@hadoop registry]# docker rmi hello-world
    Untagged: hello-world:latest
    Untagged: hello-world@sha256:c5515758d4c5e1e838e9cd307f6c6a0d620b5e07e6f927b07d05f6d12a1ac8d7
    [root@hadoop registry]# 

    使用 docker pull 拉取镜像

    [root@hadoop registry]# docker pull 127.0.0.1:5000/hello-world
    Using default tag: latest
    latest: Pulling from hello-world
    983bfa07a342: Pull complete 
    Digest: sha256:720abce70775606fa539d38acc4d58d96eea22d51d7d06d269f6c5d6702e50a5
    Status: Downloaded newer image for 127.0.0.1:5000/hello-world:latest

     使用私有仓库push可能会出现的问题:因为启动的registry服务不是安全可信的,需要修改docker配置文件 /etc/default/docker

    添加  DOCKER_OPTS="--insecure-registry xxx.xxx.xxx.xxx:5000" 并重启docker 服务 service docker restart

     

    2.将git上的项目git到本地,这里使用的osgit (http://git.oschina.net)

    [root@bogon ~]# git clone https://git.oschina.net/wq3435/second.git

    若提示

    bash: git: command not found...

    说明没有安装 git

    安装git,CentOS下使用:

    yum install git -y
    或
    yum install -y git

    在Ubuntu 或 Debian下使用

    apt-get install git -y

    3.在git到本地后会有如下的目录

    [root@bogon second]# ls
    README.md  centos7  docker-compose.yml  hello  jdk  jenkins  jre  maven  mysql  tomcat

    第一个文件 docker-compose.xml

    mysql:                        #先启动一个叫mysql的docker容器(也可以任务是创建名叫mysql的docker容器),命名叫 mysql:,因为是yml文件对格式缩进要求非常严格 
       image: mysql:5.5   #采用的镜像是 csphere/mysql:5.5
       ports:                  #给宿主机和container的端口进行映射
         - "3306:3306"
       volumes:        #把宿主机的文件目录/var/lib/docker/vfs/dir/dataxc 映射到container的文件目录 /var/lib/mysql
         - /var/lib/docker/vfs/dir/dataxc:/var/lib/mysql  #这样的做法是当Container删掉以后,这个目录下的文件还是存在的(可以应用到生产中registry的映射)
       hostname: mydb.server.com  #这里的hostname和docker run --name 的name是不一样的,后者是 docker ps 中显示的name,而这里的hostname是系统本地
                      #在/etc/hostname 中的hostname是一个意思
    tomcat:
       image: tomcat:7.0.75
       ports:
          - "8080:8080"
       links:           #links的两个作用 ①在tomcat中想访问mysql,可以再etc/host下写上ip地址和主机名,这样就可以直接连通了,不需要做域名解析.②可以直接访问msyql容器中的环境变量            
          - mysql:db   #给mysql起的一个别名db
       environment:   #配置环境变量,也可以通过 docker run -e 环境变量  配置环境变量
          - TOMCAT_USER=admin
          - TOMCAT_PASS=admin
       hostname: tomcat.server.com

    4.使用docker-compose.xml 启动

    [root@bogon second]# docker-compose up -d
    bash: docker-compose: command not found...

    这里显示没有安装docker-compose

    安装docker-compose

    一种方式:

    $ curl -L "https://github.com/docker/compose/releases/download/1.11.1/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
    $ chmod +x /usr/local/bin/docker-compose

    上述方式可能会很慢。

    第二种方式

    1、首先检查Linux有没有安装Python-pip包,直接执行 yum install python-pip

    yum install python-pip

    2、没有python-pip包就执行命令 yum -y install epel-release

    yum -y install epel-release

    3、执行成功之后,再次执行yum install python-pip

    yum install python-pip

    4.安装好pip之后,就可以安装Docker-Compose了.在linunx终端执行:pip install docker-compose.

    [root@bogon ~]# pip install docker-compose

    5.安装成功

    [root@bogon ~]# docker-compose --version
    docker-compose version 1.11.2, build dfed245
    [root@bogon ~]# 

    安装好docker-compose后再次执行 docker-compose up -d

    [root@bogon second]# docker-compose up -d
    Creating second_mysql_1
    Creating second_tomcat_1

     

     

     

     

     

     

     

  • 相关阅读:
    JS中利用正则表达式提取一个字符串中的子字符串的方法
    Xcode的环境变量列表
    在未安装Visual Studio 2012的服务器上使用MSBuild以文件系统方式发布ASP.NET MVC系统
    使Web API支持二级实体操作,兼对RESTFul风格API设计的疑惑。
    忽略大小写的字符串包含测试
    Entity Framework里不用查询直接更新的办法
    iOS里生成灰化(黑白)图像
    微信小程序开发调试工具
    微信小程序产品定位及功能介绍
    微信小程序DEMO初体验
  • 原文地址:https://www.cnblogs.com/wq3435/p/6493417.html
Copyright © 2011-2022 走看看