云端技术驾驭DAY08——部署容器服务、Compose微服务管理、harbor仓库部署及管理

往期回顾:
云端技术驾驭DAY01——云计算底层技术奥秘、云服务器磁盘技术、虚拟化管理、公有云概述
云端技术驾驭DAY02——华为云管理、云主机管理、跳板机配置、制作私有镜像模板
云端技术驾驭DAY03——云主机网站部署、web集群部署、Elasticsearch安装
云端技术驾驭DAY04——Logstash安装部署及插件模块
云端技术驾驭DAY06——容器技术概述、镜像与容器管理、定制简单镜像、容器内安装部署服务
云端技术驾驭DAY07——Dockerfile详解、容器镜像制作、私有仓库

部署容器服务

对外发布服务

端口映射
  • 容器化带来的问题之(一)
    – 新创建容器的IP地址是随机的
    – 容器在重启后每次IP都会发生变化
    – 容器服务只有宿主机才能访问
  • 如何才能使用容器对外提供稳定的服务?
    – 容器端口可以与宿主机的端口进行映射绑定
    – 从而把宿主机变成对应的服务,不用关心容器的IP地址
    – 每个端口都只能和一个容器绑定
  • 端口映射语法:
    docker run -itd -p 宿主机端口:容器端口 镜像名称:标签
[root@docker-0001 ~]# docker run -itd --name web -p 80:80 myos:httpd     // 宿主机绑定apache服务容器
d8fb6b299c59d507a409ff6f6e5e13c03181111e17a728e6aba6f0a783ec3050
[root@docker-0001 ~]# curl http://192.168.1.31
Welcome to The Apache.

容器卷

容器卷概述
  • 容器化带来的问题之(二)
    – Docker容器不适合保存任何数据
    – 重要数据在容器内不方便管理容器丢失
    – 修改多个容器中的数据非常困难
    – 多容器之间有数据共享、同步的需求
    – 数据文件与配置文件频繁更改
  • 以上问题都可以使用容器卷来解决
  • Docker可以映射宿主机文件或目录到容器中
    – 目标对象不存在就会自动创建
    – 多个容器可以映射同一个目标对象来达到数据共享的目的
  • 启动容器时,使用-v映射参数(可有多个)
    docker run -itd -v 宿主机对象:容器内对象 镜像名称:标签
映射卷
  • 目标:让httpd容器和nginx容器共享网站数据目录
  • 准备测试页面
[root@docker-0001 ~]# mkdir /var/webroot
[root@docker-0001 ~]# echo "hello world" > /var/webroot/index.html
[root@docker-0001 ~]# cp info.php /var/webroot
  • 创建容器,并映射数据卷
[root@docker-0001 ~]# docker run -itd --rm --name mynginx -v /var/webroot:/var/www/html myos:nginx 
06a5d36e68729dd160faa4340faa8aa1560db6e3883709cd1b1b7a2322c623b3
[root@docker-0001 ~]# docker run -itd --rm --name myhttpd -v /var/webroot:/var/www/html myos:httpd 
dd5231c7747b0ca6d8e0894412487bf3be80cd57c2204f2c8ac30319b896e832
  • 访问测试
[root@docker-0001 ~]# docker inspect mynginx | grep IPAddress
            "SecondaryIPAddresses": null,
            "IPAddress": "172.17.0.2",
                    "IPAddress": "172.17.0.2",
[root@docker-0001 ~]# curl 172.17.0.2
Nginx is running !
[root@docker-0001 ~]# docker inspect myhttpd | grep IPAddress
            "SecondaryIPAddresses": null,
            "IPAddress": "172.17.0.3",
                    "IPAddress": "172.17.0.3",
[root@docker-0001 ~]# curl http://172.17.0.3
hello world
  • 使用共享卷修改配置文件
[root@docker-0001 ~]# mkdir /var/webconf     // 获取配置文件
[root@docker-0001 ~]# docker cp mynginx:/usr/local/nginx/conf/nginx.conf /var/webconf
[root@docker-0001 ~]# vim /var/webconf/nginx.conf     // 编辑配置文件添加php解析
 61         location ~ \.php$ {
 62             root           html;
 63             fastcgi_pass   127.0.0.1:9000;
 64             fastcgi_index  index.php;
 65             include        fastcgi.conf;
 66         }
  • 使用卷映射配置文件,重建nginx容器
