Docker Compose与私有仓库部署

发布于:2025-06-26 ⋅ 阅读:(14) ⋅ 点赞:(0)

         

目录

 第一节:docker 重启策略与状态码

一:Docker 重启策略

二:Docker 容器的常见退出状态码

 第二节:Docker Compose 工具的应用

一:Docker Compose 工具简介

1:什么是 Docker Compose

2:Docker Compose 的安装

3:文件格式以及编写注意事项

二:docker-compose 的基本用法

1:docker-compose 的运行

(1)前台运行

(2)后台运行

(3)重新构建运行

2:docker-compose 的关闭

(1)关闭指定容器

(2)全部关闭

3:docker-compose 的启动

(1)启动指定容器

(2)全部启动

4:docker-compose 的重启

(1)重启指定容器

(2)全部重启

5:删除

三:docker-compose 案例演示

1:编写文件

2:修改 nginx 配置文件

3:执行文件,生成容器

4:列出当前运行的容器

 第三节:Harbor 私有仓库

一:Harbor 基础概念

1:什么是 Harbor

2:Harbor 的优势

3:Harbor 的构成

二:部署 Harbor 私有仓库

资源列表

1:基础环境设置(两个主机都要设置)

(1)关闭防火墙

(2)关闭 selinux

2:Harbor 部署安装

(1)下载安装包

(2)下载完成后,将压缩包上传到服务器:

(3)然后对其进行解压:

4:配置 harbor

6:运行 Harbor 的安装脚本

7:安装完成,使用浏览器访问 Harbor,正常情况下应能进入登录界面:

三:Harbor 客户端应用

1:所有的 docker 主机设置 daemon.json 文件

2:找一个 docker 主机,登录到我们的 Harbor 仓库

3:然后尝试使用命令行 push 一个镜像到 Harbor 上

4:测试 pull

5:退出 harbor


                         

                    第一节:docker 重启策略与状态码

一:Docker 重启策略

Docker 容器的重启策略是面向生产环境的一个启动策略,在开发过程中可以忽略该策略。Docker 容器的重启都是由 Docker 守护进程完成的,因此与守护进程息息相关。

Docker 容器的重启策略如下:

  • no,默认策略,在容器退出时不重启容器
  • on - failure,在容器非正常退出时(退出状态非 0),才会重启容器
  • on - failure:3,指定启动的次数,在容器非正常退出时重启容器,最多重启 3 次
  • always,在容器退出时总是重启容器
  • unless - stopped,在容器退出时总是重启容器,但是不考虑在 Docker 守护进程启动时就已经停止了的容器
# 使 --restart 指定重启策略
[root@bogon ~]# docker run -itd --restart=always --name host1 busybox sh
8348bf8334cfe8fda90dc3f15e0df39f7c541416f1faa0721f728ed41fb29425

二:Docker 容器的常见退出状态码

通过状态码我们可以大概判断出容器的情况。

状态码 说明
0 正常退出
125 Docker 守护进程本身错误
126 容器启动后,要执行的默认命令无法调用
127 容器启动后,要执行的默认命令不存在
其他 容器启动后正常执行的命令返回的状态码

                             第二节:Docker Compose 工具的应用

一:Docker Compose 工具简介

1:什么是 Docker Compose

Docker Compose 的前身是 Fig,它是一个定义及运行多个 Docker 容器的工具。使用 Docker Compose 时,只需要在一个配置文件中定义多个 Docker 容器,然后使用一条命令启动这些容器。Docker Compose 会通过解析容器间的依赖关系按先后顺序启动所定义的容器。

2:Docker Compose 的安装

[root@localhost ~]# curl -L "https://github.com/docker/compose/releases/download/1.24.1/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose

[root@localhost ~]# chmod +x /usr/local/bin/docker-compose
[root@localhost ~]# ln -s /usr/local/bin/docker-compose /usr/bin/docker-compose

[root@localhost ~]# docker-compose --version

3:文件格式以及编写注意事项

YAML 是一种标记语言,它可以很直观的展示数据序列化格式,可读性高。类似于 XML 数据描述语言,语法比 XML 简单的很多。YAML 数据结构通过缩进来表示,连续的项目通过减号来表示,键值对用冒号分隔,数组用中括号([])括起来,hash 用花括号({})括起来

使用 YAML 时需要注意下面事项:

  1. 不支持制表符 tab 键缩进,需要使用空格缩进。
  2. 通常开头缩进两个空格。
  3. 字符后缩进一个空格,如冒号、逗号、横杆。
  4. 用 #号注释。
  5. 如果包含特殊字符,要使用单引号('')引起来。
  6. 布尔值(true、false、yes、no、on、off)必须用引号("")括起来,这样分析器会将它们解释为字符串。

二:docker-compose 的基本用法

1:docker-compose 的运行

  • (1)前台运行
docker-compose up

  • (2)后台运行
docker-compose up -d

  • (3)重新构建运行
