CoreOS容器云企业实战(4)--Docker镜像以及企业级Harbor仓库管理

0x1 Dockerfile自定义镜像

1) Dockerfile介绍

Dockerfile 是自动构建 docker 镜像的配置文件, 用户可以使用 Dockerfile 快速创建自定义的镜像。Dockerfile 中的命令非常类似于 linux 下的 shell 命令。
我们可以通过下面这幅图来直观地感受下 Docker 镜像、容器和 Dockerfile 三者之间的关系。



我们从上图中可以看到, Dockerfile 可以自定义镜像,通过 Docker 命令去运行镜像,从而达到启动容器的目的。
Dockerfile 是由一行行命令语句组成,并且支持已 # 开头的注释行。
一般来说,我们可以将 Dockerfile 分为四个部分:

  • 基础镜像(父镜像)信息指令 FROM
  • 维护者信息指令 MAINTAINER
  • 镜像操作指令 RUN 、 EVN 、 ADD 和 WORKDIR 等
  • 容器启动指令 CMD 、 ENTRYPOINT 和 USER 等

2) Dockerfile的基本结构

Dockerfile的基本结构
Dockerfile 一般分为四部分:基础镜像信息、维护者信息、镜像操作指令和容器启动时执行指令,’#’ 为 Dockerfile 中的注释。

3)使用 Dockerfile 定制镜像/自定义镜像

Q

为什么要自定义Docker镜像?

A

工作中Docker中的镜像并不满足工作的需要,需要进行自己的配置。
Docker Hub 中 99% 的镜像都是通过在 base 镜像中安装和配置需要的软件构建出来的

3) 使用 Docker build 构建镜像创建容器的步骤

第一步 编写Dockerfile文件
第二步 Docker build
第三步 Docker run

3-1 企业案例通过Dockerfile自定义Centos镜像

docker pull centos


image.png

官方镜像 docker run -i -t 470671670cac

[root@localhost ~]# docker run -i -t 470671670cac
[root@87676eea74fc /]# ip a        
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
5: eth0@if6: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default 
    link/ether 02:42:ac:11:00:02 brd ff:ff:ff:ff:ff:ff link-netnsid 0
    inet 172.17.0.2/16 brd 172.17.255.255 scope global eth0
       valid_lft forever preferred_lft forever
[root@87676eea74fc /]# pwd
/
[root@87676eea74fc /]# 

官方进行我们执行的命令不支持,显然是不符合我们需求的


image.png

【注意】现在我们需要自定义一个镜像来支持 VIM、ifconfig、并且登录后的默认路径改做修改。

Step 1 编写 Dockerfile:

# 从标准centos构建
FROM centos

# 定义作者信息
MAINTAINER tim<azkaban@163.com>

# 定义一个变量
ENV newpath /tmp

# 设置登录后的落脚点
WORKDIR $newpath

# 安装vim和net-tools工具
RUN yum -y install vim
RUN yum -y install net-tools

EXPOSE 80

CMD echo $newpath
CMD echo "success----------ok"
CMD /bin/bash

Step 2 接下来开始构建

[root@localhost home]# docker build -f dockerfile -t azkaban/custom_centos:dev .
Sending build context to Docker daemon  2.048kB
Step 1/10 : FROM centos
 ---> 470671670cac
Step 2/10 : MAINTAINER tim<azkaban@163.com>
 ---> Running in 17cfb49e9de0
Removing intermediate container 17cfb49e9de0
 ---> c11d2b7177b3
Step 3/10 : ENV newpath /tmp
 ---> Running in a9b0ac73880d
Removing intermediate container a9b0ac73880d
 ---> c7349c6f826e
Step 4/10 : WORKDIR $newpath
 ---> Running in 058f8a1c5f10
Removing intermediate container 058f8a1c5f10
 ---> da8c3420a837
Step 5/10 : RUN yum -y install vim
 ---> Running in 0d056f9155c3
