Docker在Windows下的安装及使用
一、前言
在Windows上安装Docker时,可以选择使用不同的后端。
其中两个常见的选择是:WSL 2(Windows Subsystem for Linux 2)和 Hyper-V 后端。此外,还可以选择使用Windows容器。
三者的区别了解即可,推荐用WSL 2,因为虚拟机太重了…懂的都懂。
1. WSL 2 后端:
- 使用WSL 2后端时,Docker将与WSL 2集成,利用WSL 2提供的Linux内核。这使得Docker容器在Windows上运行时,实际上是在WSL 2中运行的,享受到了与Linux系统更为接近的环境。WSL 2能够提供更好的性能和与Linux相似的开发体验。
- 优点:更轻量,性能较好,支持在Windows和Linux之间无缝切换。
- 缺点:可能不支持所有Windows特性,对于某些特殊应用可能存在兼容性问题。
2. Hyper-V 后端:
- 使用Hyper-V后端时,Docker容器将在Hyper-V虚拟机中运行,与主机Windows系统隔离。这种方式比较传统,类似于在虚拟机中运行Docker。
- 优点:更好的隔离性,适用于需要强大隔离的场景。
- 缺点:相对于WSL 2,可能稍显重量级,性能稍逊一些。
3. Windows容器:
- Windows容器是一种与Hyper-V相似的隔离技术,允许在Windows上运行基于Windows的Docker容器。与Linux容器相比,Windows容器更适用于运行基于Windows的应用程序。
- 优点:对于Windows应用程序的兼容性更好。
- 缺点:相较于WSL 2,可能性能较差,并且一些Linux特性可能不支持。
Docker提供了GUI前端 Docker Desktop,下面会介绍。
本人电脑是Win10专业版,默认安装完是WSL 2(Windows Subsystem for Linux)。
在 cmd 中查看 wsl 版本信息:
1 2 3 4 5 6
| wsl -l
wsl -v
wsl -l -v 12345
|
二、安装Docker
2.1 安装 docker desktop
官方下载地址:https://docs.docker.com/desktop/install/windows-install/
下载完成后进行安装,只能装在C盘,不支持更改安装目录。
可以在cmd中执行:docker version来验证是否安装成功。
2.2 修改 docker desktop 配置
1)开启WSL 2运行Docker,正常是默认开启的
2)修改资源存储目录:
3)配置国内镜像源,可以添加多个,json格式
1 2 3 4 5 6
| "registry-mirrors": [ "https://mirror.ccs.tencentyun.com", "http://hub-mirror.c.163.com", "https://registry.docker-cn.com" ] 12345
|
三、使用Docker
Docker常用命令:https://blog.csdn.net/mst_sun/article/details/135133934
3.1 安装redis
先有镜像,后有容器。
第一步:拉取镜像
1 2 3
| docker pull redis:7.0.14 12
|
第二步:创建挂载目录
1)创建挂载目录data
2)下载相应版本的redis.conf 文件:https://github.com/redis/redis/tags
3)修改 redis.conf 文件中的参数 bind 为 0.0.0.0
第三步:创建并运行容器
Linux 中换行输入符是 \
Windows cmd 中换行输入符是 ^
1 2 3 4 5 6 7 8 9 10 11
| docker run --name redis-dev -d ^ --restart unless-stopped ^ -e TZ=Asia/Shanghai ^ -p 16379:6379 ^ -v D:\Develop\Docker\Data\redis\redis.conf:/etc/redis/redis.conf ^ -v D:\Develop\Docker\Data\redis\data:/data ^ redis:7.0.14 ^ redis-server /etc/redis/redis.conf ^ --requirepass 123456 ^ --appendonly yes 12345678910
|
参数解释:
1 2 3 4 5 6 7 8 9 10 11 12
| --name redis-dev -d --restart unless-stopped -e TZ=Asia/Shanghai -p 16379:6379 -v D:\Develop\Docker\Data\redis\redis.conf:/etc/redis/redis.conf -v D:\Develop\Docker\Data\redis\data:/data redis:7.0.14 redis-server /etc/redis/redis.conf --requirepass --appendonly yes 1234567891011
|
第四步:验证
3.2 安装mysql
第一步、拉取镜像
1 2 3
| docker pull mysql:8.0.35 12
|
第二步、创建docker网络
1 2 3
| docker network create docker-network 12
|
第三步、创建挂载目录
第四步:创建并运行容器
1 2 3 4 5 6 7 8 9 10 11
| docker run --name mysql-dev -d ^ --restart unless-stopped ^ -e TZ=Asia/Shanghai ^ --network docker-network ^ -v D:\Develop\Docker\Data\mysql\log:/var/log/mysql ^ -v D:\Develop\Docker\Data\mysql\data:/var/lib/mysql ^ -v D:\Develop\Docker\Data\mysql\conf:/etc/mysql/conf.d ^ -p 13306:3306 ^ -e MYSQL_ROOT_PASSWORD=123456 ^ mysql:8.0.35 12345678910
|
参数解释:
1 2 3 4 5 6 7 8 9 10
| --name mysql-dev -d --restart unless-stopped -e TZ=Asia/Shanghai --network docker-network -v -p 13306:3306 -e MYSQL_ROOT_PASSWORD=123456 mysql:8.0.35 123456789
|
如果客户端连接时提示:Public Key Retrieval is not allowed,可以尝试将驱动参数allowPublicKeyRetrieval修改为true:
3.3 安装nacos
第一步、拉取镜像
1 2 3
| docker pull nacos/nacos-server:v2.2.3 12
|
第二步、拷贝nacos目录及文件到宿主机
1)挂载目录前,先启动一次docker
1 2 3 4 5 6 7 8
| docker run --name nacos-dev -d ^ -e MODE=standalone ^ -p 18848:8848 ^ -p 19848:9848 ^ -p 19849:9849 ^ nacos/nacos-server:v2.2.3 1234567
|
2)拷贝nacos目录到宿主机
1 2 3 4 5
| docker cp nacos-dev:/home/nacos/bin D:\Develop\Docker\Data\nacos docker cp nacos-dev:/home/nacos/conf D:\Develop\Docker\Data\nacos docker cp nacos-dev:/home/nacos/data D:\Develop\Docker\Data\nacos docker cp nacos-dev:/home/nacos/logs D:\Develop\Docker\Data\nacos 1234
|
3)停止并删除容器
1 2
| docker stop nacos-dev && docker rm nacos-dev 1
|
第三步:在mysql中执行nacos sql脚本
1)创建数据库:nacos(名称自定义)
2)执行sql脚本(mysql-schema.sql):
执行后会创建如下10几张表:
第四步:创建并以挂载目录的方式启动容器
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25
| docker run --name nacos-dev -d ^ --restart unless-stopped ^ --network docker-network ^ --privileged=true ^ -p 18848:8848 ^ -p 19848:9848 ^ -p 19849:9849 ^ -e PREFER_HOST_MODE=hostname ^ -e MODE=standalone ^ -e SPRING_DATASOURCE_PLATFORM=mysql ^ -e MYSQL_SERVICE_HOST=mysql-dev ^ -e MYSQL_SERVICE_PORT=3306 ^ -e MYSQL_SERVICE_DB_NAME=nacos ^ -e MYSQL_SERVICE_USER=root ^ -e MYSQL_SERVICE_PASSWORD=123456 ^ -e JVM_XMS=512m ^ -e JVM_XMX=512m ^ -e JVM_XMN=256m ^ -e MYSQL_SERVICE_DB_PARAM="characterEncoding=utf8&connectTimeout=10000&socketTimeout=30000&autoReconnect=true&useSSL=false&serverTimezone=UTC&allowPublicKeyRetrieval=true" ^ -v D:\Develop\Docker\Data\nacos\bin:/home/nacos/bin ^ -v D:\Develop\Docker\Data\nacos\conf:/home/nacos/conf ^ -v D:\Develop\Docker\Data\nacos\data:/home/nacos/data ^ -v D:\Develop\Docker\Data\nacos\logs:/home/nacos/logs ^ nacos/nacos-server:v2.2.3 123456789101112131415161718192021222324
|
参数解释
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26
| --name nacos-dev -d --restart unless-stopped --network docker-network --privileged=true -p 18848:8848 -p 19848:9848 -p 19849:9849 -e PREFER_HOST_MODE=hostname -e MODE=standalone -e SPRING_DATASOURCE_PLATFORM=mysql -e MYSQL_SERVICE_HOST=mysql-dev -e MYSQL_SERVICE_PORT=3306 -e MYSQL_SERVICE_DB_NAME=nacos -e MYSQL_SERVICE_USER=root -e MYSQL_SERVICE_PASSWORD=123456 -e JVM_XMS=512m -e JVM_XMX=512m -e JVM_XMN=256m -e MYSQL_SERVICE_DB_PARAM="characterEncoding=utf8&connectTimeout=10000&socketTimeout=30000&autoReconnect=true&useSSL=false&serverTimezone=UTC&allowPublicKeyRetrieval=true" -v D:\Develop\Docker\Data\nacos\bin:/home/nacos/bin -v D:\Develop\Docker\Data\nacos\conf:/home/nacos/conf -v D:\Develop\Docker\Data\nacos\data:/home/nacos/data -v D:\Develop\Docker\Data\nacos\logs:/home/nacos/logs nacos/nacos-server:v2.2.3 12345678910111213141516171819202122232425
|
第五步:验证
1)在浏览器中访问:http://localhost:18848/nacos
默认用户:nacos,密码:nacos
2)创建命名空间:
命名空间保存到了mysql,说明本次安装成功了。
3.4 安装minio
第一步、拉取镜像
1 2
| docker pull minio/minio 1
|
第二步、创建挂载目录
第三步:创建并运行容器
1 2 3 4 5 6 7 8 9 10
| docker run --name minio -d ^ -e TZ=Asia/Shanghai ^ -e "MINIO_ACCESS_KEY=minioadmin" ^ -e "MINIO_SECRET_KEY=minioadmin" ^ -p 9000:9000 ^ -p 9001:9001 ^ -v D:\Develop\Docker\Data\minio\data:/data ^ -v D:\Develop\Docker\Data\minio\config:/root/.minio ^ minio/minio:latest server /data --console-address ":9001" 123456789
|
第四步:验证
访问 http://127.0.0.1:9000 或 http://127.0.0.1:9001
用户名、密码:minioadmin
3.5 安装xxl-job
官方文档:快速入门
第一步、拉取镜像
1 2
| docker pull xuxueli/xxl-job-admin:2.4.0 1
|
第二步、执行初始化脚本
下载地址:tables_xxl_job.sql
第三步、创建挂载目录
配置文件下载:application.properties
修改 mysql 连接信息:
1 2 3 4 5
| spring.datasource.url=jdbc:mysql://[IP 或 容器名]:3306/xxl_job?useUnicode=true&characterEncoding=UTF-8&autoReconnect=true&serverTimezone=Asia/Shanghai spring.datasource.username=root spring.datasource.password=123456 spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver 1234
|
第四步:创建并运行容器
1 2 3 4 5 6 7 8 9
| docker run --name xxl-job -d ^ --network docker-network ^ -e TZ=Asia/Shanghai ^ -e PARAMS="--spring.config.location=/application.properties" ^ -p 8081:8080 ^ -v D:\Develop\Docker\Data\xxl-job\logs:/data/applogs ^ -v D:\Develop\Docker\Data\xxl-job\conf\application.properties:/application.properties ^ xuxueli/xxl-job-admin:2.4.0 12345678
|
第五步:验证
http://localhost:8081/xxl-job-admin/
用户名:admin
密码:123456
新增一个任务:
查看数据库:
四、使用 docker-compose 管理容器
4.1 创建 docker-compose.yml 文件
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130
| version: '3.8'
services: redis: image: redis:7.0.14 container_name: redis restart: unless-stopped command: redis-server /etc/redis/redis.conf --requirepass 123456 --appendonly yes environment: TZ: Asia/Shanghai LANG: en_US.UTF-8 volumes: - "D:\\Develop\\Docker\\Data\\redis\\redis.conf:/etc/redis/redis.conf" - "D:\\Develop\\Docker\\Data\\redis\\data:/data" ports: - "6379:6379" networks: - docker-network mysql: image: mysql:8.0.35 container_name: mysql restart: unless-stopped environment: TZ: Asia/Shanghai MYSQL_ROOT_PASSWORD: 123456 MYSQL_ROOT_AUTH_PLUGIN: caching_sha2_password LANG: en_US.UTF-8 ports: - "3306:3306" command: --max_connections=1000 --character-set-server=utf8mb4 --collation-server=utf8mb4_general_ci volumes: - "D:\\Develop\\Docker\\Data\\mysql\\log:/var/log/mysql" - "D:\\Develop\\Docker\\Data\\mysql\\data:/var/lib/mysql" - "D:\\Develop\\Docker\\Data\\mysql\\conf:/etc/mysql/conf.d" networks: - docker-network healthcheck: test: [ "CMD", "mysqladmin" ,"ping", "-h", "localhost" ] retries: 10 nacos: image: nacos/nacos-server:v2.2.3 container_name: nacos restart: unless-stopped volumes: - "D:\\Develop\\Docker\\Data\\nacos\\bin:/home/nacos/bin" - "D:\\Develop\\Docker\\Data\\nacos\\conf:/home/nacos/conf" - "D:\\Develop\\Docker\\Data\\nacos\\data:/home/nacos/data" - "D:\\Develop\\Docker\\Data\\nacos\\logs:/home/nacos/logs" environment: - PREFER_HOST_MODE=hostname - MODE=standalone - SPRING_DATASOURCE_PLATFORM=mysql - MYSQL_SERVICE_HOST=mysql - MYSQL_SERVICE_DB_NAME=nacos - MYSQL_SERVICE_PORT=3306 - MYSQL_SERVICE_USER=root - MYSQL_SERVICE_PASSWORD=123456 - JVM_XMS=256m - JVM_XMX=256m - JVM_XMN=128m - JVM_MS=32m - JVM_MMS=64m - MYSQL_SERVICE_DB_PARAM=characterEncoding=utf8&connectTimeout=10000&socketTimeout=30000&autoReconnect=true&useSSL=false&serverTimezone=UTC&allowPublicKeyRetrieval=true ports: - "8848:8848" - "9848:9848" - "9849:9849" networks: - docker-network healthcheck: test: ["CMD-SHELL", "echo 'ruok' | curl -s telnet://localhost:8848 || exit 1"] retries: 10 depends_on: mysql: condition: service_healthy
minio: image: minio/minio:latest container_name: minio restart: no command: server /data --console-address ":9001" environment: TZ: Asia/Shanghai LANG: en_US.UTF-8 volumes: - "D:\\Develop\\Docker\\Data\\minio\\data:/data" - "D:\\Develop\\Docker\\Data\\minio\\config:/root/.minio" ports: - "9000:9000" - "9001:9001" networks: - docker-network
xxl-job: image: xuxueli/xxl-job-admin:2.4.0 container_name: xxl-job restart: no environment: TZ: Asia/Shanghai LANG: en_US.UTF-8 PARAMS: '--spring.config.location=/application.properties' volumes: - "D:\\Develop\\Docker\\Data\\xxl-job\\logs:/data/applogs" - "D:\\Develop\\Docker\\Data\\xxl-job\\conf\\application.properties:/application.properties" ports: - "8081:8080" depends_on: - mysql networks: - docker-network
networks: docker-network: external: true 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129
|
4.2 启动服务
1 2 3
| docker-compose up -d 12
|