一、先搞懂:Docker 到底是什么?

简单说,Docker 是一个 “装应用的盒子”。
镜像(Image):就像手机里的 “安装包”,包含了应用和它运行需要的所有环境(比如 MySQL 镜像里有 MySQL 程序和必要的配置)。
容器(Container):就像 “运行中的 APP”,是镜像启动后的实例。多个容器之间互相隔离,比如你可以同时跑一个 MySQL 容器和一个 Redis 容器,互不干扰。
仓库(Repository):就像 “应用商店”,存放各种镜像(比如 Docker Hub 是官方仓库,国内有阿里云镜像仓库)。
用一句话总结:用 Docker 可以把应用和环境打包成镜像,然后在任何装了 Docker 的机器上,一键启动成容器,解决 “在我电脑上能跑,在你那不行” 的问题。
在这里插入图片描述

Docker简介与优势**在这里插入图片描述

Docker三大核心价值:

  • 🚀 环境一致性:开发、测试、生产环境完全一致
  • 📦 快速部署:秒级启动服务,告别"在我机器上是好的"问题
  • 资源高效:轻量级容器,比虚拟机节省50%以上资源

Docker安装
Docker分为 CE(社区版,免费,支持周期七个月) 和 EE(企业版,安全,付费使用,支持周期24个月) 两大版本

极简安装指南(CentOS)

以 CentOS 为例,安装 Docker CE(社区版,免费):
步骤 1:卸载旧版本(如果之前装过)

yum remove docker \
  docker-client \
  docker-client-latest \
  docker-common \
  docker-latest \
  docker-latest-logrotate \
  docker-logrotate \
  docker-selinux \
  docker-engine-selinux \
  docker-engine \
  docker-ce
或
sudo yum remove docker*

步骤 2:配置国内 yum 源(加速下载)
Docker 默认源在国外,下载慢,用阿里云镜像源:

# 安装yum工具
yum install -y yum-utils 
安装成功后,执行命令,配置Docker的yum源,yum的默认地址

yum-config-manager --add-repo \
    https://download.docker.com/linux/centos/docker-ce.repo
 
# 配置阿里云Docker源   
yum-config-manager \
  --add-repo \
   http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo

