文章目录
-
- [1、安装 docker desktop](#1、安装 docker desktop)
- [2、windows 安装 wsl](#2、windows 安装 wsl)
- [3、docker 配置加速镜像源](#3、docker 配置加速镜像源)
- [4、使用 docker 命令操作服务](#4、使用 docker 命令操作服务)
-
- [4.1 启动服务](#4.1 启动服务)
- [4.2 停止服务](#4.2 停止服务)
- [4.3 重启服务](#4.3 重启服务)
- [4.4 停止并删除所有容器](#4.4 停止并删除所有容器)
- [4.5 重新拉起(重点、常用)](#4.5 重新拉起(重点、常用))
- 5、服务测试与日志排查
1、安装 docker desktop
建议使用 https://docs.docker.com/desktop/release-notes/#4430 版本
如果安装最新版本安装时可能会被提示 "系统不支持"


注意安装完成后,会提示你重启windows系统,记得保存相关文件后再点击进行重启!!!
博主吃了亏,所以给大家提个醒
cmd 输入 docker --version 查看输出内容,判断是否安装docker成功。

2、windows 安装 wsl
打开 cmd 或者 powershell,输入
cmd
wsl --install
等待安装完成。
安装过程大概率会很慢,挂在后台,耐心等待即可。
安装完成后,会让你定义wsl用户名和密码,定义完之后就自动会打开 wsl 的界面。

3、docker 配置加速镜像源
到镜像站中去 pull image 时会出现超时的问题,这种一般都是网络问题,需要配置加速镜像源。
在 setting -> Docker Engine 中新增:
json
{
"registry-mirrors": [
"https://docker.1ms.run",
"https://mirror.ccs.tencentyun.com",
"https://hub-mirror.c.163.com"
]
}
4、使用 docker 命令操作服务
启动后端服务之前呢,先梳理下后端服务依赖了哪些外部服务,我这边依赖了 mysql、redis、nacos,所以在启动后端服务之前,需要先使用 docker 启动外部服务,再启动后端业务服务。
这些启动的配置和运行的方式需要写在 yml 配置文件中。这块就不详细展开了,工作中能看懂,和进行调整就行,最佳实践是让 ai 来写~
例子1,外部服务的启动 docker-compose.yml 内容:
yml
services:
mysql:
image: mysql:8.0
container_name: flashsale-mysql
restart: unless-stopped
environment:
MYSQL_ROOT_PASSWORD: root
TZ: Asia/Shanghai
ports:
- "3306:3306"
command:
- --default-authentication-plugin=mysql_native_password
- --character-set-server=utf8mb4
- --collation-server=utf8mb4_unicode_ci
volumes:
- ./mysql-data:/var/lib/mysql
- ./sql:/docker-entrypoint-initdb.d
redis:
image: redis:7.2
container_name: flashsale-redis
restart: unless-stopped
ports:
- "6379:6379"
nacos:
image: nacos/nacos-server:v2.3.2
container_name: flashsale-nacos
restart: unless-stopped
environment:
MODE: standalone
NACOS_AUTH_ENABLE: "false"
JVM_XMS: 256m
JVM_XMX: 256m
TZ: Asia/Shanghai
ports:
- "8848:8848"
- "9848:9848"
- "9849:9849"
例子2,后端业务服务的 docker-compose.backend.yml 内容:
yml
services:
service-user:
container_name: flashsale-service-user
build:
context: ../flashsale-backend
dockerfile: ../deploy/docker/Dockerfile.backend
args:
JAR_FILE: service-user/target/service-user-1.0.0-SNAPSHOT.jar
environment:
TZ: Asia/Shanghai
SPRING_PROFILES_ACTIVE: dev
SPRING_CLOUD_NACOS_DISCOVERY_SERVER_ADDR: nacos:8848
SPRING_CLOUD_NACOS_CONFIG_SERVER_ADDR: nacos:8848
SPRING_DATASOURCE_URL: jdbc:mysql://mysql:3306/flashsale_user?useUnicode=true&characterEncoding=UTF-8&serverTimezone=Asia/Shanghai&useSSL=false&allowPublicKeyRetrieval=true
SPRING_DATASOURCE_USERNAME: root
SPRING_DATASOURCE_PASSWORD: root
SPRING_REDIS_HOST: redis
SPRING_REDIS_PORT: 6379
depends_on:
- mysql
- redis
- nacos
ports:
- "9001:9001"
restart: unless-stopped
service-product:
container_name: flashsale-service-product
build:
context: ../flashsale-backend
dockerfile: ../deploy/docker/Dockerfile.backend
args:
JAR_FILE: service-product/target/service-product-1.0.0-SNAPSHOT.jar
environment:
TZ: Asia/Shanghai
SPRING_PROFILES_ACTIVE: dev
SPRING_CLOUD_NACOS_DISCOVERY_SERVER_ADDR: nacos:8848
SPRING_CLOUD_NACOS_CONFIG_SERVER_ADDR: nacos:8848
SPRING_DATASOURCE_URL: jdbc:mysql://mysql:3306/flashsale_product?useUnicode=true&characterEncoding=UTF-8&serverTimezone=Asia/Shanghai&useSSL=false&allowPublicKeyRetrieval=true
SPRING_DATASOURCE_USERNAME: root
SPRING_DATASOURCE_PASSWORD: root
SPRING_REDIS_HOST: redis
SPRING_REDIS_PORT: 6379
depends_on:
- mysql
- redis
- nacos
ports:
- "9002:9002"
restart: unless-stopped
service-inventory:
container_name: flashsale-service-inventory
build:
context: ../flashsale-backend
dockerfile: ../deploy/docker/Dockerfile.backend
args:
JAR_FILE: service-inventory/target/service-inventory-1.0.0-SNAPSHOT.jar
environment:
TZ: Asia/Shanghai
SPRING_PROFILES_ACTIVE: dev
SPRING_CLOUD_NACOS_DISCOVERY_SERVER_ADDR: nacos:8848
SPRING_CLOUD_NACOS_CONFIG_SERVER_ADDR: nacos:8848
SPRING_DATASOURCE_URL: jdbc:mysql://mysql:3306/flashsale_inventory?useUnicode=true&characterEncoding=UTF-8&serverTimezone=Asia/Shanghai&useSSL=false&allowPublicKeyRetrieval=true
SPRING_DATASOURCE_USERNAME: root
SPRING_DATASOURCE_PASSWORD: root
SPRING_REDIS_HOST: redis
SPRING_REDIS_PORT: 6379
depends_on:
- mysql
- redis
- nacos
ports:
- "9003:9003"
restart: unless-stopped
service-order:
container_name: flashsale-service-order
build:
context: ../flashsale-backend
dockerfile: ../deploy/docker/Dockerfile.backend
args:
JAR_FILE: service-order/target/service-order-1.0.0-SNAPSHOT.jar
environment:
TZ: Asia/Shanghai
SPRING_PROFILES_ACTIVE: dev
SPRING_CLOUD_NACOS_DISCOVERY_SERVER_ADDR: nacos:8848
SPRING_CLOUD_NACOS_CONFIG_SERVER_ADDR: nacos:8848
SPRING_DATASOURCE_URL: jdbc:mysql://mysql:3306/flashsale_order?useUnicode=true&characterEncoding=UTF-8&serverTimezone=Asia/Shanghai&useSSL=false&allowPublicKeyRetrieval=true
SPRING_DATASOURCE_USERNAME: root
SPRING_DATASOURCE_PASSWORD: root
SPRING_REDIS_HOST: redis
SPRING_REDIS_PORT: 6379
depends_on:
- mysql
- redis
- nacos
ports:
- "9004:9004"
restart: unless-stopped
service-gateway:
container_name: flashsale-service-gateway
build:
context: ../flashsale-backend
dockerfile: ../deploy/docker/Dockerfile.backend
args:
JAR_FILE: service-gateway/target/service-gateway-1.0.0-SNAPSHOT.jar
environment:
TZ: Asia/Shanghai
SPRING_PROFILES_ACTIVE: dev
SPRING_CLOUD_NACOS_DISCOVERY_SERVER_ADDR: nacos:8848
SPRING_CLOUD_NACOS_CONFIG_SERVER_ADDR: nacos:8848
depends_on:
- nacos
- service-user
- service-product
- service-inventory
- service-order
ports:
- "8080:8080"
restart: unless-stopped
4.1 启动服务
指定多个 compose 配置文件,运行 start命令进行启动服务
docker compose -f docker-compose.yml -f docker-compose.backend.yml start

4.2 停止服务
指定多个 compose 配置文件,运行 stop 命令进行停止服务
docker compose -f docker-compose.yml -f docker-compose.backend.yml stop

4.3 重启服务
指定多个 compose 配置文件,运行 restart 命令进行重启服务
docker compose -f docker-compose.yml -f docker-compose.backend.yml restart

4.4 停止并删除所有容器
指定多个 compose 配置文件,运行 down 命令进行停止并删除服务
docker compose -f docker-compose.yml -f docker-compose.backend.yml down

4.5 重新拉起(重点、常用)
指定多个 compose 配置文件,运行 up -d 命令重新拉起服务(通过现有的镜像创建容器)
docker compose -f docker-compose.yml -f docker-compose.backend.yml up -d

这里需要补充下,后端代码更新了,需要重新发版进行联调,也需要用到该命令,只是需要加下 --build 告诉 docker 要重新构建镜像,但在这之前别忘了重新打包,下面讲下操作步骤:
1、后端服务重新打包
执行mvn clean package -Dskiptests重新打包

2、重新构建镜像并拉起容器
执行 docker compose -f docker-compose.yml -f docker-compose.backend.yml up -d --build

5、服务测试与日志排查
此时进行登录,被提示:用户名或密码不正确

测了好几个密码,admin、admin123,都不正确,索性重新注册个账号了。

在 docker desktop 中进入指定容器内部查看日志:

当然,也可以在本地使用 docker 命令查看指定容器内的日志。
这里演示查看 user 服务容器内的日志。
1、先通过 docker ps 获取容器信息列表

此时能够获取到每个容器的ID和容器名称
2、再通过 docker logs -f 容器名/容器ID 查看指定容器内的日志
命令:docker logs -f 047f20f7af3e 或者 docker logs -f flashsale-service-user
