Docker安装【Windows-Linux】;Docker一键启动应用:Nginx、Springboot、MinIO、Redis、MySQL;
一、docker介绍
Docker是一个开源的应用容器引擎,是一个轻量级容器技术。基于Go语言实现的云开源项目,诞生于2013年初,最初是dotCloud公司发起。由镜像(Image)、容器(Container)、仓库(Repository)三大核心组成。
核心概念
docker主机(Host):安装了docker程序的机器(docker直接安装在操作系统之上)。
docker客户端(Client):连接docker主机进行操作。
docker仓库(Registry):用来保存各种打包好的软件镜像。
docker镜像(Images):软件打包好的镜像,放在docker仓库中。
docker容器(Container):镜像启动后的实例称为一个容器,容器是独立运行的一个或一组应用。
使用docker的步骤
1、安装docker
2、去docker仓库找到这个软件对应的镜像
3、使用docker运行这个镜像,这个镜像就会生成一个docker容器
4、对容器的启动停止就是对软件的启动停止
二、docker下载与安装
1、docker-desktop下载
下载docker-desktop
网址:https://www.docker.com/products/docker-desktop/
点击download for windows
下载完成
2、docker安装【windows】
(1)、安装docker desktop
右击,以管理员运行程序
默认勾选user wsl 2 instead of hyper-v和add shortcut to desktop,点击ok
开始安装
安装完成,点击close and restart重启电脑
(2)、配置docker desktop环境
因为docker desktop 是可以部署在windows 上来运行docker的应用服务的,其基于windows 的 Hyper-V服务和WSL2内核的Windows上创建一个子系统(linux)。
从而实现其在windows上运行docker。所以电脑上需要开启Hyper-V服务和安装WSL2。
1、开启Hyper-V服务
安装Hyper-V管理工具、安装Hyper-V平台、windows虚拟机监控程序平台、容器、适用于Linux的windows子系统共5个服务(安装docker desktop的时候就安装了适用于linux的windows子系统)
安装完成后,立即重启电脑生效
2、安装wsl
注意:使用命令安装有问题,不知道原因,所以不要用命令安装,直接用微软安装包安装,简单。
下载wsl升级包
github地址:https://github.com/microsoft/WSL/releases
最新版是2.2.3,点击下载x64的
使用msi程序,安装完成wsl
wsl安装成功后,可以查看安装的linux版本
命令:wsl --list --verbose 或命令:wsl -l -o
看到安装了2个linux版本。
如果要删除一个,可以注销。比如我们删除docker-desktop-data
命令:wsl --unregister docker-desktop-data
linux注销成功。只剩下一个linux了。但是不建议。因为wsl安装后,就又是两个了。
三、启动docker
选择Docker Desktop的设置,直接选择默认的Use recommended settings (requires administrator password),再点击Finished完成设置。
docker启动成功
这个界面是可视化管理使用的。
docker的使用cmd命令行。和linux操作一样。
例如:搜索minio镜像
docker报错1:
提示docker engine stopped
过一会弹出错误框:unexpected wsl error
原因分析:
第一个wsl是自己下载的,安装了docker启动不了。第二个是donet群友发的,安装了docker也启动不了。第三个是群友发的github上下载的,安装后docker启动正常了
前两个包都已删除,只保留最新的wsl包2.2.3.0就行了
存放路径如下:
3、docker安装【centos】
(1)查看当前的内核版本【官方建议linux内核3.10以上,3.8的其实也能运行起来。】
uname -r
结果:3.10.0-1160.71.1.el7.x86_64
(2)安装必要的软件包
yum install -y yum-utils device-mapper-persistent-data lvm2
(3)设置yum源
【中央仓库】--一般用不了需要开vpn
yum-config-manager --add-repo http://download.docker.com/linux/centos/docker-ce.repo
设置中央仓库有时候会报错。所以建议设置阿里仓库
【阿里仓库】--一般用阿里仓库
yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
设置阿里仓库就正常
4)安装docker
(1)查看可用版本
yum list docker-ce --showduplicates | sort -r
(2)选择一个版本安装
yum install docker-ce-版本号
说明:docker镜像有很多,有些带有.centos,有的不带。安装没有要求,都可以安装。
yum install docker-ce-26.1.4-1.el7
说明:比如最新的镜像是第一个。安装命令就是docker-ce-26.1.4-1.el7【不要.x86_64和3:】出现Complete!说明安装成功。
5)验证docker是否安装成功
docker --version
6)启动docker服务并设置开机自启
【启动docker服务】systemctl start docker
【设置开机自启】systemctl enable docker
【重启docker服务】systemctl restart docker
【查看docker服务状态】systemctl status docker
未启动状态:
启动状态:
三、docker部署应用
1、compose一件部署所有应用
Docker Compose 是官方用来「一次性批量跑一堆容器」的工具
CentOS 装了 Docker + Docker Compose 后,一条命令就能一次性启动:Vue + SpringBoot + Redis + MinIO + MySQL 所有服务!
1.1、compose安装【centos】
安装docker-compose
命令:yum install -y docker-compose-plugin
查看docker-compose是否安装成功
命令:docker compose version
1.2、compose一件部署所有应用【vue单系统】
一键启动所有服务
说明:需要在home下创建以下目录
java:存放springboot
minio/data:存放minio文件
mysql/data:存放mysl数据
redis/data:redis做持久化存放数据
vue:存放vue代码dist
docker compose文件如下:
【vue单项目】 注意:密码部分用***号代替
version: '3.8'services: # Vue 管理后台 nginx-vue: image: nginx:alpine container_name: nginx-vue restart: always ports: - "80:80" volumes: # 挂载静态文件目录 - /home/vue/dist:/usr/share/nginx/html # 挂载自定义Nginx配置文件【后面必须是default.conf,这样才能有自定义的配置覆盖默认的】 - /home/vue/nginx.conf:/etc/nginx/conf.d/default.conf # SpringBoot 后端 # springboot-api: # build: . # container_name: springboot-api # restart: always # ports: # - "8080:8080" # depends_on: # - mysql # - redis # - minio # environment: # - SPRING_PROFILES_ACTIVE=prod # Redis redis: image: redis:7 container_name: redis restart: always ports: - "6379:6379" volumes: - /home/redis/data:/data #数据目录【存持久化数据】 # 单行写法 command: redis-server --requirepass *** --appendonly yes #加密码,开启持久化【存持久化数据必须开启】 # 多行写法 command: > redis-server --requirepass *** --appendonly yes # MinIO minio: image: minio/minio:RELEASE.2024-12-18T13-15-44Z # 指定版本【2024最后一个版本】 container_name: minio restart: always ports: - "9000:9000" - "9001:9001" environment: MINIO_ROOT_USER: admin MINIO_ROOT_PASSWORD: *** volumes: - /home/minio/data:/data command: server /data --console-address ":9001" # MySQL mysql: image: mysql:8.0 container_name: mysql restart: always ports: - "3306:3306" environment: MYSQL_ROOT_PASSWORD: *** MYSQL_DATABASE: mo_fang volumes: - /home/mysql/data:/var/lib/mysql #mysql数据存放位置【/home/mysql/data】
# 创建+启动容器docker compose up -d#停止并删除所有容器【停止所有容器、删除所有容器、删除网络、不删除数据卷(data下的数据在)】#【使用场景:1、要彻底关掉所有服务;2、要修改 docker-compose.yml 大版本配置;3、要重新干净启动所有服务;】docker compose down# 启动全部docker compose start# 停止全部docker compose stop# 重启全部docker compose restart# 查看所有日志docker compose logs -f
nginx说明:
nginx要挂自己配置文件,否则nginx单文件路由定位的方式,docker运行后会找不到目录文件报错404
nginx配置文件目录:/home/vue/nginx.conf
配置文件如下:
server { listen 80; server_name localhost; # 这里必须是docker容器内路径!!! root /usr/share/nginx/html; index index.html; location / { try_files $uri $uri/ /index.html; }}
docker compose文件在nginx后必须加上这样,配置才能生效
重启docker后系统访问正常了
minio说明:
因为2025之后minio很多功能没了,所以要用2024之前的minio
查询minio镜像的方法
windows版本:
网址:https://hub.docker.com/r/minio/minio/tags 【docker官方minio地址,开魔法才能访问】
这是最新版镜像
要找2024的镜像,往下拉,往后翻页,这就是2024最后的版本
3个版本说明如下,我们选择标准版就行,后面就是docker pull地址
把docker compose文件放在某个目录下:/opt/king
进入目录,一键启动所有服务:
命令:
cd /opt/king
docker compose up -d【新版命令】
如果用旧版命令:docker-compose up -d
会报错
新命令启动报错,这是因为docker镜像问题,需要更换镜像地址
检测镜像地址是否可用【测试一个镜像源是否能用,必须加上 /v2/ 路径:】
命令:curl -I https://docker.1panel.live/v2/
✅ 可用 → 返回 HTTP/1.1 401 Unauthorized
这是正常的,代表镜像站能连通,只是需要登录。
❌ 不可用 → 返回
Connection timed out(连接超时)Could not resolve host(无法解析)以下说明可用:
401可用
200表示地址能用
- 状态码是 200 OK,并且 Content-Type: application/json,说明它返回的是标准的 JSON 格式响应,不是网页。
- 出现了 docker-distribution-api-version: registry/2.0,直接证明它是支持 Docker Registry V2 协议的标准镜像仓库。
- 它返回了一个空的 JSON 对象(Content-Length: 2),这是公开镜像源的常见响应,代表你可以匿名拉取镜像,不需要额外认证。
以下说明不可用:
这样的说明地址不能用了
虽然返回了 200 OK,但它不是一个合法的镜像仓库。
从响应头能看到:content-type: text/html,说明它返回的是一个网页,不是 Docker 镜像仓库的 API 响应。所以这个地址不能用
403报错,说明拒绝了你的请求,镜像源本身还能连通,但不允许你访问,无法用来拉取 Docker 镜像,所以也不能用了
302重定向,跳转到了docker.lms.run/v2/
响应的 Content-Type: text/html,说明它最终还是会返回网页内容,而不是标准的 Registry API 响应。说明不可用
修改docker镜像
新建或编辑 Docker 配置文件:vi /etc/docker/daemon.json【一般没有这个文件,命令自动创建】
粘贴镜像地址【以下地址可用,已测试】
{ "registry-mirrors": [ "https://docker.1panel.live", "https://docker.1ms.run", "https://docker-0.unsee.tech", "https://lispy.org", "https://docker.m.daocloud.io", "https://proxy.vvvv.ee", "https://registry.cyou", "https://docker.m.daocloud.io", "https://mirror.iscas.ac.cn", "https://docker.m.daocloud.io", "https://docker.kejilion.pro" ]}
保存并退出,重启 Docker 服务
命令:
systemctl daemon-reload
systemctl restart docker
测试拉取镜像
命令:docker pull hello-world
Pull complete 表示镜像拉取成功。说明docker没问题了
一键启动所有服务
以下服务会被启动
查看是否启动成功
命令:docker ps
看到没有服务,说明没重启成功
关闭所有服务
命令:docker-compose down
启动所有服务:docker compose up -d
再次重启就报错,因为修改了docer compose文件就要先重启docker
重启docker:systemctl restart docker
再启动就好了
再查看,nginx、redis、minio、mysql都启动起来了
验证服务:
vue+nginx启动正常
minio正常登录,并且所有功能齐全
redis正常了
mysql也正常连接了
注意:默认数据库mo_fang是容器里配置的数据库
首次链接报错,这是因为
MySQL 8.0 改用了caching_sha2_password 加密方式,而你本地的数据库客户端(DBeaver/Navicat)默认不允许从服务器获取公钥,所以直接报错。
把allowPublicKeyRetrieval设为 true就好了
docker compose启动了所有应用。每个应用可以单独操作,命令如下
vue+nginx
# 只启动前端docker compose up -d nginx-vue# 只停止前端docker compose stop nginx-vue# 只重启前端docker compose restart nginx-vue# 查看前端日志docker compose logs -f nginx-vue
# 只启动docker compose up -d redis# 只停止docker compose stop redis# 只重启Redisdocker compose restart redis# 查看日志docker compose logs -f redis
# 只启动 miniodocker compose up -d minio# 只停止 miniodocker compose stop minio# 只重启 miniodocker compose restart minio# 只查看 minio 日志docker compose logs -f minio
# 只启动docker compose up -d mysql# 只停止docker compose stop mysql# 只重启MySQLdocker compose restart mysql# 查看日志docker compose logs -f mysql
1.2、compose一件部署所有应用【vue多系统】
nginx部署2套系统,一套web前端,端口:80;一套admin后台管理,端口:8080;
需要在/home/vue下创建两个目录web和admin
docker-compose.yml配置如下
services: # 前台网站Vue--80端口 nginx-web: image: nginx:alpine container_name: nginx-web restart: always ports: - "80:80" # 宿主机 8080 → 容器 80 volumes: - /home/vue/web/dist:/usr/share/nginx/html # 前台dist - /home/vue/web/nginx.conf:/etc/nginx/conf.d/default.conf # 后台管理Vue--8080端口 nginx-admin: image: nginx:alpine container_name: nginx-admin restart: always ports: - "8080:80" # 宿主机 8080 → 容器 80 volumes: - /home/vue/admin/dist:/usr/share/nginx/html # 后台dist - /home/vue/admin/nginx.conf:/etc/nginx/conf.d/default.conf
2个nginx配置文件一模一样,一个存放在前端目录/home/vue/web,一个存放在后台管理目录/home/vue/admin
【web/nginx.conf和admin/nginx.conf 都用这个】
server { listen 80; server_name localhost; # 这里必须是docker容器内路径!!! root /usr/share/nginx/html; index index.html; location / { try_files $uri $uri/ /index.html; }}
三、docker常见错误
4.1、运行docker命令报错error
Cannot connect to the Docker daemon at unix:///var/run/docker.sock. Is the docker daemon running?
errors pretty printing info
原因分析:
新安装了docker没有设置开机启动,所以docker没有正常启动。
将docker设置开机启动命令:systemctl enable docker
解决方法:
重启docker服务
命令sudo docker restart
然后再运行docker命令就正常了