步骤 3:安装 Docker(社区版

yum install -y docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin

tip:
Docker应用需要用到各种端口,挨个修改防火墙设置很麻烦,建议直接关闭防火墙

##关闭
systemctl stop firewalld
##禁止开机启动防火墙
systemctl disable firewalld

注意:生产环境请配置防火墙规则,开发环境可临时关闭防火墙:

步骤 4:启动 Docker 并设置开机自启

# 启动Docker
systemctl start docker

# 设置开机自启(下次开机自动启动Docker)
systemctl enable docker

# 验证是否安装成功(显示版本号即成功)
docker -v  # 输出:Docker version 24.0.5, build ced0996

# 执行docker ps 命令,如果不报错,说明安装启动成功
docker ps

步骤 5:配置镜像加速(必做!否则下载镜像巨慢)
参考阿里云镜像加速
https://cr.console.aliyun.com/cn-hangzhou/instances/mirrors

  1. 注册阿里云账号
  2. 开通镜像服务
  3. 配置镜像加速
# 创建配置目录
sudo mkdir -p /etc/docker

# 写入加速配置
sudo tee /etc/docker/daemon.json <<-'EOF'
{
  "registry-mirrors": ["https://你的专属加速地址.mirror.aliyuncs.com"]
}
EOF

# 重启Docker使配置生效
sudo systemctl daemon-reload
sudo systemctl restart docker

二、实战:用 Docker 跑起常用软件

Docker核心命令

命令 作用 例子
docker pull 镜像名 从仓库下载镜像 docker pull mysql(下载 MySQL 镜像)
docker run 镜像名 用镜像启动容器 docker run mysql(启动 MySQL 容器)
docker ps 查看正在运行的容器 -
docker ps -a 查看所有容器(包括停止的) -
docker stop 容器名 停止容器 docker stop mysql
docker start 容器名 启动已停止的容器 docker start mysql
docker rm 容器名 删除容器(需先停止) docker rm mysql
docker rmi 镜像名 删除镜像 docker rmi mysql

1. 启动 MySQL

# 下载MySQL镜像(默认最新版)
docker pull mysql

# 启动MySQL容器
docker run -d \
  --name mysql \  # 给容器起个名字叫mysql
  -p 3306:3306 \  # 端口映射:宿主机3306端口 → 容器3306端口
  -e MYSQL_ROOT_PASSWORD=123456 \  # 设置root密码为123456
  mysql  # 镜像名

参数解读

  • docker run:创建并运行一个容器
  • -d :后台运行容器(不占用当前终端)。
  • –name mysql:给容器命名(必须唯一),方便后续操作(比如停止、删除)。
  • -p 3306:3306:设置端口映射。宿主机端口:容器内端口,,没有这一步,外部访问不到容器里的服务。
  • -e KEY=VALUE:设置环境变量,不同镜像环境变量值也不一样
  • mysql:指定运行镜像的名字
  • –start=always 开机启动

验证:用 Navicat 连接 宿主机IP:3306,用户名 root,密码 123456,能连上就成功了。

2.docker安装nacos

docker pull nacos/nacos-server:1.2.0
# 运行方式一
docker run --env MODE=standalone --name nacos --restart=always -d -p 8848:8848 nacos/nacos-server:1.2.0

# 运行方式二:
docker run -d \
--name nacos \
--env-file ./nacos/custom.env \
-p 8848:8848 \
-p 9848:9848 \
-p 9849:9849 \
--restart=always \
nacos/nacos-server:v2.1.0-slim

其中的nacos/custom.env文件中

PREFER_HOST_MODE=hostname
MODE=standalone
SPRING_DATASOURCE_PLATFORM=mysql
MYSQL_SERVICE_HOST=192.168.200.101
MYSQL_SERVICE_DB_NAME=nacos
MYSQL_SERVICE_PORT=3307
MYSQL_SERVICE_USER=root
MYSQL_SERVICE_PASSWORD=123
MYSQL_SERVICE_DB_PARAM=characterEncoding=utf8&connectTimeout=1000&socketTimeout=3000&autoReconnect=true&useSSL=false&allowPublicKeyRetrieval=true&serverTimezone=Asia/Shanghai

访问地址:ip:8848/nacos (默认账号:nacos/nacos)

  • –env MODE=standalone:单机启动
  • 8848 是用于客户端与服务通信的主要端口。
    9848 是 gRPC 端口,用于与 Nacos 的 gRPC 通信(如果需要)。
    9849 是 Raft 端口,用于 Nacos 集群中节点之间的通信(如果运行集群模式)。

3. docker安装MinIO

docker pull minio/minio
docker run -p 9000:9000 -p 9001:9001 --name minio -d --restart=always \
-e "MINIO_ROOT_USER=minio" -e "MINIO_ROOT_PASSWORD=minio123" \
-v /home/data:/data -v /home/config:/root/.minio minio/minio server /data --console-address ":9001"

访问地址:ip:9001

  • 9000是minio的api端口映射;9001是minio管理员界面窗口的端口映射

4. Docker安装Redis

docker pull redis # 下载Redis镜像
# Redis默认端口6379
docker run -d --name redis --restart=always \ 
-p 6379:6379 redis redis-server --appendonly yes 

用redis客户端连接测试

  • –requirepass “leadnews” 设置redis的登录密码,也可以不设置此参数,不要密码

5. Docker安装 Nginx

docker pull nginx # 下载Nginx镜像
# Nginx默认端口80
docker run --name nginx -p 80:80 -d nginx
  • 访问服务器ip:80

6. Docker安装RabbitMQ

docker pull rabbitmq:3-management # 带管理界面的版本


docker run \
 -e RABBITMQ_DEFAULT_USER=rapden \
 -e RABBITMQ_DEFAULT_PASS=123321 \
 -v mq-plugins:/plugins \
 --name mq \
 --hostname mq \
 -p 15672:15672 \
 -p 5672:5672 \
 --network hm-net\
 -d \
 rabbitmq:3.8-management
  • 浏览器访问:服务器ip:15672,输入指定的用户名和密码(admin/123456)
  • tip: 15672是ui管理台的端口,5672是消息通信的端口

7. Docker安装kafka

#kafaka对于zookeeper是强依赖,要先安装zookeeper
docker pull zookeeper:3.4.14
docker run -d --name zookeeper -p 2181:2181 zookeeper:3.4.14

docker pull wurstmeister/kafka:2.12-2.3.1
docker run -d --name kafka \
--env KAFKA_ADVERTISED_HOST_NAME=192.168.200.129 \
--env KAFKA_ZOOKEEPER_CONNECT=192.168.200.129:2181 \
--env KAFKA_ADVERTISED_LISTENERS=PLAINTEXT://192.168.200.129:9092 \
--env KAFKA_LISTENERS=PLAINTEXT://0.0.0.0:9092 \
--env KAFKA_HEAP_OPTS="-Xmx256M -Xms256M" \
--net=host wurstmeister/kafka:2.12-2.3.1
  • –net=host 直接使用容器宿主机的网络命名空间,既没有独立的网络环境。它使用宿主机的ip和端口。

8. Docker安装es

docker pull elasticsearch:7.12.1

docker run -d --name es \
-e "ES_JAVA_OPTS=-Xms512m -Xmx512m" \
-e "discovery.type=single-node" \
-v es-data:/usr/share/elasticsearch/data \
-v es-plugins:/usr/share/elasticsearch/plugins \
--privileged --network es-net \
-p 9200:9200 -p 9300:9300 elasticsearch:7.12.1
  • 访问http的端口:ip:9200
  • 9200暴露在http协议的端口,给用户访问;9300是es容器各个节点互相访问使用的
  • discovery.type=single-node是单机启动
  • –privileged 授予逻辑卷访问权
  • ES_JAVA_OPTS JVM运行的最大最小内存,默认1GB
  • discovery.type 是docker运行模式,可以是单点,也可以是集群

9. Docker安装kibana(es的可视化界面)

docker pull kibana:7.12.1
docker run -d --name kibana -e ELASTICSEARCH_HOSTS=http://es:9200 \
--network=es-net -p 5601:5601 kibana:7.12.1
  • 访问:ip:5601
  • 注意:加入的网络要和es在同一个网络下,下载的版本要和es版本保持一致
  • --network es-net 加入一个名为es-net的网络中

10. Docker安装MongoDB

docker pull mongo
docker run -di --name mongo-service --restart=always -p 27017:27017 -v ~/data/mongodata:/data mongo

11. Docker安装 xxl-job

docker pull xuxueli/xxl-job-admin:2.3.0
docker run -e PARAMS="--spring.datasource.url=jdbc:mysql://192.168.200.129:3306/xxl_job?useUnicode=true&characterEncoding=UTF-8 \
--spring.datasource.username=root \
--spring.datasource.password=abc123" \
-p 8888:8080 -v /tmp:/data/applogs \
--name xxl-job-admin --restart=always -d xuxueli/xxl-job-admin:2.3.0
  • 访问:ip:8888/xxl-job-admin
  • 账号密码:admin 123456

12. Docker安装seata

需要注意,要确保nacos、mysql都在hm-net网络中。如果某个容器不再hm-net网络,可以参考下面的命令将某容器加入指定网络:

docker network connect [网络名] [容器名]

在虚拟机的**/root**目录执行下面的命令:

docker run --name seata \
-p 8099:8099 \
-p 7099:7099 \
-e SEATA_IP=192.168.200.101 \
-v ./seata:/seata-server/resources \
--privileged=true \
--network hm-net \
-d \
seataio/seata-server:1.5.2

端口映射

  • 默认情况下,容器是隔离环境,我们直接访问宿主机的3306端口,肯定访问不到容器中的mysql。
  • 将宿主机端口与容器端口映射,当我们访问宿主机的3306端口时,会被映射到容器的3306端口,这样就能访问到mysql了。

镜像命名规范
镜像名称一般由两部分组成:[repository]:[tag],如mysql:5.7

  • repository是镜像名
  • tag是 镜像的版本
    若不指定tag,默认是latest,代表最新版本的镜像
Logo

有“AI”的1024 = 2048,欢迎大家加入2048 AI社区

更多推荐