[root@docker-0001 ~]# docker rm -f mynginx
mynginx
[root@docker-0001 ~]# docker run -itd --rm --name mynginx -p 80:80 -v /var/webconf/nginx.conf:/usr/local/nginx/conf/nginx.conf -v /var/webroot:/usr/local/nginx/html myos:nginx 
1f5747c9a99386fafd6ace45c25329618e3596c490d9f5e24186a56d3dee5b88

容器网络通信

容器间通讯
  • docker的网络通信模式
    – bridge模式(默认)
    – host模式,与宿主机共享网络
    – none模式,无网络
    container模式,共享其他容器的网络命名空间
    – 自定义网络,自由创建桥接网络或者overlay网络
共享网络命名空间
  • 语法格式
    - 参数 --network=container:容器名称|ID
  • 创建php容器,使用nginx的网络名称空间
[root@docker-0001 ~]# docker run -itd --network=container:mynginx -v /var/webroot:/usr/local/nginx/html --rm --name myphp myos:php-fpm
30b49c6eebc6cf0b12088e758c86bd86b9dccc7050915254fe26c5eba9d4ec87
  • 验证配置
[root@docker-0001 ~]# docker exec -it mynginx ss -ntulp
Netid      State       Recv-Q       Send-Q             Local Address:Port             Peer Address:Port      Process      
tcp        LISTEN      0            128                    127.0.0.1:9000                  0.0.0.0:*                      
tcp        LISTEN      0            128                      0.0.0.0:80                    0.0.0.0:*          users:(("nginx",pid=1,fd=6))
[root@docker-0001 ~]# curl http://127.0.0.1/info.php     // 访问nginx容器的php页面,解析成功
<pre>
Array
(
    [REMOTE_ADDR] => 172.17.0.1
    [REQUEST_METHOD] => GET
    [HTTP_USER_AGENT] => curl/7.61.1
    [REQUEST_URI] => /info.php
)
php_host:       dd5231c7747b
1229

服务编排与治理

微服务管理

微服务概述
  • 微服务是什么?
    – 微服务并不是一种技术,而是架构思想、它以容器技术为载体,演进出的一种以软件运行环境、产品、研发、运营为一体全新模式。站在Docker的角度,软件就是容器的组合,而容器又是服务的最佳载体,一台计算机同时运行多个容器,从而就能很轻松地实现复杂的架构
  • 微服务架构的优点:
    – 松耦合高内聚、高可扩展、出色的弹性、易于部署和访问
  • 容器编排服务
    – 在微服务架构中每个微服务一般都会包含多个容器实例
    – 为了解决编排部署的问题,docker公司推出了docker compose工具
    – Compose是一个用于定义和运行多容器的应用的工具
    – 使用Compose。可以在一个文件中配置多个容器服务,然后使用一个简单的命令就可以轻松、高效地管理配置中引用的所有容器服务
微服务治理
  • 安装部署
[root@docker-0001 ~]# dnf -y install docker-compose-plugin     // 安装compose组建
[root@docker-0001 ~]# vim docker-compose.yaml     // 创建项目
name: websvc
version: "3"
services:
  websvc:
    container_name: nginx
    image: myos:nginx
  • 常用指令
指令说明
up创建项目并启动容器
down删除项目容器及网络
ls列出可以管理的项目
start/stop/restart启动项目/停止项目/重启项目
images列出项目使用的镜像
ps显示项目中容器的状态
logs查看下项目中容器的日志
  • 创建项目
[root@docker-0001 ~]# docker compose -f docker-compose.yaml up -d     // -f指定配置文件 -d后台运行
[+] Running 2/2
 ⠿ Network websvc_default  Created                                                                                                0.1s
 ⠿ Container nginx         Started                                                                                                0.3s
  • 查看项目
