Docker的网络模式
|-------------|--------------|-----------------------------------------------------------------------------|
| 网络模式 | 参数 | 说明 |
| host模式 | --net=host | 容器和宿主机共享 Network namespace |
| container模式 | --net={id} | 容器和另外一个容器共享 Network namespace。 kubernetes 中的pod就是多个容器共享一个 Network namespace |
| none模式 | --net=none | 容器有独立的Network namespace,但并没有对其进行任何网络设置,如分配 veth pair 和网桥连接,配置IP等 |
| bridge模式 | --net=bridge | 默认为该模式,通过 -p 指定端口映射 |
查看当前网络
docker network ls
创建网络
docker network create -d bridge my-net
#my-net 为名字
# bridge 为类型
使用bridge进行网络之间的通信
1.创建一个容器
docker run -itd --rm --name busybox1 --network my-net busybox sh -c 'while true;do echo hello;done'
2.在启动一个容器,加到同一个网络里
docker run -itd --rm --name busybox2 --network my-net busybox sh -c 'while true;do echo hello;done'
docker run -it --rm --name busybox2 --network my-net busybox sh
可以通信
host模式
3.启动一个docker容器与宿主机通信
docker run -tid --net=host --name docker_host1 busybox
docker exec -it docker_host1 sh
在使用ifconfig命令查看网卡,即可看到宿主机的网卡配置
C ontainer模式
docker run -tid --name host1 busybox
# 创建host2容器共享host1容器的网络
docker run -itd --net=container:host1 --name host2 busybox
# 查看host2容器的网络,确认和host1容器的网络一致
None模式
docker run -itd --net=none --name none01 busybox sh
docker exec -it none01 sh
#在使用ifconfig命令,查看不到网卡信息
Docker重启策略
Docker容器的重启策略如下:
no,默认策略,在容器退出时不重启容器
on-failure,在容器非正常退出时(退出状态非0),才会重启容器
on-failure:3,指定启动的次数,在容器非正常退出时重启容器,最多重启3次
always,在容器退出时总是重启容器
unless-stopped,在容器退出时总是重启容器,但是不考虑在Docker守护进程启动时就已经停止了的容器
Docker容器的常见退出状态码
|-----|--------------------|
| 状态码 | 说明 |
| 0 | 正常退出 |
| 125 | Docker守护进程本身错误 |
| 126 | 容器启动后,要执行的默认命令无法调用 |
| 127 | 容器启动后,要执行的默认命令不存在 |
| 其他 | 容器启动后正常执行的命令返回的状态码 |
Docker C ompose工具
1.Docker C ompose
1.安装
上传文件(docker-compose,lnmp_fenli.tar.gz)
chmod +x docker-compose
mv docker-compose /usr/bin/
docker-compose -v
tar zxf lnmp_fenli.tar.gz
cd lnmp
启动docker Compose
修改nginx的yum源
cd nginx/
vi Dockerfile
# 基础镜像
FROM centos:7.6.1810
# 配置nginx的yum源
RUN curl -o /etc/yum.repos.d/CentOS-Base.repo https://mirrors.aliyun.com/repo/Centos-7.repo
RUN curl -o /etc/yum.repos.d/epel.repo https://mirrors.aliyun.com/repo/epel-7.repo
RUN yum -y install nginx
# 初始化RPM数据库并安装nginx
ADD nginx.conf /etc/nginx/
CMD ["nginx","-g","daemon off;"]
修改php的yum源
cd ../
cd php/
vi Doecker
FROM centos:7.6.1810
RUN curl -o /etc/yum.repos.d/CentOS-Base.repo https://mirrors.aliyun.com/repo/Centos-7.repo
RUN yum -y install php php-fpm php-mysql && \
rm -rf /etc/php-fpm.d/www.conf && \
mkdir /data
ADD www.conf /etc/php-fpm.d/
ADD index.php /data/
EXPOSE 9000
CMD ["/usr/sbin/php-fpm"]
启动
cd ../
#前台启动
#docker-compose up
#后台启动
docker-compose up -d
常规使用方式
#重新构建运行
docker-compose up --build -d
#关闭指定容器 docker-compose stop <容器名称>
docker-compose stop nginx
#关闭所有
docker-compose stop
#启动指定容器 docker-compose start <容器名称>
docker-compose start nginx
# 全部启动
docker-compose start
#重启启动指定容器 docker-compose restart <容器名称>
docker-compose restart nginx
#全部重启
docker-compose restart
#删除所有
docker-compose down
Harbor私有仓库
Harbor
Harbor 是 VMware 公司开源的企业级 Docker Registry 项目,其目标是帮助用户迅速搭建一个企业级的 Docker Registry 服务。它以 Docker 公司开源的 Registry 为基础,提供了管理 UI、基于角色的访问控制(Role Based AccessControl)、AD/LDAP 集成、以及审计日志(Auditlogging) 等企业用户需求的功能。通过添加一些企业必需的功能特性,例如安全、标识和管理等,扩展了开源 Docker Distribution。作为一个企业级私有 Registry 服务器, Harbor提供了更好的性能和安全,以提升用户使用 Registry 构建和运行环境传输镜像的效率
优势
**基于角色控制:**用户和仓库都是基于项目进行组织的,而用户在项目中可以拥有不 同的权限。
**基于镜像的复制策略:**镜像可以在多个 Harbor 实例之间进行复制(同步),适用于负载平衡、高可用性、多数据中心、混合和多云场景。
**支持 LDAP/AD:**Harbor 与现有的企业 LDAP/AD 集成,用于用户认证和管理。
**删除图像和收集垃圾:**镜像可以被删除,也可以回收镜像占用的空间。
**图形 UI:**用户可以轻松浏览、搜索镜像仓库以及对项目进行管理。
**审计:**对存储库的所有操作都进行记录。
**RESTful API:**用于大多数管理操作的 RESTful API,易于与外部系统集成。
构成
poxy:Harbor 的 Registry、UI、Token 等服务通过一个前置的反向代理统一接收浏览器和 Docker 客户端的请求,并将请求转发给后端不同的服务
Registry:负责储存 Docker 镜像,并处理 Docker push/pull 命令。由于要对用户进行访问控制,即 不同用户对 Docker image 有不同的读写权限,Registry 会指向一个 Token 服务,强制用户的 每次 Docker pull/push 请求都要携带一个合法的 Token,Registry 会通过公钥对 Token 进行解 密验证。
Core service:
这是 Harbor 的核心功能,主要提供以下服务:
**UI(Harbor-ui):**提供图形化界面,帮助用户管理 Registry 上的镜像(image), 并对 用户进行授权。
**Webhook:**为 了 及 时 获 取 Registry 上 image 状 态 变 化 的 情 况 , 在 Registry 上 配 置 Webhook, 把状态变化传递给 UI 模块。
**Token 服务:**负责根据用户权限给每个 Docker push/pull 命令签发 Token。Docker 客 户端向 Registry 服务发起的请求,如果不包含 Token,会被重定向,获得 Token 后再 重新向 Registry 进行请求
database:为 coreservices 提供数据库服务,负责储存用户权限、审计日志、Docker image 分组信 息等数据
Log collector:为了帮助监控 Harbor 运行,负责收集其他组件的log,供日后进行分析
部署Harbor私有仓库
|----------------|-------------|------------|----------------|
| 操作系统 | 主机名 | 配置 | IP |
| CentOS7.3.1611 | harbor | 2C4G | 192.168.27.152 |
| CentOS7.3.1611 | client | 2C4G | 192.168.27.153 |
1.基础环境
关闭防火墙
|------------------------------------------------------|
| systemctl stop firewalld systemctl disable firewalld |
关闭selinux
|-------------------------------------------------------------------------------|
| setenforce 0 sed -i "s/.*SELINUX=.*/SELINUX=disabled/g" /etc/selinux/config |
2.部署安装
1.上传
3.编译配置文件
cd /usr/local/harbor/
cp harbor.yml.tmpl harbor.yml
vi harbor.yml
4.执行安装
./prepare
./install.sh
5.在开启一台终端安装docker充当客户端
#上传包docker-ce-24.0.7.rpm.tar.gz
tar zxf docker-ce-24.0.7.rpm.tar.gz
cd docker-ce-24.0.7.rpm
yum -y localinstall *
6.在浏览器搜索配置harbor机器的IP,进行使用
1.创建项目
在第二台机器
systemctl start docker
#下载个镜像,进行配送
docker pull busybox
#编写个文件
vi /etc/docker/daemon.json
#编写配置
{
"registry-mirrors": ["https://r9xxm8z8.mirror.aliyuncs.com"],
"insecure-registries":["192.168.27.152"]
}
启用配置
systemctl daemon-reload
systemctl restart docker
测试连接镜像仓库
docker login -uadmin -pHarbor12345 http://192.168.27.152
上传镜像
docker tag busybox:latest 192.168.27.152/kgc/busybox:test01
docker push 192.168.27.152/kgc/busybox:test01
在浏览器刷新
下载镜像
点击即可自动获取下载的镜像的命令