CentOS-8 - AppStream                            3.3 MB/s | 6.0 MB     00:01    
CentOS-8 - Base                                 2.8 MB/s | 4.0 MB     00:01    
CentOS-8 - Extras                               3.2 kB/s | 2.1 kB     00:00    
Dependencies resolved.
================================================================================
 Package             Arch        Version                   Repository      Size
================================================================================
Installing:
 vim-enhanced        x86_64      2:8.0.1763-13.el8         AppStream      1.4 M
Installing dependencies:
 gpm-libs            x86_64      1.20.7-15.el8             AppStream       39 k
 vim-common          x86_64      2:8.0.1763-13.el8         AppStream      6.3 M
 vim-filesystem      noarch      2:8.0.1763-13.el8         AppStream       48 k
 which               x86_64      2.21-10.el8               BaseOS          49 k

Transaction Summary
================================================================================
Install  5 Packages

Total download size: 7.8 M
Installed size: 31 M
Downloading Packages:
(1/5): gpm-libs-1.20.7-15.el8.x86_64.rpm        776 kB/s |  39 kB     00:00    
(2/5): vim-filesystem-8.0.1763-13.el8.noarch.rp 987 kB/s |  48 kB     00:00    
(3/5): vim-enhanced-8.0.1763-13.el8.x86_64.rpm  5.2 MB/s | 1.4 MB     00:00    
(4/5): which-2.21-10.el8.x86_64.rpm             239 kB/s |  49 kB     00:00    
(5/5): vim-common-8.0.1763-13.el8.x86_64.rpm    6.2 MB/s | 6.3 MB     00:01    
--------------------------------------------------------------------------------
Total                                           3.7 MB/s | 7.8 MB     00:02     
CentOS-8 - AppStream                            1.6 MB/s | 1.6 kB     00:00    
warning: /var/cache/dnf/AppStream-02e86d1c976ab532/packages/gpm-libs-1.20.7-15.el8.x86_64.rpm: Header V3 RSA/SHA256 Signature, key ID 8483c65d: NOKEY
Importing GPG key 0x8483C65D:
 Userid     : "CentOS (CentOS Official Signing Key) <security@centos.org>"
 Fingerprint: 99DB 70FA E1D7 CE22 7FB6 4882 05B5 55B3 8483 C65D
 From       : /etc/pki/rpm-gpg/RPM-GPG-KEY-centosofficial
Key imported successfully
Running transaction check
Transaction check succeeded.
Running transaction test
Transaction test succeeded.
Running transaction
  Preparing        :                                                        1/1 
  Installing       : which-2.21-10.el8.x86_64                               1/5 
  Installing       : vim-filesystem-2:8.0.1763-13.el8.noarch                2/5 
  Installing       : vim-common-2:8.0.1763-13.el8.x86_64                    3/5 
  Installing       : gpm-libs-1.20.7-15.el8.x86_64                          4/5 
  Running scriptlet: gpm-libs-1.20.7-15.el8.x86_64                          4/5 
  Installing       : vim-enhanced-2:8.0.1763-13.el8.x86_64                  5/5 
  Running scriptlet: vim-enhanced-2:8.0.1763-13.el8.x86_64                  5/5 
  Running scriptlet: vim-common-2:8.0.1763-13.el8.x86_64                    5/5 
  Verifying        : gpm-libs-1.20.7-15.el8.x86_64                          1/5 
  Verifying        : vim-common-2:8.0.1763-13.el8.x86_64                    2/5 
  Verifying        : vim-enhanced-2:8.0.1763-13.el8.x86_64                  3/5 
  Verifying        : vim-filesystem-2:8.0.1763-13.el8.noarch                4/5 
  Verifying        : which-2.21-10.el8.x86_64                               5/5 

Installed:
  vim-enhanced-2:8.0.1763-13.el8.x86_64 gpm-libs-1.20.7-15.el8.x86_64          
  vim-common-2:8.0.1763-13.el8.x86_64   vim-filesystem-2:8.0.1763-13.el8.noarch
  which-2.21-10.el8.x86_64             