[root@docker-0001 ~]# docker compose ls
NAME                STATUS              CONFIG FILES
websvc              running(1)          /root/docker-compose.yaml
  • 查看项目使用的镜像
[root@docker-0001 ~]# docker compose -p websvc images
Container           Repository          Tag                 Image Id            Size
nginx               myos                nginx               10dc658da2fe        274MB
  • 查看项目中的容器状态
[root@docker-0001 ~]# docker compose -p websvc ps
NAME                COMMAND                  SERVICE             STATUS              PORTS
nginx               "nginx -g 'daemon of…"   websvc              running             80/tcp
  • 启动、停止、重启项目
[root@docker-0001 ~]# docker compose -p websvc stop
[+] Running 1/0
 ⠿ Container nginx  Stopped                                                                                                       0.1s
[root@docker-0001 ~]# docker compose -p websvc start
[+] Running 1/1
 ⠿ Container nginx  Started                                                                                                       0.2s
[root@docker-0001 ~]# docker compose -p websvc restart
[+] Running 1/1
 ⠿ Container nginx  Started                                                                                                       0.3s
  • 查看项目中容器的日志
[root@docker-0001 ~]# docker inspect nginx | grep -i ipaddress
            "SecondaryIPAddresses": null,
            "IPAddress": "",
                    "IPAddress": "172.18.0.2",
[root@docker-0001 ~]# curl 172.18.0.2/info.php
<html>
<head><title>404 Not Found</title></head>
<body>
<center><h1>404 Not Found</h1></center>
<hr><center>nginx/1.22.1</center>
</body>
</html>
[root@docker-0001 ~]# docker compose -p websvc logs
nginx  | 2024/02/20 02:50:55 [error] 8#0: *1 open() "/usr/local/nginx/html/info.php" failed (2: No such file or directory), client: 172.18.0.1, server: localhost, request: "GET /info.php HTTP/1.1", host: "172.18.0.2"
  • 删除项目
[root@docker-0001 ~]# docker compose -p websvc down
[+] Running 2/2
 ⠿ Container nginx         Removed                                                                                                0.1s
 ⠿ Network websvc_default  Removed                                                                                                0.0s 
微服务编排
  • Compose概述
    – 在Compose中有两个核心概念,分别是服务和项目
    – 服务:一个应用的容器,实际上可以包括若干运行相同镜像的容器实例
    – 项目:由一组关联的应用容器组成的一个完整业务单元,在docker-compose.yaml文件中定义
  • compose语法
指令说明
networks配置容器连接的网络
container_name指定容器名称
depends_on解决容器的依赖、启动先后的问题
command覆盖容器启动后默认执行的命令
environment设置环境变量
image指定为镜像名称或镜像 ID
network_mode设置网络模式
restart容器保护策略[always、no、on-failure]
ports暴露端口信息
volumes数据卷,支持 [volume、bind、tmpfs、npipe]
  • 编写docker-compose.yaml文件
[root@docker-0001 ~]# vim docker-compose.yaml
name: websvc
version: "3"
services:
  nginxsvc:
    container_name: nginx
    image: myos:nginx
    network_mode: bridge
    restart: always
    ports:
      - 80:80
    volumes:
      - type: bind
        source: /var/webroot
        target: /usr/local/nginx/html
      - type: bind
        source: /var/webconf/nginx.conf
        target: /usr/local/nginx/conf/nginx.conf
    environment:
      - "TZ=Asia/Shanghai"     // 设置附加变量:时区
  php-fpm:
    container_name: php
    image: myos:php-fpm
    network_mode: "container:nginx"     // 设置使用 nginx 的网络名称空间
    restart: always
    volumes:
      - type: bind
        source: /var/webroot
        target: /usr/local/nginx/html
    depends_on:
      - nginxsvc     // 解决容器启动的先后顺序
  • 验证项目
[root@docker-0001 ~]# docker compose -f docker-compose.yaml up -d
[+] Running 2/2
 ⠿ Container nginx  Started                                                                                                                               0.2s
 ⠿ Container php    Started                                                                                                                               0.3s
