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

 

 

 

 

 

 

 

 

posted @ 2017-03-03 02:14  wq3435  阅读(312)  评论(0编辑  收藏  举报