Complete!
Removing intermediate container 0d056f9155c3
 ---> 5dbc71407158
Step 6/10 : RUN yum -y install net-tools
 ---> Running in 256ba8728c84
Last metadata expiration check: 0:00:16 ago on Thu Jan 23 07:23:35 2020.
Dependencies resolved.
================================================================================
 Package         Architecture Version                        Repository    Size
================================================================================
Installing:
 net-tools       x86_64       2.0-0.51.20160912git.el8       BaseOS       323 k

Transaction Summary
================================================================================
Install  1 Package

Total download size: 323 k
Installed size: 1.0 M
Downloading Packages:
net-tools-2.0-0.51.20160912git.el8.x86_64.rpm   4.1 MB/s | 323 kB     00:00    
--------------------------------------------------------------------------------
Total                                           428 kB/s | 323 kB     00:00     
Running transaction check
Transaction check succeeded.
Running transaction test
Transaction test succeeded.
Running transaction
  Preparing        :                                                        1/1 
  Installing       : net-tools-2.0-0.51.20160912git.el8.x86_64              1/1 
  Running scriptlet: net-tools-2.0-0.51.20160912git.el8.x86_64              1/1 
  Verifying        : net-tools-2.0-0.51.20160912git.el8.x86_64              1/1 

Installed:
  net-tools-2.0-0.51.20160912git.el8.x86_64                                     

Complete!
Removing intermediate container 256ba8728c84
 ---> 0cb56cf78270
Step 7/10 : EXPOSE 80
 ---> Running in ec469c4c3482
Removing intermediate container ec469c4c3482
 ---> d595211bf706
Step 8/10 : CMD echo $newpath
 ---> Running in 782b14b53101
Removing intermediate container 782b14b53101
 ---> bda657b8cc02
Step 9/10 : CMD echo "success----------ok"
 ---> Running in 5b53899004d9
Removing intermediate container 5b53899004d9
 ---> f139b252cd83
Step 10/10 : CMD /bin/bash
 ---> Running in d21678e7e46f
Removing intermediate container d21678e7e46f
 ---> 10248154fcbd
Successfully built 10248154fcbd
Successfully tagged azkaban/custom_centos:dev
[root@localhost home]# 

自己构建的镜像成功 docker images查看


image.png

Step 3 通过Docker run 创建容器,验证vim 以及net-tools

通过我们自定义的镜像创建容器



测试ifconfig命令 OK
测试vim 命令OK



看看构建过程是否是如前面所说,这也证实了镜像的分层
image.png

4)Dockerfile镜像分层

dockerfile中的每一条命令,都会构建一层文件。


Docker镜像分层

以下图的Dockerfile为例分析构建过程



image.png

当容器启动时,一个新的可写层被加载到镜像的顶部。这一层通常被称作“容器层”,“容器层”之下的都叫“镜像层”。



所有对容器的改动 - 无论添加、删除、还是修改文件都只会发生在容器层中。
只有容器层是可写的,容器层下面的所有镜像层都是只读的。
下面我们深入讨论容器层的细节。
镜像层数量可能会很多,所有镜像层会联合在一起组成一个统一的文件系统。如果不同层中有一个相同路径的文件,比如 /a,上层的 /a 会覆盖下层的 /a,也就是说用户只能访问到上层中的文件 /a。在容器层中,用户看到的是一个叠加之后的文件系统。
1.添加文件
在容器中创建文件时,新文件被添加到容器层中。
读取文件
在容器中读取某个文件时,Docker 会从上往下依次在各镜像层中查找此文件。一旦找到,打开并读入内存。
修改文件
在容器中修改已存在的文件时,Docker 会从上往下依次在各镜像层中查找此文件。一旦找到,立即将其复制到容器层,然后修改之。
删除文件
在容器中删除文件时,Docker 也是从上往下依次在镜像层中查找此文件。找到后,会在容器层中记录下此删除操作。
只有当需要修改时才复制一份数据,这种特性被称作 Copy-on-Write。可见,容器层保存的是镜像变化的部分,不会对镜像本身进行任何修改。
这样就解释了我们前面提出的问题:容器层记录对镜像的修改,所有镜像层都是只读的,不会被容器修改,所以镜像可以被多个容器共享。

