一、 docker仓库管理
1. Harbor介绍
Harbor是一个用于存储和分发Docker镜像的企业级Registry服务器,由VMware开源,其通过添加一些企业必需的功能特性,例如安全、标识和管理等,扩展了开源 Docker Distribution。作为一个企业级私有Registry服务器,Harbor 提供了更好的性能和安全。提升用户使用Registry构建和运行环境传输镜像的效率。Harbor支持安装在多个Registry节点的镜像资源复制,镜像全部保存在私有 Registry 中,确保数据和知识产权在公司内部网络中管控,另外,Harbor也提供了高级的安全特性,诸如用户管理,访问控制和活动审计等。
2. 安装Harbor
安装Harbor之前必须要安装docker-compose
- 安装docker-compose
`yum安装`
[root@localhost ~]# yum install -y epel-release.noarch
[root@localhost ~]# yum -y install docker-compose
`二进制安装`
[root@localhost ~]# cd /mnt
[root@localhost mnt]# ls
docker-compose-Linux-x86_64-1.27.4 harbor-offline-installer-v1.7.6.tgz nginx.tar
[root@localhost mnt]# cp -a docker-compose-Linux-x86_64-1.27.4 /usr/bin/docker-compose
[root@localhost mnt]# chmod +x /usr/bin/docker-compose
[root@localhost mnt]# docker-compose version
docker-compose version 1.27.4, build 40524192
docker-py version: 4.3.1
CPython version: 3.7.7
OpenSSL version: OpenSSL 1.1.0l 10 Sep 2019
- 安装Harbor
准备Harbor软件
[root@localhost mnt]# tar xf harbor-offline-installer-v1.7.6.tgz
[root@localhost mnt]# cd harbor/
[root@localhost harbor]# ls
common docker-compose.clair.yml docker-compose.yml harbor.v1.7.6.tar.gz LICENSE prepare
docker-compose.chartmuseum.yml docker-compose.notary.yml harbor.cfg install.sh open_source_license
`修改配置文件`
[root@localhost harbor]# vim harbor.cfg
8 hostname = 192.168.204.40 //主机
70 harbor_admin_password = 123456 //密码
`检测环境`
[root@localhost harbor]# ./prepare
`执行安装脚本`
[root@localhost harbor]# ./install.sh
3. web端操作
3.1 登录
浏览器访问 http://192.168.204.70
3.2 新建项目
3.3 命令行登录
- 默认是走https协议无法登录,需要修改 service 文件!
[root@node7 data]# vim /usr/lib/systemd/system/docker.service
13 ExecStart=/usr/bin/dockerd -H fd:// --containerd=/run/containerd/containerd.sock --insecure-registry 192.168.204.70
[root@node7 data]# systemctl daemon-reload
[root@node7 data]# systemctl restart docker
[root@node7 mnt]# cd harbor/
[root@node7 harbor]# ./install.sh //再重新执行一遍脚本
--insecure-registry 192.168.204.70是一个Docker命令行参数,用于指定一个不安全的Docker registry地址。当Docker客户端与这个地址进行通信时,它将不会验证服务器的TLS证书,从而允许与该registry进行通信,即使该registry的TLS证书存在问题或未被签发机构正确签发。这种设置可能会降低安全性,因为它容易受到中间人攻击等安全威胁。如果registry服务器本身被黑客攻击,黑客可能会利用这一点进行攻击,例如通过域名欺骗等方式。因此,使用这个参数需要谨慎考虑安全性问题。
- 修改配置文件后,成功登录
3.4 测试上传仓库
- 下载镜像
[root@node7 harbor]# docker pull nginx
- 打上标签
[root@node7 harbor]# docker tag 605c77e624dd 192.168.204.70/test/nginx:latest
[root@node7 harbor]# docker images
- 上传
[root@node7 harbor]# docker push 192.168.204.70/test/nginx:latest
二、单机编排之Docker Compose
1. Docker Compse介绍
docker-compose 项目是Docker官方的开源项目,负责实现对Docker 容器集群的快速编排,docker-compose 将所管理的容器分为三层,分别是 工程(project),服务(service) 以及 容器(container)。
docker-compose 是一个可以实现在单机上对容器集群编排管理的工具。
它允许用户使用 docker-compose.yml 配置模板文件来定义应用程序的配置,包括容器的数量、容器之间的依赖关系、环境变量、端口映射以及数据卷等设置。
然后,用户使用docker-compose命令根据指定配置模板文件的配置来启动和管理容器集群。
1.1 yml 语言
YAML是一种标记语言,可以很直观的展示数据序列化格式,可读性很高。类似于json数据描述语言,语法比json简单很多,关于yaml数据格式:
- YAML数据结构通过缩进来表示字段的层级
- 连续的项目通过减号来表示
- 键值对用冒号分隔
- 数组用中括号 [] 括起来
- hash 用花括号 {} 括起来
关于yaml的注意事项:
- 大小写敏感
- 通过缩进表示层级关系
- 不支持制表符 tab 键缩进,只能使用空格缩进
- 缩进的空格数目不重要,只要相同层级左对齐,通常开头缩进2个空格
- 用 # 号注释
- 符号字符后缩进1个空格,如冒号 : 、逗号 , 、横杠 -
- 如果包含特殊字符用单引号('')引起来会作为普通字符串处理,双引号(""): 特殊字符作为本身想表示的意思
docker-compose配置模板文件常用的字段:
| 指令 | 作用 | 演示 |
|---|---|---|
| build | 指定构建上下文和可选的Dockerfile用于构建镜像。 | build: context: /opt/test dockerfile: Dockerfile |
| dockerfile | 指定Dockerfile的路径。通常在build部分中使用。 | dockerfile:Dockerfile.prod |
| context | 指定构建上下文的路径,即包含Dockerfile和构建上下文的目录路径 | context:/opt/test |
| image | 指定用于服务/容器的镜像名称。 | image: myapp:latest |
| command | 覆盖由镜像指定的默认命令 | command: ["python", "app.py"] |
| container_name | 为容器指定自定义名称。 | container_name: my_container |
| deploy | 指定部署选项,如副本和放置 | deploy: replicas: 3 |
| environment | 为服务指定环境变量 | environment: - DEBUG=true |
| networks | 指定连接服务的网络 | networks: - frontend - backend |
| network_mode | 指定容器的网络模式 | network_mode: "host" |
| ports | 将容器端口映射到主机端口 | ports: - "8080:80" 先写真机再写容器 |
| volumes | 挂载主机或其他容器的卷 | volumes: - "nginx-data:/usr/local/nginx/html |
| volumes_from | 从另一个服务/容器挂载卷 | volumes_from: - data-container |
| hostname | 指定主机名 | hostname: my-container |
| sysctls | 为容器设置内核参数 | sysctls: - net.core.somaxconn=1024 |
| restart | 重启策略 | restart: always |
| depends_on | 指定该服务依赖的其他服务 | depends_on: - mysql |
Compose文件中的指令,用来编排容器的(写在文件里面的指令)
1.2 常用指令
想使用docker-compose这个命令,只能在docker-compose.yml的目录下执行(写在命令行工具里面的指令)
| 命令 | 解释 |
|---|---|
| build | 构建镜像 |
| bundle | 从当前docker compose 文件生成一个以<当前目录>为名称的json格式的Docker Bundle 备份文件 |
| config -q | 查看当前配置,没有错误不输出任何信息 |
| create | 创建服务,较少使用 |
| down | 停止和删除所有容器、网络、镜像和卷 |
| events | 从容器接收实时事件,可以指定json 日志格式,较少使用 |
| exec | 进入指定容器进行操作 |
| help | 显示帮助细信息 |
| images | 显示镜像信息,较少使用 |
| kill | 强制终止运行中的容器 |
| logs | 查看容器的日志 |
| pause | 暂停服务 |
| port | 查看端口 |
| ps | 列出容器,较少使用 |
| pull | 重新拉取镜像,镜像发生变化后,需要重新拉取镜像,较少使用 |
| push | 上传镜像 |
| restart | 重启服务,较少使用 |
| rm | 删除已经停止的服务 |
| run | 一次性运行容器 |
| scale | 设置指定服务运行的容器个数 |
| start | 启动服务 ,较少使用 |
| stop | 停止服务,较少使用 |
| top | 显示容器运行状态 |
| unpause | 取消暂定 |
| up | 创建并启动容器 ,较少使用 |
docker-compose up 调用docker-compose.yml 文件来 启动 创建容器
2. 安装Docker Compose
Docker Compose 是 Docker 的独立产品,因此需要安装 Docker 之后再单独安装 Docker Compose
- 二进制安装
[root@node7 ~]# cd /opt //上传安装包
[root@node7 opt]# ls
containerd docker-compose-Linux-x86_64-1.27.4 rh
[root@node7 opt]# chmod +x docker-compose-Linux-x86_64-1.27.4
[root@node7 opt]# cp -a docker-compose-Linux-x86_64-1.27.4 /usr/bin/docker-compose
[root@node7 opt]# docker-compose version //查看版本
docker-compose version 1.27.4, build 40524192
docker-py version: 4.3.1
CPython version: 3.7.7
OpenSSL version: OpenSSL 1.1.0l 10 Sep 2019
3. docker-compose实操
3.1 启动单台容器
[root@node7 opt]# mkdir -p /opt/compose_nginx/nginx
[root@node7 opt]# cd compose_nginx/
[root@node7 compose_nginx]# ls
nginx
- 准备yml文件
[root@node7 compose_nginx]# vim docker-compose.yml
server-nginx-web:
image: nginx
container_name: web1
expose:
- 80
- 443
ports:
- "8080:80"
- "8443:443"
- 检查语法
[root@node7 compose_nginx]# docker-compose config
services:
server-nginx-web:
container_name: web1
expose:
- 80
- 443
image: nginx
network_mode: bridge
ports:
- 8080:80/tcp
- 8443:443/tcp
version: '1'
[root@node7 compose_nginx]# docker-compose config -q //静默模式,不输出在屏幕上
[root@node7 compose_nginx]# echo $?
0
- 启动
[root@node7 compose_nginx]# docker-compose up //前台启动
[root@node7 compose_nginx]# docker-compose up -d //后台启动
[root@node7 compose_nginx]# docker-compose ps //类似于docker ps -a
[root@node7 compose_nginx]# curl 127.0.0.1:8080 //验证网页
- 关闭
- 使用
docker-compose down会将容器直接删除,镜像也会删除 - 使用
docker-compose kill只是退出容器 - 使用
docker-compose rm只删除停止的容器
- 使用
- 查看事件
docker-compose events
3.2 启动多个容器
[root@node7 compose_nginx]# vim docker-compose.yml
server-nginx-web:
image: nginx
container_name: web1
expose:
- 80
- 443
ports:
- "8001:80"
- "8443:443"
server-tomcat:
image: tomcat
container_name: tomcat1
[root@node7 compose_nginx]# docker-compose config -q //检查语法格式
[root@node7 compose_nginx]# docker-compose up //启动
[root@node7 compose_nginx]# docker ps -a //显示所有容器
3.3 调用dockerfile文件 执行编排
- 编写 Dockerfile 文件
[root@node7 opt]# cd /opt/compose_nginx/nginx/
[root@node7 nginx]# vim Dockerfile
FROM centos:centos7.9.2009
LABEL author="zhou cloud" \
version="1.0" \
description="test"
RUN rm -rf /etc/yum.repos.d/
ADD qh.repo /etc/yum.repos.d/
RUN yum -y install gcc gcc-c++ make automake pcre pcre-devel zlib zlib-devel openssl openssl-devel wget
ADD nginx-1.18.0.tar.gz /usr/local/src
RUN cd /usr/local/src/nginx-1.18.0 && ./configure --prefix=/apps/nginx && make && make install
COPY index.html /apps/nginx/html
EXPOSE 80
CMD ["-g","daemon off;"]
ENTRYPOINT ["/apps/nginx/sbin/nginx"]
[root@node7 nginx]# echo "compose test page" > index.html
[root@node7 nginx]# cp /data/dockerfile/system/centos/centos7/qh.repo .
[root@node7 nginx]# cp /data/dockerfile/system/centos/centos7/nginx-1.18.0.tar.gz .
[root@node7 nginx]# ls
Dockerfile index.html nginx-1.18.0.tar.gz qh.repo //准备好上述Dockerfile中所写的文件
- 编写 compose 文件
[root@node7 nginx]# cd ..
[root@node7 compose_nginx]# vim docker-compose.yml
services:
nginx:
container_name: web1
hostname: nginx
build:
context: /opt/compose_nginx/nginx //注意路径,Dockerfile文件存放位置
dockerfile: Dockerfile
ports:
- 1216:80
- 1217:443
networks:
mynet:
ipv4_address: 172.18.0.10
volumes:
- ./wwwroot:/apps/nginx/html //注意路径
networks:
mynet:
driver: bridge
ipam:
config:
- subnet: 172.18.0.0/16
//说明
services: 定义了要运行的服务。
nginx: Nginx 服务的配置。
container_name: 指定容器的名称为 web1。
hostname: 指定容器的主机名为 nginx。
build: 指定了构建 Nginx 容器所需的上下文和 Dockerfile。
ports: 将主机端口 1216 映射到容器的 80 端口,将主机端口 1217 映射到容器的 443 端口。
networks: 将服务连接到名为 lnmp 的自定义网络。
volumes: 将主机上的 ./wwwroot 目录挂载到容器中的 /usr/local/nginx/html 目录。
networks: 定义了自定义网络。
lnmp: 自定义网络的配置。
driver: 网络驱动程序为 bridge。
ipam: IP 地址管理配置。
config: 子网配置,指定了 IP 地址范围。
- 启动
[root@node7 compose_nginx]# docker-compose config //检查语法
[root@node7 compose_nginx]# docker-compose build //构建镜像
[root@node7 compose_nginx]# docker-compose up //启动镜像