[root@docker-0001 ~]# docker compose ls
NAME                STATUS              CONFIG FILES
websvc              running(2)          /root/docker-compose.yaml
[root@docker-0001 ~]# docker compose -p websvc ps 
NAME                COMMAND                  SERVICE             STATUS              PORTS
nginx               "nginx -g 'daemon of…"   nginxsvc            running             0.0.0.0:80->80/tcp, :::80->80/tcp
php                 "php-fpm --nodaemoni…"   php-fpm             running             
[root@docker-0001 ~]# curl -s http://127.0.0.1/info.php     // 访问php页面验证
<pre>
Array
(
    [REMOTE_ADDR] => 172.17.0.1
    [REQUEST_METHOD] => GET
    [HTTP_USER_AGENT] => curl/7.61.1
    [REQUEST_URI] => /info.php
)
php_host:       e35f686e6b27
1229

私有镜像仓库

harbor仓库

  • harbor概述
    – Habor是在Registry上进行了相应的企业级扩展,这些特性包括:web界面、登陆、搜索等功能,区分公有、私有镜像,以及基于角色的访问控制,继承日志审计、支持水平扩展等功能
    – 部署harbor环境相当繁琐,涉及到web服务器、数据库服务器、程序代码、docker私有镜像仓库等9个应用
安装部署
  • Harbor安装部署概述
    – 官方为了简化安装部署的步骤和流程,采用了微服务方式对项目进行了管理,所有应用官方都以Docker镜像的方式发布,项目采用compose方式管理
  • 准备云主机
主机名IP配置
harbor192.168.1.302vCPUs 4GiB内存
  • 安装部署Docker环境
[root@harbor ~]# echo "192.168.1.30 harbor" >> /etc/hosts
[root@harbor ~]# dnf -y install docker-ce docker-compose-plugin
[root@harbor ~]# systemctl enable docker --now
  • 提前准备harbor镜像,导入到harbor主机
[root@ecs-proxy ~]# rsync -av public/harbor-v2.7.0.tgz 192.168.1.30:
[root@harbor ~]# tar -zxf harbor-v2.7.0.tgz -C /usr/local/
[root@harbor ~]# tar -zxf harbor-v2.7.0.tgz -C /usr/local/
[root@harbor ~]# cd /usr/local/harbor/
[root@harbor harbor]# docker load -i harbor.v2.7.0.tar.gz
  • 创建https证书
[root@harbor harbor]# mkdir tls
[root@harbor harbor]# openssl genrsa -out tls/cert.key 2048
[root@harbor harbor]# openssl req -new -x509 -days 3650 -key tls/cert.key -out tls/cert.crt -subj "/C=CN/ST=BJ/L=BJ/O=T/OU=N/CN=harbor"
  • 修改配置文件
[root@harbor harbor]# cp harbor.yml.tmpl harbor.yml
[root@harbor harbor]# vim harbor.yml
  5 hostname: harbor
  8 #http:
 10   #  port: 80
 17:    certificate: /usr/local/harbor/tls/cert.crt
 18:    private_key: /usr/local/harbor/tls/cert.key
 34:    harbor_admin_password: admin123
  • 预安装环境检查,生成项目文件
[root@harbor harbor]# /usr/local/harbor/prepare
  • 创建并启动项目
[root@harbor harbor]# docker compose -f docker-compose.yml up -d
[+] Running 10/10
 ⠿ Network harbor_harbor        Created                                                                                                                   0.1s
 ⠿ Container harbor-log         Started                                                                                                                   0.5s
 ⠿ Container harbor-portal      Started                                                                                                                   1.3s
 ⠿ Container redis              Started                                                                                                                   1.4s
 ⠿ Container registryctl        Started                                                                                                                   1.2s
 ⠿ Container harbor-db          Started                                                                                                                   1.3s
 ⠿ Container registry           Started                                                                                                                   1.4s
 ⠿ Container harbor-core        Started                                                                                                                   1.7s 
 ⠿ Container nginx              Started                                                                                                                   2.4s 
 ⠿ Container harbor-jobservice  Started                                                                                                                   2.3s
  • 添加开机自启动