5) Dockerfile指令详解

一张图搞定Dockerfile常见命令


Dockerfile中包括FROM、MAINTAINER、RUN、CMD、EXPOSE、ENV、ADD、COPY、ENTRYPOINT、VOLUME、USER、WORKDIR、ONBUILD等13个指令。

FROM

格式为FROM image或FROM image:tag,并且Dockerfile中第一条指令必须是FROM指令,且在同一个Dockerfile中创建多个镜像时,可以使用多个FROM指令。

MAINTAINER

格式为MAINTAINER user_name user_email,指定维护者信息

RUN

格式为RUN command或 RUN ["EXECUTABLE","PARAM1","PARAM2".....],前者在shell终端中运行命令,/bin/sh -c command,例如:/bin/sh -c "echo hello";后者使用exec执行,指定其他运行终端使用RUN["/bin/bash","-c","echo hello"]
每条RUN指令将当前的镜像基础上执行指令,并提交为新的镜像,命令较长的时候可以使用\来换行。

CMD

支持三种格式:
CMD ["executable","param1","param2"],使用exec执行,这是推荐的方式。
CMD command param1 param2 在/bin/sh中执行。
CMD ["param1","param2"] 提供给ENTERYPOINT的默认参数。
CMD用于指定容器启动时执行的命令,每个Dockerfile只能有一个CMD命令,多个CMD命令只执行最后一个。若容器启动时指定了运行的命令,则会覆盖掉CMD中指定的命令。

EXPOSE

格式为 EXPOSE port [port2,port3,...],例如EXPOSE 80这条指令告诉Docker服务器暴露80端口,供容器外部连接使用。
在启动容器的使用使用-P,Docker会自动分配一个端口和转发指定的端口,使用-p可以具体指定使用哪个本地的端口来映射对外开放的端口。

ENV

格式为:EVN key value 。用于指定环境变量,这些环境变量,后续可以被RUN指令使用,容器运行起来之后,也可以在容器中获取这些环境变量。
例如
ENV word hello
RUN echo $word

ADD

格式:ADD src dest
该命令将复制指定本地目录中的文件到容器中的dest中,src可以是是一个绝对路径,也可以是一个URL或一个tar文件,tar文件会自动解压为目录。

COPY

格式为:COPY src desc
复制本地主机src目录或文件到容器的desc目录,desc不存在时会自动创建。

ENTRYPOINT

格式有两种:
ENTRYPOINT ["executable","param1","param2"]
ENTRYPOINT command param1,param2 会在shell中执行。
用于配置容器启动后执行的命令,这些命令不能被docker run提供的参数覆盖。和CMD一样,每个Dockerfile中只能有一个ENTRYPOINT,当有多个时最后一个生效。

VOLUME

格式为 VOLUME ["/data"]
作用是创建在本地主机或其他容器可以挂载的数据卷,用来存放数据。

USER

格式为:USER username
指定容器运行时的用户名或UID,后续的RUN也会使用指定的用户。要临时使用管理员权限可以使用sudo。在USER命令之前可以使用RUN命令创建需要的用户。
例如:RUN groupadd -r docker && useradd -r -g docker docker

WORKDIR

格式: WORKDIR /path
为后续的RUN CMD ENTRYPOINT指定配置工作目录,可以使用多个WORKDIR指令,若后续指令用得是相对路径,则会基于之前的命令指定路径。

ONBUILD

格式ONBUILD [INSTRUCTION]
该配置指定当所创建的镜像作为其他新建镜像的基础镜像时所执行的指令。
例如下面的Dockerfile创建了镜像A:
ONBUILD ADD . /app
ONBUILD RUN python app.py

则基于镜像A创建新的镜像时,新的Dockerfile中使用from A 指定基镜像时,会自动执行ONBBUILD指令内容,等价于在新的要构建镜像的Dockerfile中增加了两条指令:
FROM A
ADD ./app
RUN python app.py

