当前位置: 澳门新濠3559 > 编程 > 正文

【澳门新濠3559】需要在install此包的时候切换re

时间:2019-12-27 17:08来源:编程
RT:由于需求发布了一个私有仓库的npm包,然后别的team需要在自己项目中用到此私包.如果手动操作,切换registry目测应该没什么问题,但是比较麻烦,需要在install此包的时候切换registr

RT:由于需求发布了一个私有仓库的npm包,然后别的team需要在自己项目中用到此私包.如果手动操作,切换registry目测应该没什么问题,但是比较麻烦,需要在install此包的时候切换registry到私有仓库,然后install,成功后再切换回来,那么在自动化构建过程中,这就十分不友好了,如果切换到私有仓库install失败,脚本不执行了,那么就会影响到他们项目的registry环境,这十分不保险,不知道有没有什么方法可以直接指定仓库去installpackage而不需要去切换registry.请各位大神不吝赐教。

1.如何建立私有的 Docker Hub

在 Docker 中,当我们执行 docker pull xxx 的时候 ,它实际上是从 registry.hub.docker.com 这个地址去查找,这就是Docker公司为我们提供的公共仓库。在工作中,我们不可能把企业项目push到公有仓库进行管理。所以为了更好的管理镜像,Docker不仅提供了一个中央仓库,同时也允许我们搭建本地私有仓库。这一篇介绍registry、harbor两种私有仓库搭建。

docker-ce安装与搭建私有仓库,docker-ce私有仓库

系统环境centos7

###docker-ce安装###
1、卸载老版本,较老版本的Docker被称为dockerdocker-engine。如果这些已安装,请卸载它们以及关联的依赖关系。

# sudo yum remove docker
                  docker-common
                  docker-selinux
                  docker-engine

2、安装所需的软件包 yum-utils提供了yum-config-manager 效用,并device-mapper-persistent-datalvm2由需要devicemapper存储驱动程序。

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

3、添加镜像源
# sudo yum-config-manager
    --add-repo
   

4、将软件包添加至本地缓存
# sudo yum makecache fast

5、安装docker-ce
# sudo yum install docker-ce

6、启动docker
# sudo systemctl start docker

 

###docker-ce私有仓库搭建###

说明:本文中私有仓库的ip地址为192.168.211.153:5000

1、pull registry镜像

# docker pull registry

2、docker iamges命令查看本地镜像;

 然后使用 docker run -d -ti --restart always --name docker-hub -p 5000:5000 -v /docker-hub/registry:/var/lib/registry registry 命令将镜像跑起来

docker ps -a 查看容器运行

澳门新濠3559 1

3、由于仓库与客户端的https问题,需要修改/usr/lib/systemd/system/docker.service文件,添加 ExecStart=/usr/bin/dockerd --registry-mirror=  --insecure-registry 192.168.211.153:5000

澳门新濠3559 2

4、重新启动docker。(如果是在虚拟机中运行,重启一下虚拟机,要不然还是使用其他机器访问此仓库还是会有https的问题)

5、docker tag将镜像打tag,格式如下

docker tag <image_name> <registry_ip>/<image_name>:<version>

6、docker push <registry_ip>/<image_name>:<version>;上传镜像至私有仓库

  docker pull <registry_ip>/<image_name>:<version>;从私有仓库pull镜像

7、使用curl 192.168.211.153:5000/v2/_catalog 查看仓库中的镜像情况

澳门新濠3559 3

系统环境centos7 ###docker-ce安装### 1、卸载老版本, 较老版本的Docker被称为 docker 或 docker-engin...

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

1. 搭建

Docker 官方提供了一个搭建私有仓库的镜像 registry ,只需把镜像下载下来,运行容器并暴露5000端口,就可以使用了。

docker pull registry:2

docker run -d -v /opt/registry:/var/lib/registry -p 5000:5000 --name myregistry registry:2

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

浏览器访问

澳门新濠3559 4

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

2. 验证

现在通过push镜像到registry来验证一下。

澳门新濠3559,查看本地镜像:

$ docker imagesREPOSITORY TAG IMAGE ID CREATED SIZEnginx latest 568c4670fa80 5 weeks ago 109MBubuntu latest 93fd78260bd1 7 weeks ago 86.2MBelasticsearch 6.5.1 32f93c89076d 7 weeks ago 773MB

要通过docker tag将该镜像标志为要推送到私有仓库:

docker tag nginx:latest localhost:5000/nginx:latest

通过 docker push 命令将 nginx 镜像 push到私有仓库中:

docker push localhost:5000/nginx:latest

访问 查看私有仓库目录,可以看到刚上传的镜像了:

澳门新濠3559 5

下载私有仓库的镜像,使用如下命令:

docker pull localhost:5000/镜像名:版本号例如docker pull localhost:5000/nginx:latest

docker 官方提供的私有仓库 registry,用起来虽然简单 ,但在管理的功能上存在不足。 Harbor是一个用于存储和分发Docker镜像的企业级Registry服务器,harbor使用的是官方的docker registry(v2命名是distribution)服务去完成。harbor在docker distribution的基础上增加了一些安全、访问控制、管理的功能以满足企业对于镜像仓库的需求。

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

1.搭建

