39次8.29(了解docker-compose,docker-compose编排容器,配置harbor服务)

news/2024/9/15 4:30:03/ 标签: docker, 容器, 运维

1.使用使用docker-compose编排容器

1.YAML ⽂件的格式和语法

1)YAML ⽂件格式

yaml 是⼀种标记语⾔很直观的数据序列化格式,可读性很⾼。 类似于 xml 描述性语⾔,语法⽐xml简单的很多。

yaml 数据结构通过缩进进⾏表示,连续的项⽬通过减号来表示,键值对⽤冒号分隔,数组⽤中括号括起来,hash⽤花括号括起来。

yaml ⽂件的基本格式由⼀系列键值对构成。每个键值对都⽤冒号“: ”分隔

 key: value

在 yaml 中,键和值之间只需要⼀个空格,这是为了保证 yaml ⽂件的可读性和⼀致性

对于字符串值,可以使⽤单引号或者双引号将其括起来,这样可以避免出现特殊字符或空格等问题

 name: 'Meng Mr' age: "34"

如果值包含特殊字符(如冒号或短横线),则应该使⽤引号将其括起来

 description: "This is a YAML file: good for configuation files."

2)YAML 注意事项

不⽀持制表符 tab 键缩进,需要使⽤空格缩进。

通常开头缩进 2 个空格。

字符后缩进 1 个空格,如:冒号,逗号,横杠。

⽤ # 表示注释。

如果包含特殊字符⽤单引号引起来。

布尔值(true、false、yes、no、on、off)必须使⽤“”引号括起来,这样分析器会将它们解释为字符串。

3)列表和数组在yaml中,可以使⽤“-”符号表示⼀个列表和数组

 fruits:    # fruits是⼀个键,它对应⼀个列表,包含三个元素:apple、banana、orange
​
apple   # fruits为⼀个⼤项,下⾯的⼩项只需要缩进⼏个空格,与其他项⽬对⻬即可
​
banana
​
orange

4)嵌套数据结构yaml⽀持嵌套数据结构,可以⽤缩进来表示不同层级之间的关系, 可使⽤ # 号表示注释信息。

person:   name: 'Meng Mr'   # 两个空格,name和age是person的⼀级⼦节点age: "34"address:          # address是person的⼆级⼦节点street: '123 Main St'   # address节点包含了street、city、state和zip四个⼀级⼦节点city: 'Anytown'state: 'CA'zip: '12345'

5)Docker-compose 安装使用pip工具-------安装docker-compose

pip是python的包管理工具,和yum是redhat的关系是一样的

由于要使用python环境运行docker-compose,所以需要验证python

 [root@docker1 ~]# python --versionPython 2.7.5
​
#安装pip,python的包管理工具(需要使用pip下载安装docker-compose)
[root@docker1 ~]# yum -y install python2-pip
​
#查看所有已经安装过的python第三方库,发现pip版本太低
[root@docker1 ~]# pip list
pip (8.1.2)
​
#升级pip版本
[root@docker1 ~]# pip install --upgrade pip

安装失败

[root@docker1 ~]# pip install --upgrade pip==20.3 -i https://mirrors.aliyun.com/pypi/simple
Successfully installed pip-20.3
[root@docker1 ~]# pip list
pip                          20.3
​
#使用pip安装docker-compose
​
[root@docker1 ~]# pip install docker-compose --ignore-installed requests -i https://mirrors.aliyun.com/pypi/simple
[root@docker1 ~]# pip list
docker-compose      1.26.2

配置docker

[root@docker1 ~]# sh docker.sh 
[root@docker1 ~]# docker --version
Docker version 26.1.4, build 5650f9b

6)docker-compose 命令解析

1、⽂件内常⽤指令字段

(1)version

指定了Docker compose编排⽂件的版本 Docker Compose ⽬前有三个版本,分别为 Version1、 Version2和Version3。

Version1 是较早的版本,它将来会被弃⽤。

Version2 是⽬前的稳定版本,⽀持更多的指令。

Version3 在功能上与 Version2 类似,但进⾏了⼀些改进和 扩展,例如增加了对 Docker BuildKit 的⽀持,可以加速构建过程。

version:'3'

(2)service指定了在 docker compose 编排中要运⾏的服务,每个服务都有⼀ 个名称,并指定要使⽤的镜像和容器的配置选项。

services: 
mysql: #服务名

再往下可以对该服务进⾏定义,⽐如指定映射端⼝,指定使⽤的镜像等,但要注意缩进格式。