docker build

创建好Dockerfile之后,通过docker build命令来创建镜像,该命令首先会上传Dockerfile文件给Docker服务器端,服务器端将逐行执行Dockerfile中定义的指令。
通常建议放置Dockerfile的目录为空目录。另外可以在目录下创建.dockerignore文件,让Docker忽略路径下的文件和目录,这一点与Git中的配置很相似。

通过 -t 指定镜像的标签信息,例如:docker build -t regenzm/first_image . ##"."指定的是Dockerfile所在的路径

0x2 Docker Repository(仓库管理)

仓库(Repository)是集中存放镜像的地方。以下介绍一下 Docker Hub。当然不止 docker hub,只是远程的服务商不一样,操作都是一样的

1)镜像的公有仓库 Docker Hub

目前 Docker 官方维护了一个公共仓库 Docker Hub
大部分需求都可以通过在 Docker Hub 中直接下载镜像来实现。

1-1 注册

https://hub.docker.com 免费注册一个 Docker 账号。

1-2 登录和退出

登录需要输入用户名和密码,登录成功后,我们就可以从 docker hub 上拉取自己账号下的全部镜像。
目前 Docker 官方维护了一个公共仓库 Docker Hub
大部分需求都可以通过在 Docker Hub 中直接下载镜像来实现。

image.png

docker login 登录

[root@localhost home]# docker login
Login with your Docker ID to push and pull images from Docker Hub. If you don't have a Docker ID, head over to https://hub.docker.com to create one.
Username: 13810294682
Password: 
WARNING! Your password will be stored unencrypted in /root/.docker/config.json.
Configure a credential helper to remove this warning. See
https://docs.docker.com/engine/reference/commandline/login/#credentials-store

Login Succeeded
[root@localhost home]# 

docker logout 登出

[root@localhost home]# docker logout
Removing login credentials for https://index.docker.io/v1/
[root@localhost home]# 

1-3 基本操作

上传镜像
docker push <image_name>

搜索镜像
docker search <image_name>


下载镜像
docker pull


2)镜像的私有仓库

Docker官方提供了docker-registry组件,我们可以用它来构建我们的私有镜像仓库。
安装docker-registry

1、Docker私有仓库安装

Step 1开始下载最新的镜像。

[root@localhost home]# docker rmi -f docker.io/registry
Error: No such image: docker.io/registry
[root@localhost home]# 

[root@localhost home]# docker pull registry
Using default tag: latest
latest: Pulling from library/registry
c87736221ed0: Pull complete 
1cc8e0bb44df: Pull complete 
54d33bcb37f5: Pull complete 
e8afc091c171: Pull complete 
b4541f6d3db6: Pull complete 
Digest: sha256:8004747f1e8cd820a148fb7499d71a76d45ff66bac6a29129bfdbfdc0154d146
Status: Downloaded newer image for registry:latest
docker.io/library/registry:latest

docker images 查看镜像是否pull成功


Step2 启动并且挂载镜像仓库到本地磁盘

[root@localhost home]# docker run -d -v /registry:/home/docker-registry -p 5000:5000 --restart=always --privileged=true --name registry registry:latest
ae5d40d1b9802a2b4579466608a69f290e1e39273729e7b7fbcebe212e31c128
[root@localhost home]# 

查看容器启动进程



-v /registry:/home/docker-registry:默认情况下,会将仓库存放于容器内的/home/docker-registry目录下,指定本地目录挂载到容器。
-p 5000:5000 :端口映射。即本地5000端口,映射到registry中的5000端口。
–restart=always1:在容器退出时总是重启容器,主要应用在生产环境。
–privileged=true:在CentOS7中的安全模块selinux把权限禁掉了,参数给容器加特权,不加上传镜像会报类似权限错误。OSError: [Errno 13] Permission denied: ‘/tmp/registry/repositories/liibrary’)或者(Received unexpected HTTP status: 500 Internal Server Error)
–name registry:指定容器的名称。
为了持久化数据,将volume挂载到/home/docker-registry