docker-compose up --build -d

2:docker-compose 的关闭

  • (1)关闭指定容器
docker-compose stop <容器名称>
# 示例:
docker-compose stop nginx

  • (2)全部关闭
docker-compose stop

3:docker-compose 的启动

  • (1)启动指定容器
docker-compose start <容器名称>
# 示例:
docker-compose start nginx

  • (2)全部启动
docker-compose start

4:docker-compose 的重启

  • (1)重启指定容器
docker-compose restart <容器名称>
# 示例:
docker-compose restart nginx

  • (2)全部重启
docker-compose restart

5:删除

docker-compose down

三:docker-compose 案例演示

1:编写文件

[root@localhost ~]# vim docker-compose.yaml
#version: '2'
services:
  webapp:
    image: 'nginx'
    ports:
      - "80:80"
    volumes:
      - "/www/html:/www/html:rw"
      - "/opt/nginx/nginx.conf:/etc/nginx/nginx.conf"

2:修改 nginx 配置文件

将 nginx 的配置文件上传到 docker 主机上

[root@localhost ~]# mkdir /opt/nginx
[root@localhost ~]# vim /opt/nginx/nginx.conf
#user  nobody;
worker_processes  1;

#pid        logs/nginx.pid;

events {
    worker_connections  1024;
}

http {
    include       mime.types;
    default_type  application/octet-stream;

    sendfile        on;
    #tcp_nopush     on;

    #keepalive_timeout  0;
    keepalive_timeout  65;

    #gzip  on;

    server {
        listen       80;
        server_name  localhost;

        #charset koi8-r;

        #access_log  logs/host.access.log  main;

        location / {
            root   /www/html;
            index  index.html index.htm index.php;
        }

        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
            root   html;
        }

        location ~ \.php$ {
            root           /www/html;
            fastcgi_pass   127.0.0.1:9000;
            fastcgi_index  index.php;
            fastcgi_param  SCRIPT_FILENAME  /scripts$fastcgi_script_name;
            include        fastcgi_params;
        }
    }
}

3:执行文件,生成容器

[root@localhost ~]# docker-compose up -d

4:列出当前运行的容器

[root@localhost ~]# docker-compose ps
[root@localhost ~]# docker-compose kill webapp

                           第三节:Harbor 私有仓库

一:Harbor 基础概念

1:什么是 Harbor

Harbor 是 VMware 公司开源的企业级 Docker Registry 项目,其目标是帮助用户迅速搭建一个企业级的 Docker Registry 服务。它以 Docker 公司开源的 Registry 为基础,提供了管理 UI、基于角色的访问控制(Role Based AccessControl)、AD/LDAP 集成、以及审计日志(Auditlogging)等企业用户需求的功能。通过添加一些企业必需的功能特性,例如安全、标识和管理等,扩展了开源 Docker Distribution。作为一个企业级私有 Registry 服务器,Harbor 提供了更好的性能和安全,以提升用户使用 Registry 构建和运行环境传输镜像的效率。

2:Harbor 的优势

Harbor 具有如下优势:

  • 基于角色控制:用户和仓库都是基于项目进行组织的,而用户在项目中可以拥有不同的权限。
  • 基于镜像的复制策略:镜像可以在多个 Harbor 实例之间进行复制(同步),适用于负载平衡、高可用性、多数据中心、混合和多云场景。
  • 支持 LDAP/AD:Harbor 与现有的企业 LDAP/AD 集成,用于用户认证和管理。
  • 删除图像和收集垃圾:镜像可以被删除,也可以回收镜像占用的空间。
  • 图形 UI:用户可以轻松浏览、搜索镜像仓库以及对项目进行管理。
  • 审计:对存储库的所有操作都进行记录。
  • RESTful API:用于大多数管理操作的 RESTful API,易于与外部系统集成。

3:Harbor 的构成

Harbor 在架构上主要有 Proxy、Registry、Core services、Database(Harbor - db)、Log collector(Harbor - log)五个组件:

  • (1)Proxy
    Harbor 的 Registry、UI、Token 等服务通过一个前置的反向代理统一接收浏览器和 Docker 客户端的请求,并将请求转发给后端不同的服务。

  • (2)Registry
    负责储存 Docker 镜像,并处理 Docker push/pull 命令。由于要对用户进行访问控制,即不同用户对 Docker image 有不同的读写权限,Registry 会指向一个 Token 服务,强制用户的每次 Docker pull/push 请求都要携带一个合法的 Token,Registry 会通过公钥对 Token 进行解密验证。
  • (3)Core service
    这是 Harbor 的核心功能,主要提供以下服务:
    • UI(Harbor - ui):提供图形化界面,帮助用户管理 Registry 上的镜像(Image),并对用户进行授权。
    • Webhook:为了及时获取 Registry 上 image 状态变化的情况,在 Registry 上配置 Webhook,把状态变化传递给 UI 模块。
  • (4)Token 服务:负责根据用户权限给每个 Docker push/pull 命令签发 Token。Docker 客户端向 Registry 服务发起的请求,如果不包含 Token,会被重定向,获得 Token 后再重新向 Registry 进行请求
  • (5)Database(Harbor - db)
    为 coreservices 提供数据库服务,负责储存用户权限、审计日志、Docker image 分组信息等数据。
  • (6)Log collector(Harbor - log)
    为了帮助监控 Harbor 运行,负责收集其他组件的 log,供日后进行分析

