【对外发布服务】

 

SourceURL:file:///home/student/Desktop/容器技术.doc

对外发布服务

端口绑定

  • docker run -itd -p 宿主机端口:容器端口 镜像:标签

# 端口绑定

[root@docker ~]# docker run -itd --rm --name web -p 80:80 myos:nginx

# 绑定后,直接访问宿主机的 IP 地址即可

[root@docker ~]# curl http://192.168.88.31

Nginx is running !

# 一个端口只能绑定唯一容器

[root@docker ~]# docker run -itd --rm -p 80:80 myos:httpd

Bind for 0.0.0.0:80 failed: port is already allocated.

# 使用不同端口绑定

[root@docker ~]# docker run -itd --rm -p 8080:80 myos:httpd

3c22b1d9c7484c03648d9c64fe073953fb9460015b6f2a

# 绑定后,访问验证

[root@docker ~]# curl http://192.168.88.31:8080

Welcome to The Apache.

 

            容器存储卷

  • docker run -itd -v 宿主机对象:容器内对象 镜像:标签
数据卷目录

# 创建卷目录,并添加测试页面

[root@docker ~]# mkdir /var/webroot

[root@docker ~]# echo "hello world" >/var/webroot/index.html

# 使用卷映射数据目录

[root@docker ~]# docker rm -f web

[root@docker ~]# docker run -itd --rm --name web -p 80:80 \

                   -v /var/webroot:/usr/local/nginx/html myos:nginx

[root@docker ~]# curl http://192.168.88.31/

hello world

# 修改数据卷内容可以直接在容器内体现

[root@server s4]# rsync -av public/info.php 192.168.88.31:/var/webroot/

[root@server s4]# curl http://192.168.88.31/info.php

<?PHP

修改配置文件

# 获取配置文件

[root@docker ~]# docker cp web:/usr/local/nginx/conf ./conf

Successfully copied 45.1kB to /root/conf

# 编辑配置文件,添加 php 解析配置

[root@docker ~]# vim conf/nginx.conf

        location ~ \.php$ {

            root           html;

            fastcgi_pass   127.0.0.1:9000;

            fastcgi_index  index.php;

            include        fastcgi.conf;

        }

# 使用卷映射配置文件,重建 nginx 容器

[root@docker ~]# docker rm -f web

[root@docker ~]# docker run -itd --rm --name web -p 80:80 \

                   -v /root/conf:/usr/local/nginx/conf \

                   -v /var/webroot:/usr/local/nginx/html myos:nginx

# 访问验证

[root@docker ~]# curl http://192.168.88.31/info.php

容器网络通信

共享名称空间
# 使用 nginx 的网络名称空间

[root@docker ~]# docker run -itd --rm --name php --network=container:web myos:php-fpm

[root@docker ~]# curl http://192.168.88.31/info.php

[root@docker ~]# docker exec -it web ss -ltun

# 为 php 增加数据卷

[root@docker ~]# docker rm -f php

[root@docker ~]# docker run -itd --rm --name php --network=container:web \

                   -v /var/webroot:/usr/local/nginx/html myos:php-fpm

[root@docker ~]# curl http://192.168.88.31/info.php

服务编排与治理

项目文件

# 创建项目文件

[root@docker ~]# vim docker-compose.yaml

name: myweb

version: "3"

services:

  websvc:

    container_name: nginx

    image: myos:nginx

项目管理命令

指令

说明

up

创建项目并启动容器

ls

列出可以管理的项目

images

列出项目使用的镜像

ps

显示项目中容器的状态

logs

查看下项目中容器的日志

start/stop/restart

启动项目/停止项目/重启项目

down

删除项目容器及网络

容器目管理

# 创建项目,并启动

[root@docker ~]# docker compose -f docker-compose.yaml up -d

# 查看项目

[root@docker ~]# docker compose ls -a

# 查看项目中的容器状态

[root@docker ~]# docker compose -p myweb ps

# 查看项目使用的镜像

[root@docker ~]# docker compose -p myweb images

#  查看项目中容器的日志

[root@docker ~]# docker compose -p myweb logs

# 启动、停止、重启项目

[root@docker ~]# docker compose -p myweb stop

[root@docker ~]# docker compose -p myweb start

[root@docker ~]# docker compose -p myweb restart

# 删除项目

[root@docker ~]# docker compose -p myweb down

 

compose 语法

指令

说明

container_name

指定容器名称

image

指定为镜像名称或镜像 ID

ports

暴露端口信息

volumes

数据卷,支持 [volume、bind、tmpfs、npipe]

network_mode

设置网络模式

environment

设置环境变量

restart

容器保护策略[always、no、on-failure]

command

覆盖容器启动后默认执行的命令

healthcheck

配置服务健康检测

depends_on

服务依赖关系 services_[started、healthy、completed_successfully]

容器服务编排

[root@docker ~]# vim docker-compose.yaml

name: myweb

version: "3"

services:

  websvc:

    container_name: nginx

    image: myos:nginx

    ports:

      - 80:80

    environment:

      - "TZ=Asia/Shanghai"

    volumes:

      - type: bind

        source: /root/conf/nginx.conf

        target: /usr/local/nginx/conf/nginx.conf

      - type: bind

        source: /var/webroot

        target: /usr/local/nginx/html

  phpsvc:

    container_name: php

    image: myos:php-fpm

    restart: always

    network_mode: "service:websvc"

    volumes:

      - type: bind

        source: /var/webroot

        target: /usr/local/nginx/html

 

验证项目

# 创建,并启动项目

[root@docker ~]# docker rm -f $(docker ps -aq)