Step3 我们给一个本地镜像打个标签然后上传

[root@localhost home]# docker tag nginx:latest localhost:5000/nginx:1.0
[root@localhost home]# docker push localhost:5000/nginx:1.0

修改配置文件

[root@localhost registry]# echo '{ "insecure-registries":["192.168.0.115:5000"] }' > /etc/docker/daemon.json
[root@localhost registry]# systemctl restart docker

浏览器中打开 出现 {} 表示运行成功


打包上传镜像



浏览器验证


Step 4 另一台Docker主机上验证

[root@web01 ~]# docker pull 192.168.0.115:5000/azkaban/custom_centos:dev
dev: Pulling from azkaban/custom_centos
8a29a15cefae: Pull complete 
dc26872d8705: Pull complete 
aa55a5bd5b69: Pull complete 
Digest: sha256:1c29e87308bbf896d030e6a07f534200761c24fc089b848933faeb5a294e68a2
Status: Downloaded newer image for 192.168.0.115:5000/azkaban/custom_centos:dev

[root@web01 ~]# docker images
REPOSITORY                                 TAG                 IMAGE ID            CREATED             SIZE
192.168.0.115:5000/azkaban/custom_centos   dev                 10248154fcbd        2 hours ago         322MB
rancher/scheduler                          v0.8.6              fbedeaddc3e9        12 months ago       248MB
rancher/agent                              v1.2.11             1cc7591af4f5        18 months ago       243MB
rancher/net                                v0.13.17            f170c38e3763        18 months ago       311MB
rancher/dns                                v0.17.4             678bde0de4d2        18 months ago       249MB
rancher/healthcheck                        v0.3.8              ce78cf69cc0b        18 months ago       391MB
rancher/metadata                           v0.10.4             02104eb6e270        18 months ago       251MB
rancher/network-manager                    v0.7.22             13381626c510        18 months ago       256MB
rancher/storage-nfs                        v0.9.1              9ff4993fd3f8        24 months ago       211MB
rancher/net                                holder              665d9f6e8cc1        2 years ago         267MB
[root@web01 ~]#

0x3 Docker Registry & Harbor企业级开源仓库

1) Harbor特性

  • 基于角色的访问控制:用户和存储库是通过“项目”组织的,用户可以对多个镜像仓库统一命名空间拥有不同的权限。

  • 镜像复制:可以基于具有多个Registry实例之间复制(同步)图像和图表。如果出现任何错误,Harbor会自动重试复制。非常适合于负载平衡、高可用性、多数据中心、混合和多云场景。

  • LDAP/AD支持:Harbor与现有企业LDAP/AD集成,用于用户身份验证和管理,并支持将LDAP组导入Harbor并为其分配适当的项目角色。

  • 镜像删除和垃圾收集:镜像可以删除,其空间可以回收。

  • 国际化:对多国语言支持(已拥有中文、英文、德文、日语和俄文);

  • 图形化用户界面:用户可以轻松浏览、搜索存储库和管理项目。

  • 审计管理:跟踪到存储库的所有操作。

  • RESTful API:用于大多数管理操作的RESTful API,易于与外部系统集成。一个嵌入式的Swagger用户界面可用于探索和测试API。

  • 简单部署:提供在线和离线安装程序。此外,可以安装到vSphere平台的(OVA方式)虚拟设备。