地址: 本文使用 v1.2.2

解压下载的安装包 harbor-offline-installer-v1.2.2.tgz

tar -xvf harbor-offline-installer-v1.2.2.tgz

修改 harbor.cfg

#hostname 改为本地ip,非 Mac OS系统 可以不指定端口hostname = 192.168.31.143:9090#设置secretkey_path 的路径为 当前目录的data下secretkey_path = ./data

需要注意的是,非 Mac 用户只需要 修改 harbor.cfg 中的 hostname ,就可以直接通过./install.sh 就可以构建镜像,并把服务启动起来。不需要 secretkey_path 和 下面 docker-compose.yml 的修改

修改 docker-compose.yml

因为harbor使用了很多目录挂载,Mac有很多目录是不允许挂载的,所以如果是Mac用户,需要修改docker-compose.yml 中的挂载目录,修改后的 docker-compose.yml 如下:

version: '2'services: log: image: vmware/harbor-log:v1.2.2 container_name: harbor-log restart: always volumes: - ./log/:/var/log/docker/:z ports: - 127.0.0.1:1514:514 networks: - harbor registry: image: vmware/registry:2.6.2-photon container_name: registry restart: always volumes: - ./data/registry:/storage:z - ./common/config/registry/:/etc/registry/:z networks: - harbor environment: - GODEBUG=netdns=cgo command: ["serve", "/etc/registry/config.yml"] depends_on: - log logging: driver: "syslog" options: syslog-address: "tcp://127.0.0.1:1514" tag: "registry" mysql: image: vmware/harbor-db:v1.2.2 container_name: harbor-db restart: always volumes: - ./data/database:/var/lib/mysql:z networks: - harbor env_file: - ./common/config/db/env depends_on: - log logging: driver: "syslog" options: syslog-address: "tcp://127.0.0.1:1514" tag: "mysql" adminserver: image: vmware/harbor-adminserver:v1.2.2 container_name: harbor-adminserver env_file: - ./common/config/adminserver/env restart: always volumes: - ./data/config/:/etc/adminserver/config/:z - ./data/secretkey:/etc/adminserver/key:z - ./data/:/data/:z networks: - harbor depends_on: - log logging: driver: "syslog" options: syslog-address: "tcp://127.0.0.1:1514" tag: "adminserver" ui: image: vmware/harbor-ui:v1.2.2 container_name: harbor-ui env_file: - ./common/config/ui/env restart: always volumes: - ./common/config/ui/app.conf:/etc/ui/app.conf:z - ./common/config/ui/private_key.pem:/etc/ui/private_key.pem:z - ./data/secretkey:/etc/ui/key:z - ./data/ca_download/:/etc/ui/ca/:z - ./data/psc/:/etc/ui/token/:z networks: - harbor depends_on: - log - adminserver - registry logging: driver: "syslog" options: syslog-address: "tcp://127.0.0.1:1514" tag: "ui" jobservice: image: vmware/harbor-jobservice:v1.2.2 container_name: harbor-jobservice env_file: - ./common/config/jobservice/env restart: always volumes: - ./data/job_logs:/var/log/jobs:z - ./common/config/jobservice/app.conf:/etc/jobservice/app.conf:z - ./data/secretkey:/etc/jobservice/key:z networks: - harbor depends_on: - ui - adminserver logging: driver: "syslog" options: syslog-address: "tcp://127.0.0.1:1514" tag: "jobservice" proxy: image: vmware/nginx-photon:1.11.13 container_name: nginx restart: always volumes: - ./common/config/nginx:/etc/nginx:z networks: - harbor ports: - 9090:80 - 443:443 - 4443:4443 depends_on: - mysql - registry - ui - log logging: driver: "syslog" options: syslog-address: "tcp://127.0.0.1:1514" tag: "proxy"networks: harbor: external: false

通过运行 install.sh 构建镜像,并把服务启动起来:

./install.sh

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

2. 使用

访问 如下:

澳门新濠3559 6

默认 admin 用户的密码为 Harbor12345 ,可以在 harbor.cfg 进行修改。登录后如下:

澳门新濠3559 7

图中的项目是之前上传的 ,新部署的 Harbor 登录后项目下是空的。

可以创建项目,创建用户,给项目分配用户等等,操作都很简单 。

$ sudo docker pull registry:2.1.1

3. 上传镜像

首先登录私有仓库,可以使用 admin 用户 ,也可以使用我们自己创建的具有上传权限的用户:

docker login -u admin -p Harbor12345 127.0.0.1:9090

要通过docker tag将该镜像标志为要推送到私有仓库,例如:

docker tag nginx:latest 127.0.0.1:9090/library/nginx:latest

上传镜像:

docker push 127.0.0.1:9090/library/nginx:latest

访问 ,在 library 项目下可以看见刚上传的 nginx镜像了:

澳门新濠3559 8澳门新濠3559 9

启动容器:

$ 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 /]# 

可通过浏览器查看:

澳门新濠3559 10

这样,对该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 /]# 

在浏览器中输入

澳门新濠3559 11

同时可在宿主机本地/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 ()

[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

 

 

 

 

 

 

 

 

编辑:编程 本文来源:【澳门新濠3559】需要在install此包的时候切换re

关键词: