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

     

     

     

     

     

     

     

  • 相关阅读:
    Microsoft Enterprise Library 5.0 系列(二) Cryptography Application Block (初级)
    Microsoft Enterprise Library 5.0 系列(五) Data Access Application Block
    Microsoft Enterprise Library 5.0 系列(八) Unity Dependency Injection and Interception
    Microsoft Enterprise Library 5.0 系列(九) Policy Injection Application Block
    Microsoft Enterprise Library 5.0 系列(三) Validation Application Block (高级)
    软件研发打油诗祝大家节日快乐
    从挖井的故事中想到开发管理中最容易忽视的几个简单道理
    ITIL管理思想的执行工具发布
    管理类软件设计“渔”之演化
    20070926日下午工作流与ITILQQ群 事件管理 讨论聊天记录
  • 原文地址:https://www.cnblogs.com/wq3435/p/6493417.html
Copyright © 2011-2022 走看看