(3)image指定要使用的docker镜像

services:
mysql: # 服务名
image: mysql:5.5 # 指定mysql镜像,如果主机内不存在该镜像,会从登录的docker镜像仓库内拉取,⼀般都是从dockerhub上拉取

(4)build允许在 docker compose 编排中指定 dockerfile 的位置。

services:
mysql: # 服务名
build: /docker/mysql # 这⾥为⽤户微服务⽂件夹,⾥⾯存放的是该服务代码jar包和Dockerfile⽂件

(5)environment指定了要设置的环境变量。

 services:mysql: # 服务名environment: # 下⾯是MySQL环境变量的例⼦MYSQL_ROOT_PASSWORD:   000000 # 设置MySQL的root⽤户的密码MYSQL_DATABASE: database # 指定要创建的数据库名称MYSQL_USER: user # 指定要创建的MySQL⽤户名MYSQL_PASSWORD: 123 # 指定要创建的MySQL⽤户的密码

(6)volumes挂载宿主机路径或命名卷

1、指定路径挂载

services:mysql: # 服务名volumes:- ./mysql/data:/var/lib/mysq # 直接指定路径挂载

2、⽣成 volume 卷挂载

 [root@doc ~]# docker volume create mysql # ⽣成名为mysql的volume卷[root@doc ~]# vim docker-compose.ymlservices:mysql: # 服务名volumes:- mysql:/var/lib/mysq # 指定volume卷挂载

3、共享⽬录挂载

 [root@doc ~]# vim docker-compose.ymlversion: '2' # 使⽤共享⽬录挂载只有‘2’版本⽀持service:mysql: # 服务名volumes:- /var/lib/mysql # 将这个⽬录作为共享⽬录nginx:volumes:- /usr/local/nginx/htmlphp:volumes_from: # 共享⽬录来⾃- mysql # 挂载的共享⽬录,挂载后会在容器内⽣成与被挂载的⽬录同名的路径- nginx # 共享挂载可以是⼀个列表

(7)port

指定了要宿主机映射到容器的端⼝,端⼝不能低于 60(宿主机端 ⼝:容器端⼝),如果选择的端⼝号低于 60,可能会与系统保留的知名端⼝冲突。

 services:mysql: # 服务名ports:- 3306:3306 # 宿主机端⼝:容器端⼝

(8)expose⽤于在 docker 容器内部暴露端⼝的选项。

 services:mysql: # 服务名expose:- 3306

(9)networks加⼊⽹络,引⽤顶级 networks 条⽬.

 networks: # 与services同级dev: # ⾃定义或已存在的⽹络设备名driver: bridge # 设备类型:⽹桥external: true # 外部存在:是

(10)hostname设定容器主机名

 services:mysql: # 服务名hostname: mysql

(11)command指定容器启动时要运⾏的命令,覆盖构建时的默认命令

services:mysql: #服务名command: --character-set·server=utf8
2、docker compose 命令选项

(1)build:重新构建服务(2) ps:列出容器(3) up:启动所有docker-compose服务(4) up -d:启动所有docker-compose服务启动并后台运⾏(5) exec:进⼊容器实例内部(6)scale:指定⼀个服务器启动数量(7)top:显示容器进程(8)logs:查看容器输出⽇志(9)down:停⽌并删除容器、⽹络、卷、镜像(10)stop:停⽌服务(11) start:启动服务(12) restart:重启服务(13)config:检查配置(14)config -q:检查配置,有问题才有输出(15) --version:查看版本

