说明
本文总结了一些常用组件的Docker启动命令及过程,在开发过程中只需花费数分钟下载和配置即可完美使用这些服务。
Mysql
MySQL 是一种开源关系数据库管理系统(RDBMS),目前由 Oracle 公司维护。MySQL 以其高性能、可靠性和易用性而著称,应用于各种应用程序和网站,尤其是在 LAMP(Linux、Apache、MySQL 和 PHP/Python/Perl)堆栈中。以下是 MySQL 的一些核心特点和优势:
-
开源:MySQL 是开源软件,用户可以自由使用、修改和分发其源代码。
-
关系数据库:MySQL 使用结构化查询语言(SQL)来操作数据,支持表、视图、索引等经典的数据库管理功能。
-
高性能:MySQL 以其快速的数据处理能力而著称,适合高并发环境和大型数据集的应用。包括查询优化、存储引擎选择等多种性能增强特性。
-
可扩展性:MySQL 可以处理从小型到大型的数据库,支持几百GB到几TB的数据规模,且可以根据需求扩展数据库。
-
事务支持:MySQL 支持 ACID(原子性、一致性、隔离性、持久性)事务,确保数据操作的可靠性和完整性。
-
多种存储引擎:MySQL 提供了多种存储引擎(如 InnoDB、MyISAM、MEMORY 等),用户可以根据具体需求选择合适的存储方式。
-
安全性:MySQL 提供多种安全机制,包括用户权限管理、SSL 加密连接、数据加密等,以保护数据的安全。
-
跨平台支持:MySQL 可以在多种操作系统上运行,包括 Linux、Windows、macOS 等,适应性强。
-
社区和支持:MySQL 拥有活跃的开发者社区,提供广泛的文档、示例和支持。此外,Oracle 公司也提供商业支持与服务。
-
集成和兼容性:MySQL 可以与多种编程语言和开发框架集成,包括 PHP、Java、Python、Node.js 等,方便开发各种应用。
拉取镜像
docker pull mysql:8.0.28
启动
docker run -d --name mysql \ #容器名称
-p 3306:3306 \ # 端口映射
--restart=always \ # 自动重启
-v /data/mysql/data/:/var/lib/mysql \ # 数据目录映射
-v /data/mysql/conf/:/etc/mysql \ # 配置目录映射
-e MYSQL_ROOT_PASSWORD=root \ # root密码
-e TZ=Asia/Shanghai \ # 设置时区
--lower_case_table_names=1\ # 关闭大小写敏感
mysql:8.0.28 # 镜像名称
配置
# 进入容器内部
docker exec -it mysql /bin/bash
mysql
use mysql;
# 修改密码
ALTER USER 'root'@'localhost' IDENTIFIED BY 'root的密码';
#刷新数据库
flush privileges;
# 或者以下
mysql -uroot -proot
ALTER USER 'root'@'%' IDENTIFIED WITH mysql_native_password BY 'root的密码';
#刷新数据库
flush privileges;
备份数据
docker exec mysql mysqldump -h $ip -P $port -u $username -p$password $database_name > $backup_dir/$database_name-$dd.sql
Emqx
EMQX 是一款高性能的开源 MQTT 消息代理,专为物联网 (IoT) 和分布式应用程序设计。它支持 MQTT 协议,同时也可以轻松集成其他协议,如 HTTP、WebSocket 和 CoAP。以下是 EMQX 的一些重要特性和优势:
-
高性能:EMQX 能够支持数百万的并发连接,这使其适用于大型的 IoT 部署。它以优化的消息处理能力,可以实现快速的消息传递和高吞吐量。
-
分布式架构:EMQX 采用分布式架构,支持集群部署,确保系统的可靠性和可扩展性。可以通过简单的配置来扩展集群的节点。
-
多协议支持:除了 MQTT,EMQX 也支持多种协议,包括 MQTT 5.0、WebSocket、HTTP、CoAP 等,这使得它能够与各种类型的客户端和设备进行通信。
-
丰富的管理工具:EMQX 提供了用户友好的管理界面和命令行工具,方便用户监控、管理和配置 MQTT 代理。
-
插件系统:EMQX 支持插件扩展,可以通过自定义插件来满足特定需求,比如身份验证、存储后端、协议转换等。
-
安全性:EMQX 提供了多种安全机制,包括 TLS 加密、用户认证、访问控制列表 (ACL) 等,确保数据传输安全和用户权限管理。
-
开放源代码:EMQX 是一个开源项目,用户可以根据自己的需求进行修改和定制,同时也能享受到社区提供的支持和文档。
-
云原生:EMQX 适用于云环境,可以与 Kubernetes 等容器编排工具完美集成,方便用户在云环境中部署和管理 IoT 应用。
拉取镜像
docker pull emqx/emqx
启动
docker run -d --name emqx \ # 容器名称
--privileged=true \ # 权限
--restart always \ # 自动重启
-e EMQX_DASHBOARD__DEFAULT_USERNAME=admin \ # 用户名
-e EMQX_DASHBOARD__DEFAULT_PASSWORD=admin \ # 密码
-p 32642:1883 \ # 端口映射
-p 31862:8883 \
-p 30559:8083 \
-p 30079:8084 \
-p 31841:18083 \
emqx/emqx # 镜像名称
Minio
MinIO 是一个高性能的对象存储服务器,主要用于大数据和机器学习等应用场景。它兼容 Amazon S3 API,并且可以在私有云、公有云或者边缘计算环境中运行。以下是 MinIO 的一些重要特性和优势:
-
高性能:MinIO 采用了高效的存储设计,可以达到非常高的吞吐量,适合处理大量的数据读写请求。
-
S3 兼容性:MinIO 支持与 Amazon S3 API 兼容的接口,用户可以轻松地将现有的 S3 应用迁移到 MinIO,或者使用现有的 S3 类库和工具。
-
简单易用:MinIO 提供了简洁的命令行工具和图形用户界面,使得管理和使用存储变得更加简单。
-
高可用性和分布式:MinIO 支持数据冗余和分布式架构,可以通过自动数据复制保证数据的安全性和高可用性。
-
支持多种存储后端:MinIO 可以与多种底层存储集成,例如本地磁盘、网络存储(如 NFS、Ceph)以及云存储。
-
安全性:MinIO 支持端到端的加密,用户可以通过访问控制和身份验证机制确保数据的安全性。
-
扩展性:MinIO 支持水平扩展,用户可以通过添加更多节点来扩展存储容量和性能,满足不断增长的数据需求。
拉取镜像
docker pull minio/minio:RELEASE.2020-08-08T04-50-06Z
启动
docker run -p 32300:9000 --name minio\ # 容器名称
--privileged=true\ # 权限
--restart always \ # 自动重启
-e "MINIO_ACCESS_KEY=admin" \ # 用户名
-e "MINIO_SECRET_KEY=password" \ # 密码
-v /data/miniodata:/data \ # 数据目录映射
-v /data/miniodata/config:/root/.minio \
-d minio/minio:RELEASE.2020-08-08T04-50-06Z server /data -address ":9000" # 镜像名称
Nacos
Nacos(清新开放的服务发现和配置管理平台)是一个开源的、动态服务发现、配置管理和服务管理平台,由阿里巴巴开发并维护的,属于 Apache 软件基金会的一部分。以下是 Nacos 的一些主要特点和功能:
-
服务发现:Nacos 支持服务治理,提供灵活的服务发现机制。服务可以通过 Nacos 注册、注销,并通过 Nacos 查询到其他服务的实例信息,便于进行负载均衡和故障转移。
-
动态配置管理:Nacos 提供了强大的配置管理功能,支持动态配置更新。开发者可以在运行时修改配置,Nacos 会将最新的配置信息推送到相关的服务实例中,而无需重启。
-
易用的操作界面:Nacos 提供了一个用户友好的 Web 控制台,便于用户进行服务和配置的管理,监控服务的状态及其健康情况。
-
多种数据源支持:Nacos 支持多种数据源格式,包括 JSON、YAML、XML 等,适应不同的项目需求。
-
支持多种语言:Nacos 提供了 Java、Go、Node.js 等多种语言的客户端 SDK,使得不同语言的应用程序都可以方便地与 Nacos 进行交互。
-
健康检查:Nacos 定期对注册的服务实例进行健康检查,以确保系统的稳定性和可用性。当服务实例异常时,Nacos 会自动将其剔除出可用的服务列表。
-
多环境和多集群支持:Nacos 支持多环境配置,允许用户为不同的环境(如开发、测试、生产等)维护独立的配置。同时支持多集群的部署,适应大规模的分布式系统。
-
高可用性:Nacos 采用分布式架构,支持集群模式,提供高可用性和容错能力,确保服务的持续可用性。
-
易于集成:Nacos 可以与 Spring Cloud、Dubbo 等微服务框架无缝集成,成为微服务架构中的重要组成部分。
拉取镜像
docker pull nacos/nacos-server:latest
运行镜像
docker run --name nacos\ # 容器名称
-p 8848:8848 \ # 端口映射
--privileged=true \ # 权限
--restart=always \ # 自动重启
-e SPRING_DATASOURCE_PLATFORM=mysql \ # 数据源
-e MYSQL_SERVICE_HOST=10.5.112.221 \ # 数据源IP
-e MYSQL_SERVICE_PORT=3306 \ # 数据源port
-e MYSQL_SERVICE_USER=root \ # 数据源用户
-e MYSQL_SERVICE_PASSWORD=123mdf \ # 数据源密码
-e MYSQL_SERVICE_DB_NAME=nacosdb \ # 数据源数据库名
-e MODE=standalone \ # 模式
-v /home/nacos/logs:/home/nacos/logs \ # 日志目录映射
-d nacos/nacos-server:latest # 镜像名称
Redis
Redis(Remote Dictionary Server)是一种开源的高性能键值存储数据库,广泛用于缓存、消息队列、实时分析和数据存储等多种场景。以下是 Redis 的一些关键特性和功能:
-
内存存储:Redis 将数据存储在内存中,提供极快的数据读写速度,适用于需要低延迟的场景。
-
丰富的数据结构:Redis 支持多种数据结构,包括字符串、哈希、列表、集合、有序集合、位图、超日志等,能够满足不同情境下的数据存储需求。
-
持久化存储:虽然 Redis 主要是内存数据库,但也支持数据持久化,可以通过快照(RDB)或追加文件(AOF)将数据保存到磁盘,避免数据丢失。
-
高可用性和分布式:Redis 支持主从复制(Replication)和分片(Sharding),可以通过 Redis Sentinel 实现高可用性,确保在主节点故障时可以自动切换到从节点。
-
支持事务:Redis 支持简单的事务,允许将多个命令打包成一个原子操作,确保数据的一致性。
-
发布/订阅(Pub/Sub)机制:Redis 提供发布/订阅模式,允许消息的发送者与接收者解耦,适合实现实时消息推送和通知功能。
-
Lua 脚本支持:Redis 支持使用 Lua 脚本执行复杂的操作,能够在服务器端进行原子性处理,减少网络延迟。
-
水平扩展:通过 Redis Cluster,Redis 可以实现自动分片和数据的横向扩展,适应大规模应用的需求。
-
监控与管理工具:Redis 提供命令行界面(CLI)和图形化管理工具(如 RedisInsight)以便于监控和管理 Redis 实例。
-
多种客户端支持:Redis 提供了丰富的客户端库,支持多种编程语言,如 Java、Python、C#、Go、Node.js 等,使开发者能够轻松集成到各种应用中。
拉取镜像
docker pull redis
配置
# 编辑配置文件
vim /data/myapp/mydata/redis/conf/redis.conf
appendonly yes #redis持久化(可选)
requirepass 密码 #配置redis访问密码
databases 16 #数据库个数(可选)
运行镜像
docker run --name redis-vcco\ # 容器名称
--restart always \ # 自动重启
-v /data/vcco-sh-server/redis/data:/data \ # 数据目录映射
-v /data/vcco-sh-server/redis/conf/redis.conf:/etc/redis/redis.conf \
-dp 31900:6379 \ # 端口映射
redis redis-server /etc/redis/redis.conf # 镜像名称
Nginx
Nginx是一款开源的高性能Web服务器和反向代理服务器,具有负载均衡和HTTP缓存等功能。最流行的Web服务器之一。以下是Nginx的一些关键特性和功能:
-
高性能:Nginx 以事件驱动的架构设计,使其能够处理大量的并发连接,适合高流量的环境。它在静态文件处理、反向代理和负载均衡等方面表现出色。
-
反向代理:Nginx 可作为反向代理服务器,转发来自客户端的请求到后端服务器,并将响应返回给客户端。这种架构有助于提升系统的安全性和可扩展性。
-
负载均衡:Nginx 支持多种负载均衡算法(如轮询、最少连接、IP哈希等),可以将请求智能地分配到多个后端服务器,提升整个平台的可靠性和性能。
-
静态文件服务:Nginx 专注于高效地提供静态文件服务,如HTML、CSS、JavaScript 和图片等,相较于其他Web服务器,Nginx 在处理这类请求时速度更快。
-
HTTP/HTTPS 支持:Nginx 完全支持现代的HTTP协议,并且支持SSL/TLS加密,能够安全地处理HTTPS请求,为用户提供安全的访问体验。
-
WebSocket支持:Nginx 可作为WebSocket的代理,支持实时通信应用,如在线聊天和实时数据更新等。
-
模块化架构:Nginx 采用模块化架构,用户可以根据需要编译和加载特定模块,以增加功能或优化性能。
-
缓存机制:Nginx 具备强大的HTTP缓存功能,可以缓存后端服务器的响应,减轻原服务器的负担,提高响应速度。
-
URL重写和重定向功能:Nginx 支持强大的URL重写和重定向功能,便于进行SEO优化、路由管理和内容迁移。
-
易于配置:Nginx 的配置文件简单明了,允许用户通过少量的指令进行复杂的配置,适合快速部署和管理。
配置
编写Dockfile
vim Dockfile-nginx
# 使用基础的Node.js镜像
FROM node:16.14.0 as builder
# 创建目录
RUN mkdir -p /opt/sv-webapp
# 指定路径
COPY . /opt/sv-webapp
WORKDIR /opt/sv-webapp
# 安装依赖
RUN cd deploy \
&& tar zxf zlib-1.2.13.tar.gz \
&& cd zlib-1.2.13 \
&& ./configure \
&& make && make install \
&& cp /usr/local/lib/libz.so.1.2.13 /lib64/libz.so.1 \
&& chmod 755 /lib64/libz.so.1
# 编译打包
RUN ls -a \
&& npm config set registry https://registry.npm.taobao.org \
&& yarn install \
&& yarn build:dev
# 拉取nginx镜像
FROM nginx AS production
# 把打包好的文件移到 docker拉取的nginx镜像默认读取路径里(/usr/share/nginx/html)
COPY --from=builder /opt/sv-webapp/dist /opt/sv-webapp/dist
RUN echo "server { \
listen 80; \
server_name 192.1.1.31; \
location / { \
root /opt/sv-webapp/dist/; \
index index.html index.htm; \
} \
location /api/v1/ { \
proxy_set_header Host \$host; \
proxy_set_header X-Forwarded-For \$proxy_add_x_forwarded_for; \
proxy_pass http://192.1.1.31:30521/api/v1/; \
} \
location /api/ { \
proxy_set_header Host \$host; \
proxy_set_header X-Forwarded-For \$proxy_add_x_forwarded_for; \
proxy_pass http://192.1.1.31:32004/api/; \
} \
access_log /var/log/nginx/access.log ; \
} " > /etc/nginx/conf.d/default.conf
EXPOSE 80
EXPOSE 443
启动
docker run -d --name nginx\ # 容器名称
-p 80:80\ # 端口映射
--restart=always \ # 自动重启
-v /data/myapp/nginx/conf.d:/etc/nginx/conf.d \ # 配置目录映射
镜像名 # 镜像名称
vim /etc/nginx/conf.d/default.conf
server {
# 前端服务端口
listen 80;
listen [::]:80;
server_name 192.1.1.31;
# 首页
location / {
root /opt/sv-webapp/dist/;
index index.html index.htm;
}
# 错误页
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root /opt/sv-webapp/dist/;
}
# 后端
location /api/v1/ {
proxy_set_header Host \$host;
proxy_set_header X-Forwarded-For \$proxy_add_x_forwarded_for;
proxy_pass http://192.1.1.31:30521/api/v1/;
}
location /api/ {
proxy_set_header Host \$host;
proxy_set_header X-Forwarded-For \$proxy_add_x_forwarded_for;
proxy_pass http://192.1.1.31:32004/api/;
}
}
Harbor
Harbor 是一个开源的企业级容器镜像 registry,主要用于存储、管理和分发容器镜像。它是基于 Docker Registry 的扩展,提供了更多的功能和管理工具,旨在帮助组织安全和高效地管理其容器化应用程序。以下是 Harbor 的一些关键特性和功能:
-
访问控制:Harbor 提供基于角色的访问控制(RBAC),允许用户和团队根据角色定义访问权限,确保安全性。
-
身份验证:支持多种身份验证方式,包括 LDAP、AD 和 OAuth 等,可以轻松与现有的身份管理系统集成。
-
镜像签名:支持 Notary 进行镜像签名,确保推送的镜像的完整性和来源,防止恶意镜像的使用。
-
镜像版本管理:Harbor 支持对镜像的版本进行管理,包括镜像的标记和删除,可以方便地管理应用程序的不同版本。
-
镜像扫描:集成了安全扫描工具(如 Clair),允许在使用镜像之前检测和识别潜在的安全漏洞。
-
高可用性:Harbor 支持高可用性集群部署,可以通过负载均衡实现容器镜像的高可用性和容错能力。
-
多种存储后端支持:Harbor 支持多种后端存储,例如 NFS、S3、Google Cloud Storage 等,用户可以根据需求选择适合的存储解决方案。
-
易于使用的Web界面:Harbor 提供用户友好的Web界面,通过可视化方式简化容器镜像的管理,让用户可以轻松进行镜像的上传、下载和搜索。
-
API 和 CLI支持:Harbor 提供丰富的RESTful API和命令行工具,方便开发者和运维人员进行自动化管理和集成。
-
支持图形化界面:用户可以通过一个统一的界面浏览、管理和共享容器镜像,提升了操作的便利性。
-
多项目支持:Harbor 允许用户在同一个默认实例中创建多个项目,每个项目可以配置不同的访问权限和策略,支持多团队协作。
部署Docker Compose
apt install docker-compose
docker-compose version
部署harbor
#下载harbor压缩包
wget https://github.com/goharbor/harbor/releases/download/v2.4.3/harbor-offline-installer-v2.4.3.tgz
#把harbor解压至/usr/local目录下
tar xf harbor-offline-installer-v2.4.3.tgz -C /usr/local/
#进入harbor目录
cd /usr/local/harbor/
cp harbor.yml.tmpl harbor.yml
vim harbor.yml
hostname: harbor_node01.example.com //这里的主机名换成本机的主机名或IP地址
#https: //把https这行及子行都注释掉,因为没有弄ssl证书加密
# 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
./install.sh
Mongo
MongoDB 是一个开源的 NoSQL 数据库,专注于高性能、高可用性和可扩展性。与传统的关系型数据库不同,MongoDB 使用文档导向的数据存储方式,以 JSON 类似的 BSON(Binary JSON)格式存储数据,允许结构化和半结构化数据的灵活存储。以下是 MongoDB 的一些关键特性和功能:
- 文档存储:数据以文档的形式存储,每个文档都可以拥有不同的结构(字段和类型),适合动态变化的需求。这种方式使得开发者可以灵活地定义数据模式。
- 横向扩展:MongoDB 支持分片(Sharding),可以方便地通过增加更多的服务器来扩展数据存储和处理能力。这使其适合处理大规模数据集和高并发的应用场景。
- 高可用性:通过Replica Set(副本集),MongoDB 提供了内置的高可用性和故障恢复解决方案。副本集允许多个副本节点同步数据,确保数据的冗余和可用性。
- 灵活的查询语言:MongoDB 使用一种基于 JSON 的查询语言,支持丰富的查询操作,如过滤、排序、聚合等,能够满足复杂查询的需求。
- 强大的索引功能:MongoDB 支持多种类型的索引(如单字段、复合索引、地理空间索引等),可以优化查询性能并加快数据检索速度。
- 聚合框架:MongoDB 提供了一种强大的聚合框架,允许用户以声明方式进行数据处理和分析,适合进行复杂的数据操作和计算。
- 地理空间支持:MongoDB 具备地理空间数据处理能力,支持地理位置查询和计算,适用于位置服务和地图应用等场景。
- 副本集和分片的自动故障转移:在发生故障时,MongoDB 可以自动进行故障转移,确保服务的持续可用性。
- 丰富的驱动程序支持:MongoDB 提供了多种编程语言的驱动程序(如 Java、Python、Node.js 等),方便开发者将 MongoDB 集成到不同的应用程序中。
- 社区和生态系统:MongoDB 拥有活跃的社区和丰富的生态系统,提供各种工具和扩展,帮助开发者更高效地使用和管理数据库。
拉取镜像
docker pull mongo:4.4
配置
vim mongod.conf
systemLog:
# MongoDB发送所有日志输出的目标指定为文件
destination: file
# mongod或mongos应向其发送所有诊断日志记录信息的日志文件的路径
path: "/var/log/mongodb/mongodb.log"
# 当mongos或mongod实例重新启动时,mongos或mongod会将新条目附加到现有日志文件的末尾。
logAppend: true
storage:
# mongod实例存储其数据的目录。
dbPath: "/data/db"
journal:
#启用或禁用持久性日志以确保数据文件保持有效和可恢复。
enabled: true
net:
# 服务实例绑定的IP,默认是localhost(多个ip用逗号分隔)
bindIp: 0.0.0.0
#绑定的端口,默认是27017
port: 27017
启动
docker run --name mongo\ # 容器名称
-p 27017:27017 \ # 端口映射
-v /app/mongo/data:/data/db \ # 数据目录映射
-v /app/mongo/logs:/var/log/mongodb \
-v /app/mongo/mongod.conf:/etc/mongod.conf \
-d mongo --auth # 镜像名称
配置
docker exec -it mongo mongo admin
# 创建一个名为 admin,密码为 123456 的用户。
db.createUser({ user:'admin',pwd:'123456',roles:[ { role:'userAdminAnyDatabase', db: 'admin'},"readWriteAnyDatabase"]});
# 尝试使用上面创建的用户信息进行连接。
db.auth('admin', '123456')
MongoDB 6.0 及以上版本使用以下命令:
docker exec -it mongo mongosh admin