[root@docker ~]# docker compose -f docker-compose.yaml up -d

# 查看项目

[root@docker ~]# docker compose ls -a

# 查看容器状态,验证服务

[root@docker ~]# docker compose -p myweb ps

# 访问 php 页面验证

[root@docker ~]# curl -s http://127.0.0.1/info.php

嵌入式脚本

# 拓展提高

[root@docker ~]# vim mysvc.yaml

name: mysvc

version: "3"

services:

  initsvc:

    container_name: init

    image: myos:8.5

    command:

      - sh

      - -c

      - |

        for i in {1..9}

        do

            sleep 1

            echo "${HOSTNAME} && $${HOSTNAME}"

        done

  svc1:

    container_name: myphp

    image: myos:php-fpm

    healthcheck:                 # 定义健康检查

      test:                      # 健康检查指令

        - CMD-SHELL              # CMD 定义单一命令,CMD-SHELL 嵌入脚本

        - sh

        - -c

        - |

          ID=$${RANDOM}

          sleep 5

          exit $$((ID%2))

      interval: 30s              # 健康检查的间隔时间

      timeout: 10s               # 健康检查的超时时间

      retries: 3                 # 健康检查的重试次数

      start_period: 10s          # 容器启动后延时检查时间

    depends_on:

      initsvc:

        condition: service_completed_successfully

  svc2:

    container_name: myweb

    image: myos:httpd

    depends_on:

      svc1:

        condition: service_healthy

[root@docker ~]# docker compose -f mysvc.yaml up -d

[root@docker ~]# docker compose -p mysvc ls -a

[root@docker ~]# docker compose -p mysvc logs

harbor 仓库

主机名

ip地址

最低配置

harbor

192.168.88.240

2CPU,4G内存

安装部署

部署 docker

# 配置修改主机名

[root@pubserver ~]# hostnamectl set-hostname harbor

[root@pubserver ~]# vim /etc/hosts

192.168.88.240  harbor

# 卸载 Podman 和 docker-distribution

[root@pubserver ~]# dnf remove -y podman docker-distribution

[root@pubserver ~]# reboot

 重新登陆

[root@harbor ~]# vim /etc/yum.repos.d/docker.repo

[Docker]

name=Rocky Linux $releasever - Docker Packages

baseurl="ftp://192.168.88.240/rpms"

enabled=1

gpgcheck=0

# 安装部署 docker

[root@harbor ~]# dnf install -y docker-ce

[root@harbor ~]# systemctl enable --now docker

  • 拷贝软件包到 harbor 主机
    [root@server s4]# rsync -av public/harbor-* 192.168.88.240:/root/
创建证书

# 导入 harbor 项目镜像

[root@harbor ~]# tar -zxf harbor-v2.9.2.tgz -C /usr/local/

[root@harbor ~]# cd /usr/local/harbor

[root@harbor harbor]# docker load -i harbor.v2.9.2.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 3652 -key tls/cert.key -out tls/cert.crt \

                                  -subj "/C=CN/ST=BJ/L=BJ/O=Tedu/OU=NSD/CN=harbor" \

                                  -addext "subjectAltName = IP:192.168.88.240"

启动项目

# 修改配置文件

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

[root@harbor harbor]# vim harbor.yml

05:    hostname: 192.168.88.240

08:    # http:

10:      # port: 80

17:    certificate: /usr/local/harbor/tls/cert.crt

18:    private_key: /usr/local/harbor/tls/cert.key

36:    harbor_admin_password: <登录密码>

# 预安装环境检查,生成项目文件

[root@harbor harbor]# /usr/local/harbor/prepare

# 创建并启动项目

[root@harbor harbor]# docker compose -f docker-compose.yml up -d

# 添加开机自启动

[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 ~]# docker compose ls -a

NAME                STATUS              CONFIG FILES

harbor              running(9)          /usr/local/harbor/docker-compose.yml

# 查看容器状态

[root@harbor ~]# docker compose -p harbor ps

 

  • 通过浏览器配置管理 harbor 服务

harbor 管理

容器管理命令

说明

docker login

登录私有镜像仓库

docker logout

退出登录

登录私有仓库

# 添加主机配置

[root@docker ~]# vim /etc/hosts

192.168.88.240  harbor

# 添加私有仓库配置

[root@docker ~]# vim /etc/docker/daemon.json

{

    "registry-mirrors": ["https://harbor:443", "其他镜像仓库"],

    "insecure-registries":["harbor:443", "其他镜像仓库"]

}

[root@docker ~]# systemctl restart docker

 

# 登录 harbor 仓库

[root@docker ~]# docker login harbor:443

Username: <登录用户>

Password: <登录密码>

# 认证信息记录文件

[root@docker ~]# cat /root/.docker/config.json

{

    "auths": { ... ... }

}

# 退出登录

[root@docker ~]# docker logout harbor:443

Removing login credentials for harbor:443

上传镜像

 

# 设置标签

[root@docker ~]# docker tag myos:httpd harbor:443/private/httpd:latest

# 没有登录上传失败

[root@docker ~]# docker push harbor:443/private/httpd:latest

# 登录成功后才可以上传

[root@docker ~]# docker login harbor:443

Username: <登录用户>

Password: <登录密码>

# 上传成功

[root@docker ~]# docker push harbor:443/private/httpd:latest

# 上传镜像到 library 项目

[root@docker ~]# docker tag myos:latest harbor:443/library/myos:latest

# 没有权限上传失败

[root@docker ~]# docker push harbor:443/library/myos:latest

# 赋权后重新上传镜像

[root@docker ~]# docker push harbor:443/library/myos:latest

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值