Harbor 的每个组件都是以 Docker 容器的形式构建的,因此,使用 Docker Compose 来对它进行部署。

二:部署 Harbor 私有仓库

资源列表
操作系统 主机名 配置 IP
CentOS7.9 2009 harbor 2C4G 192.168.10.106
CentOS7.9 2009 client 2C4G 192.168.10.101

1:基础环境设置(两个主机都要设置)

(1)关闭防火墙
systemctl stop firewalld
systemctl disable firewalld
(2)关闭 selinux
setenforce 0
sed -i "s/^SELINUX=.*/SELINUX=disabled/g" /etc/selinux/config

2:Harbor 部署安装

(1)下载安装包

首先下载官方的离线安装包

https://github.com/goharbor/harbor/releases/tag/v2.4.3
https://github.com/goharbor/harbor/releases/download/v2.4.3/harbor-offline-installer-v2.4.3.tgz
(2)下载完成后,将压缩包上传到服务器:
[root@localhost ~]# ls
harbor-offline-installer-v2.4.3.tgz
(3)然后对其进行解压:
[root@localhost ~]# tar -zxvf harbor-offline-installer-v2.4.3.tgz

解压后的目录文件如下:

[root@localhost ~]# cd harbor
[root@localhost harbor]# ls
common.sh  harbor.v2.4.3.tar.gz  harbor.yml.tmpl  install.sh  LICENSE  prepare

4:配置 harbor

将配置文件模板拷贝一份,并命名为 harbor.yml,这是默认的配置文件名称:

[root@localhost harbor]# cp harbor.yml.tmpl harbor.yml

编辑 harbor.yml 文件,按照如下说明修改几处配置项:

[root@localhost harbor]# vim harbor.yml
  • 将修改为当前所在节点的 ip
hostname: 192.168.10.106
  • 登录界面的密码
harbor_admin_password: Harbor12345
  • 将 https 相关的配置给注释掉,这里为了简单只使用 http,而且也可以在 nginx 那一层去做 https
# https related config
#https:
  # https port for harbor, default is 443
  #port: 443
  # The path of cert and key files for nginx
  #certificate: /your/certificate/path
  #private_key: /your/private/key/path

注意:
注释掉 https 相关的行

6:运行 Harbor 的安装脚本

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

7:安装完成,使用浏览器访问 Harbor,正常情况下应能进入登录界面:

默认用户名为 admin,密码则为配置文件中定义的密码(默认为 Harbor12345 )。

在此处创建一个帐号 zhangsan,密码为 Aptech1!
创建一个项目,名称为 kubernetes

三:Harbor 客户端应用

1:所有的 docker 主机设置 daemon.json 文件

回到命令行上测试一下 push 和 pull。由于我们自己搭建的私有仓库默认是不受 Docker 信任的,所以需要先在配置文件中增加如下配置项让 Docker 信任该 registry:

[root@localhost ~]# vim /etc/docker/daemon.json
{
  "insecure-registries": ["192.168.10.106"]
}
[root@ml ~]# systemctl daemon-reload
[root@ml ~]# systemctl restart docker

2:找一个 docker 主机,登录到我们的 Harbor 仓库

[root@localhost ~]# docker login 192.168.10.106
Username: zhangsan
Password:
Login Succeeded

3:然后尝试使用命令行 push 一个镜像到 Harbor 上

[root@localhost ~]# docker pull cirros
[root@localhost ~]# docker tag cirros 192.168.10.106/kubernetes/cirros:v1
[root@localhost ~]# docker push 192.168.10.106/kubernetes/cirros:v1

4:测试 pull

到另一台机器上用同样方式配置 daemon.json 并 docker login 到 Harbor,然后使用 docker pull 从 Harbor 上拉取镜像:

[root@localhost ~]# docker pull 192.168.10.106/kubernetes/cirros:v1
1.13.12: Pulling from kubernetes/nginx
f2a67a3979c4: Pull complete
3c09c23e92d9: Pull complete
4a9999b86366: Pull complete
Digest: sha256:e4f647a4a75c510f40b37b6b7dc2516241ffa8bde5a442bde3d372c9519c84d99
Status: Downloaded newer image for 192.168.243.138/kubernetes/nginx:1.13.12
192.168.243.138/kubernetes/nginx:1.13.12

5:退出 harbor

[root@localhost ~]# docker logout 192.168.10.106

网站公告

今日签到

点亮在社区的每一天
去签到