3.docker-compose 实例
# 准备docker环境[root@docker03 ~]#  vim /etc/docker/daemon.json"insecure-registries" : ["http://10.0.0.52"],[root@docker03 test]# vim /usr/lib/systemd/system/docker.service ExecStart=/usr/bin/dockerd[root@docker03 test]# systemctl daemon-reload[root@docker03 test]# systemctl start docker[root@docker03 ~]# mkdir test[root@docker03 ~]# cd test# 创建docker-compose实例[root@docker03 test]# mkdir html[root@docker03 test]# echo "我是被编排的nginx" > ./html/index.html[root@docker03 test]# lsdocker-compose.yml  html[root@docker03 test]# vim docker-compose.ymlversion: "3" #⽂件版本services:nginx:   #服务名container_name: c1 #容器名image: "nginx:latest"ports:- "80:80" #端⼝映射volumes:- /root/test/html/:/usr/share/nginx/html/ #挂载# 启动compose集群# 要在 docker-compose.yml ⽂件所在的⽬录下才能通过 docker compose 命令启动容器。[root@docker03 test]# docker compose up -d   # 启动⼯程后会根据指定的容器名称,⽣成对应的容器WARN[0000] /root/test/docker-compose.yml: `version` is obsolete [+] Running 8/8✔ nginx Pulled                                                                               30.4s ✔ e4fff0779e6d Pull complete                                                                9.5s ✔ 2a0cb278fd9f Pull complete                                                               19.8s ✔ 7045d6c32ae2 Pull complete                                                               19.8s ✔ 03de31afb035 Pull complete                                                               19.8s ✔ 0f17be8dcff2 Pull complete                                                               19.9s ✔ 14b7e5e8f394 Pull complete                                                               19.9s ✔ 23fa5a7b99a6 Pull complete                                                               19.9s [+] Running 2/2✔ Network test_default  Created                                                               0.3s ✔ Container c1          Started                                                               0.8s# 访问测试[root@docker03 test]# docker imagesREPOSITORY   TAG       IMAGE ID       CREATED       SIZEnginx        latest    5ef79149e0ec   2 weeks ago   188MB[root@docker03 test]# docker psCONTAINER ID   IMAGE          COMMAND                   CREATED         STATUS         PORTS                               NAMES46d8b91c4a5e   nginx:latest   "/docker-entrypoint.…"   6 minutes ago   Up 6 minutes   0.0.0.0:80->80/tcp, :::80->80/tcp   c1[root@docker03 test]# curl 10.0.0.52我是被编排的nginx# 浏览器访问

2.habor配置

Harbor 是一个用于存储和管理 Docker 镜像等容器镜像的企业级 Registry 服务器 。

1、上传harbor文件,解压
[root@docker ~]# yum -y install python2-pip
[root@docker ~]# pip list
pip (8.1.2)
​
[root@docker ~]# pip install --upgrade pip==20.3  -i https://mirrors.aliyun.com/pypi/simple
[root@docker ~]# pip list
docker-compose                     1.26.2
​
[root@docker01 ~]# tar -zxvf harbor-offline-installer-v2.11.1.tgz 
[root@docker01 ~]# cd harbor
[root@docker01 harbor]# ls
common.sh  harbor.v2.11.1.tar.gz  harbor.yml.tmpl  install.sh  LICENSE  prepare
2、修改配置文件
[root@docker01 harbor]# cp harbor.yml.tmpl harbor.[root@docker01 harbor]# vim harbor.yml
hostname: 192.168.1.55   #第5行
#https下都注释
#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# enable strong ssl ciphers (default: false)# strong_ssl_ciphers: false
3、部署容器环境
# 修改daemon.json文件[root@docker1 harbor]# vim /etc/docker/daemon.json{"registry-mirrors" : ["https://do.nark.eu.org","https://dc.j8.work","https://docker.m.daocloud.io","https://dockerproxy.com","https://docker.mirrors.ustc.edu.cn","https://docker.nju.edu.cn"],"host" : ["tcp://0.0.0.0:2375","unix:///var/run/docker.sock"],"insecure-registries" : [# 本机ip地址(仓库),使用80端口"http://10.0.0.51"],"bip" : "172.20.13.1/24","mtu" : 1472}# 开启容器[root@docker1 harbor]# systemctl start docker# 修改docker文件[root@docker1 harbor]# vim /usr/lib/systemd/system/docker.service ExecStart=/usr/bin/dockerd# 重新加载daemon文件[root@docker1 harbor]# systemctl daemon-reload# 重启docker[root@docker1 harbor]# systemctl restart docker
4、使用自带脚本检查并初始化配置harbor
 # 检查环境是否合适[root@docker1 harbor]# ./prepareprepare base dir is set to /root/harborUnable to find image 'goharbor/prepare:v2.11.1' locallySuccessfully called func: create_root_cert# 查看端口是否被占用并关闭防火墙[root@docker1 harbor]# netstat -lntup | grep 5000[root@docker1 harbor]# netstat -lntup | grep 80[root@docker1 harbor]# systemctl stop firewalld# 开始初始化配置harbor环境[root@docker1 harbor]# ./install.sh 
5、查看容器运行情况
 # 查看被创建的容器,都是正在开启的状态,等一会让他全部开启[root@docker1 harbor]# docker ps -a
6、测试