[root@harbor harbor]# chmod 0755 /etc/rc.d/rc.local                                                                                                            
[root@harbor harbor]# echo "/usr/bin/docker compose -p harbor start" >>/etc/rc.d/rc.local
  • 查看验证项目
[root@harbor harbor]# docker compose ls
NAME                STATUS              CONFIG FILES
harbor              running(9)          /usr/local/harbor/docker-compose.yml
[root@harbor harbor]# docker compose ls
NAME                STATUS              CONFIG FILES
harbor              running(9)          /usr/local/harbor/docker-compose.yml
[root@harbor harbor]# docker compose -p harbor ps
NAME                COMMAND                  SERVICE             STATUS              PORTS
harbor-core         "/harbor/entrypoint.…"   core                running (healthy)   
harbor-db           "/docker-entrypoint.…"   postgresql          running (healthy)   
harbor-jobservice   "/harbor/entrypoint.…"   jobservice          running (healthy)   
harbor-log          "/bin/sh -c /usr/loc…"   log                 running (healthy)   127.0.0.1:1514->10514/tcp
harbor-portal       "nginx -g 'daemon of…"   portal              running (healthy)   
nginx               "nginx -g 'daemon of…"   proxy               running (healthy)   0.0.0.0:80->8080/tcp, :::80->8080/tcp, 0.0.0.0:443->8443/tcp, :::443->8443/tcp
redis               "redis-server /etc/r…"   redis               running (healthy)   
registry            "/home/harbor/entryp…"   registry            running (healthy)   
registryctl         "/home/harbor/start.…"   registryctl         running (healthy)
  • 通过ELB发布harbor服务
    在这里插入图片描述
    在这里插入图片描述
  • 浏览器访问ELB绑定的弹性公网IP
  • 输入用户名admin,密码admin123
    在这里插入图片描述
私有仓库管理
  • 创建用户
    – 用来登陆harbor,以及认证权限
    在这里插入图片描述
    填写用户信息
    在这里插入图片描述

  • 新建项目
    – 用来存储镜像的地址路径
    在这里插入图片描述
    在这里插入图片描述

  • 项目授权
    – 由于library项目管理员默认只有admin用户,如果普通用户想要上传镜像到library,则需要授权
    – 管理员登陆 --> 选择library --> 成员 --> 新建成员 --> 设置为项目管理员
    在这里插入图片描述
    在这里插入图片描述

  • Harbor管理

容器管理命令说明
docker login登录私有镜像仓库
docker logout退出登录
  • 登陆私有仓库
[root@docker-0001 ~]# echo "192.168.1.30 harbor" >> /etc/hosts
[root@docker-0001 ~]# vim /etc/docker/daemon.json
{
    "registry-mirrors": ["https://harbor:443","http://registry:5000"],
    "insecure-registries":["https://harbor:443","registry:5000"]
}
[root@docker-0001 ~]# systemctl restart docker
[root@docker-0001 ~]# docker login harbor:443
Username: haji
Password: ×××××
... ...
Login Succeeded
  • 认证信息记录文件
[root@docker-0001 ~]# cat /root/.docker/config.json 
{
        "auths": {
                "harbor:443": {
                        "auth": "aGFqaTpIYWppLjc3Nw=="
                }
        }
}
  • 上传镜像
[root@docker-0001 ~]# docker tag rockylinux:8.5 harbor:443/myimg/rockylinux:8.5     // 设置标签
[root@docker-0001 ~]# docker push harbor:443/myimg/rockylinux:8.5     // 上传镜像
  • 将镜像上传到library项目
[root@docker-0001 ~]# docker tag myos:latest harbor:443/library/myos:latest
[root@docker-0001 ~]# docker push harbor:443/library/myos:latest
The push refers to repository [harbor:443/library/myos]
1e3ea69e39a7: Pushed 
latest: digest: sha256:f396e19f1909cdedd6c39c973eac5ccb9dd07d7baee3c280e55b0c8a6b6dc41d size: 527
  • 退出登陆
[root@docker-0001 ~]# docker logout harbor:443
Removing login credentials for harbor:443
  • 29
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值