2)Harbor 组件

  • proxy:Harbor的组件,如注册表、UI和令牌服务,都位于反向代理之后。代理将来自浏览器和Docker客户机的请求转发到各种后端服务。

  • Registry:负责存储Docker镜像和处理Docker推/拉命令。由于Harbor需要对映像进行访问权限控制,Registry将引导客户机访问令牌服务,以便为每个pull或push请求获取有效的令牌(token)。

  • Core Service:Harbor的核心功能,主要提供以下服务:

    • UI:提供图像化的图形用户界面,帮助人户管理镜像和对用户授权。

    • webhook: 为了及时获取registry上images的状态变化的情况,在Registry上配置webhook,把状态变化传递UI模块;

    • Token令牌服务:负责根据用户在项目中的角色为每个docker push/pull命令颁发令牌。如果从Docker客户机发送的请求中没有令牌,注册表将把请求重定向到令牌服务。

  • Datebase:为了给core services提供数据库舒服,负责储存用户权限、审计日志、Docker image分组信息等数据。

  • Job Services:提供镜像远程负责功能,能把本地镜像同步到其他harbor实例当中。

  • Log Collector:为了帮助监控Harbor运行,负责手机其他组件的log,供日后分析。

image

3) Harbor 安装

Step1 安装Docker-compose

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

这一步国内不用加速器可能会比较慢!
Docker国内阿里云镜像加速传送门

Docker-compose官方安装文档链接
VMWare Harbor项目地址传送门

[root@web01 ~]# vim /etc/docker/daemon.json 
[root@web01 ~]# sudo systemctl daemon-reload
[root@web01 ~]# sudo systemctl restart docker
[root@web01 ~]# sudo curl -L "https://github.com/docker/compose/releases/download/1.24.1/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
100   617    0   617    0     0    581      0 --:--:--  0:00:01 --:--:--   582
100 15.4M  100 15.4M    0     0  3205k      0  0:00:04  0:00:04 --:--:-- 4623k
[root@web01 ~]#  
[root@web01 ~]# chmod +x /usr/local/bin/docker-compose
[root@web01 ~]# docker-compose --version
docker-compose version 1.24.1, build 4667896b
[root@web01 ~]# 
[root@web01 ~]# yum install -y lrzsz
[root@web01 home]# tar -xvf harbor-offline-installer-v1.9.4.tgz
[root@web01 home]# cd harbor
[root@web01 harbor]# ./prepare
prepare base dir is set to /home/harbor
Unable to find image 'goharbor/prepare:v1.9.4' locally
v1.9.4: Pulling from goharbor/prepare
59bb73b1db41: Pull complete
151a8120c357: Pull complete
bdb3b55ae888: Pull complete
bc627acc6004: Pull complete
b9e028a223e6: Pull complete
0b1166b529f5: Pull complete
5255c5c54d23: Pull complete
Digest: sha256:3b0e3b40be3056aa2eab2f02393065a615e442c7e6f572def2f1f991257c8d5d
Status: Downloaded newer image for goharbor/prepare:v1.9.4
Generated configuration file: /config/log/logrotate.conf
Generated configuration file: /config/log/rsyslog_docker.conf
Generated configuration file: /config/nginx/nginx.conf
Generated configuration file: /config/core/env
Generated configuration file: /config/core/app.conf
Generated configuration file: /config/registry/config.yml
Generated configuration file: /config/registryctl/env
Generated configuration file: /config/db/env
Generated configuration file: /config/jobservice/env
Generated configuration file: /config/jobservice/config.yml
Generated and saved secret to file: /secret/keys/secretkey
Generated certificate, key file: /secret/core/private_key.pem, cert file: /secret/registry/root.crt
Generated configuration file: /compose_location/docker-compose.yml
Clean up the input dir

[root@web01 harbor]# ./install.sh 

[Step 0]: checking if docker is installed ...

Note: docker version: 18.03.1

[Step 1]: checking docker-compose is installed ...

Note: docker-compose version: 1.24.1

[Step 2]: loading Harbor images ...

安装成功



浏览器登录

用户名admin 初始密码Harbor12345
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
禁止转载,如需转载请通过简信或评论联系作者。
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 212,294评论 6 493
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,493评论 3 385
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 157,790评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,595评论 1 284
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,718评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,906评论 1 290
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,053评论 3 410
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,797评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,250评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,570评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,711评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,388评论 4 332
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,018评论 3 316
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,796评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,023评论 1 266
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,461评论 2 360
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,595评论 2 350

推荐阅读更多精彩内容