到浏览器中访问本机ip地址

输入(用户名:admin 密码:Harbor12345)

7、推送镜像到harbor的私有仓库中
[root@docker01 harbor]# docker  login http://192.168.1.55
Username: admin
Password: Harbor12345
​
[root@docker01 harbor]# docker tag centos:latest 192.168.1.55/centos:latest  #为镜像打标签
​
​
[root@docker01 harbor]# docker push 192.168.1.55/library/yjjcentos:v0   #将本地镜像推送到私有库中
8、harbor配置中使用到的docker-compose命令
[root@docker1 ~]# lsanaconda-ks.cfg  docker.sh  harbor  harbor-offline-installer-v2.11.1.tgz  v[root@docker1 ~]# cd harbor[root@docker1 harbor]# lscommon     docker-compose.yml     harbor.yml       install.sh  preparecommon.sh  harbor.v2.11.1.tar.gz  harbor.yml.tmpl  LICENSE# 一次性关闭所有容器[root@docker1 harbor]# docker-compose stop# 开启所有容器[root@docker1 harbor]# docker-compose start# 删掉所有容器[root@docker1 harbor]# docker-compose down# 重新检查环境[root@docker1 harbor]# ./prepare# 重新初始化[root@docker1 harbor]# ./install.sh
​
9、拉取harbor的私有仓库中的镜像


http://www.ppmy.cn/news/1519900.html

相关文章

金九银十来了,你准备好了吗?——迎接技术行业的旺季

每年的九月和十月,对于技术行业来说,是一个特别的时期。这个时期被业界称为“金九银十”,意味着招聘和项目开发的高峰期。对于技术人员而言,这不仅是一个职业发展的黄金时期,也是技术能力提升和职业规划的关键时刻。那…

RAG中pdf解析的方法全览

RAG中解析PDF的方法 一 pdf格式都有哪些 1.机器生成的pdf文件,包含图像,文本,可以被编辑 2.传统扫描文档,表现为图像,不能被编辑 3.带OCR的扫描文档。可能转OCR的过程中带入了错误。 二 pdf解析全科指南 全面指南…

设计模式 8 组合模式

设计模式 8 创建型模式(5):工厂方法模式、抽象工厂模式、单例模式、建造者模式、原型模式结构型模式(7):适配器模式、桥接模式、组合模式、装饰者模式、外观模式、享元模式、代理模式行为型模式&#xff0…

golang 于 goland 无法运行

命令行 go build -o main.go 等等 报出 # command-line-arguments runtime.main_mainf: function main is undeclared in the main package 直接goland运行 爆出 command-line-arguements 等等 goland中直接删除配置( Edit Configurations ),或者把运行模式从 Fil…

redis主从+高可用切换+负载均衡

1. redis主从配置 # 在master中 cp sentinel.conf /etc/redis/ vim /etc/redis/sentinel.conf scp /etc/redis/sentinel.conf server2:/etc/redis/ scp /etc/redis/sentinel.conf server3:/etc/redis/ redis-sentinel /etc/redis/sentinel.conf # 启动监控# 在slave中 redis-s…

第十三节:学习Springboot整合mybatis——完整篇(自学Spring boot 3.x的第三天)

大家好,今天记录下学习springboot的第三天。​网创有方 这节详细记录了如何使用springboot整合mybatis方法,并成功实现将请求信息插入本地的mysql数据库。 由于只是为了方便本地验证,实际项目是需要部署到服务器上去的,所以就采用…

“NoSQL数据库技术及其应用”写作框架,软考高级,系统架构设计师

论文真题 随着互联网web2.0网站的兴起,传统关系数据库在应对web2.0 网站,特别是超大规模和高并发的web2.0纯动态SNS网站上已经显得力不从心,暴露了很多难以克服的问题,而非关系型的数据库则由于其本身的特点得到了非常迅速的发展…

汽车免拆诊断案例 | 2012 款大众速腾车发动机偶尔抖动

故障现象 一辆2012款大众速腾车,搭载CST发动机和干式双离合变速器,累计行驶里程约为17万km。车主反映,发动机偶尔抖动。 故障诊断 接车后试车,确认发动机怠速偶尔抖动,且在D挡起步时抖动明显。用故障检测仪检测&…

仿论坛项目--开发社区首页

• 开发流程 1次请求的执行过程 • 分步实现开发社区首页,显示前10个帖子开发分页组件,分页显示所有的帖子 项目调试技巧 • 响应状态码的含义 • 服务端断点调试技巧 • 客户端断点调试技巧 • 设置日志级别,并将日志输出到不同的终端 h…

刷题记录(2)

1. HWOD机试 - 模拟消息队列(100) package com.yue.test;import org.junit.Test;import java.util.ArrayList; import java.util.Arrays; import java.util.LinkedList; import java.util.List;/*** Author: 夜雨* Date: 2021-12-08-10:31* Description:* Version 1.0*/ public…

SAPUI5基础知识25 - 聚合绑定(Aggregation Binding)

1. 背景 Aggregation Binding 是 SAPUI5 中的一种数据绑定方式,用于将数据模型中的集合(如数组)绑定到 UI 控件的聚合(如列表项、表格行等)。 常见的场景包括将一个数组绑定到 sap.m.List 的 items 聚合,…

如何定义核心场景用例?

​首先我们解决两个问题: 1.什么是场景测试? 2.什么是核心场景? 1、什么是场景测试? 🎯 1.1:什么是场景 事件触发时的情景形成了场景。场景必不可少的几个要素:环境、人、时间、行为。简而…

JavaWeb——介绍(什么是Web、Web网站的开发模式)、初始Web前端(Web标准、学习内容)

目录 介绍 什么是Web Web网站的开发模式 初识Web前端 Web标准 学习内容 介绍 JavaWeb学习路线 (仅用作参考) 什么是Web Web:全球广域网,也称为万维网(www World Wide Web),能够通过浏览器访问的…

揭秘面试官常见问题 —— JavaScript 闭包

1. 什么是闭包? 闭包是 JavaScript 中的一种特性,它允许一个函数在定义的环境之外仍然能够访问和操作定义时的作用域中的变量。换句话说,闭包是指函数可以“记住”并访问它被创建时所处的词法作用域。 简单来说: - 当一个函数被…

[Meachines] [Medium] SecNotes XSRF跨站请求伪造+SMB-Webshell上传+Linux子系统命令历史记录泄露权限提升

信息收集 IP AddressOpening Ports10.10.10.97TCP:80,445,8808 $ nmap -p- 10.10.10.97 --min-rate 1000 -sC -sV PORT STATE SERVICE VERSION 80/tcp open http Microsoft IIS httpd 10.0 | http-title: Secure Notes - Login |…

SpringBoot中基于MongoDB的findAndModify原子操作实现分布式锁原理详解

❃博主首页 &#xff1a; 「码到三十五」 &#xff0c;同名公众号 :「码到三十五」&#xff0c;wx号 : 「liwu0213」 ☠博主专栏 &#xff1a; <mysql高手> <elasticsearch高手> <源码解读> <java核心> <面试攻关> ♝博主的话 &#xff1a…

网络是怎样连接的

网络是怎样连接的 HTTPDNS数据通信协议栈——TCP/IPRJ-45接口信号衰减噪声干扰双绞线MDI接口集线器交换机路由器接入网ADSL接入网FTTH接入网用户认证和配置下发DHCPPOPWeb服务器的部署地点防火墙 HTTP HTTP发展史&#xff1a; 1991 – HTTP/0.91996 – HTTP/1.01997 – HTTP/…

人工智能领域面试基础问题整理(二):什么是人工智能?

当你说你的专业是“人工智能”时&#xff0c;面试官问你&#xff1a;“假如我是一个不懂AI的人&#xff0c;你能和我说说&#xff0c;什么是AI吗&#xff1f;”你会怎么回答。 我们可以从以下几个方面入手&#xff1a; 1、人工智能的定义 人工智能&#xff08;Artificial Inte…

Android Studio gradle下载太慢了!怎么办?(已解决)

Android Studio&#xff01;你到底干了什么&#xff1f;&#xff01; 不能高速下载gradle&#xff0c;我等如何进行app编程&#xff1f;&#xff01; 很简单&#xff0c;我修改gradle地址不就是了。 找到gradle-wrapper.properties文件 修改其中distributionUrl的地址。 将 ht…

[Leetcode 51][Hard]-n皇后问题-回溯

目录 一、题目描述 二、整体思路 三、代码 一、题目描述 原题地址 二、整体思路 这种可以算是组合问题的变种&#xff0c;在回溯函数中我们要保存当前已放置皇后的所有位置&#xff0c;同时递归调用时要进行寻找下一个皇后的放置位置。那么我们可以逐行遍历棋盘并作为递归调…