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 版本信息:
wsl -l
wsl -v
wsl -l -v
二、安装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格式
"registry-mirrors": [
"https://mirror.ccs.tencentyun.com",
"http://hub-mirror.c.163.com",
"https://registry.docker-cn.com"
]
三、使用docker
docker常用命令:
3.1 安装redis
先有镜像,后有容器。
第一步:拉取镜像
# 以redis:7.0.14版本为例,在cmd中运行以下命令
docker pull redis:7.0.14
第二步:创建挂载目录
1)创建挂载目录data
2)下载相应版本的redis.conf 文件:https://github.com/redis/redis/tags
3)修改 redis.conf 文件中的参数 bind 为 0.0.0.0
第三步:创建并运行容器
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
参数解释:
--name redis-dev #给容器命名为redis-dev
-d #后台运行容器
--restart unless-stopped #设置重启策略为在容器手动停止时以外的任何原因退出时重启
-e tz=asia/shanghai #设置容器的时区
-p 16379:6379 #将容器的6379端口映射到主机的16379端口
-v d:\develop\docker\data\redis\redis.conf:/etc/redis/redis.conf #将配置文件映射到容器
-v d:\develop\docker\data\redis\data:/data #将数据目录映射到容器
redis:7.0.14 #使用版本为7.0.14的redis镜像
redis-server /etc/redis/redis.conf #使用容器内的redis配置启动服务
--requirepass #连接密码
--appendonly yes #开启持久化
第四步:验证
3.2 安装mysql
第一步、拉取镜像
# 以mysql8.0.35版本为例
docker pull mysql:8.0.35
第二步、创建docker网络
# 创建docker网络,便于容器可以通过网络与宿主机和其他容器通信
docker network create docker-network
第三步、创建挂载目录
第四步:创建并运行容器
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
参数解释:
--name mysql-dev #指定容器名称
-d #后台运行容器
--restart unless-stopped #设置重启策略为在容器手动停止时以外的任何原因退出时重启
-e tz=asia/shanghai #设置容器时区
--network docker-network #将容器连接到自定义的 docker网络中
-v #目录挂载
-p 13306:3306 #将容器的 3306端口映射到宿主机的 13306端口
-e mysql_root_password=123456 # mysql root用户的密码
mysql:8.0.35 #使用的mysql镜像版本
如果客户端连接时提示:public key retrieval is not allowed,可以尝试将驱动参数allowpublickeyretrieval修改为true:
3.3 安装nacos
第一步、拉取镜像
# 以v2.2.3版本为例
docker pull nacos/nacos-server:v2.2.3
第二步、拷贝nacos目录及文件到宿主机
1)挂载目录前,先启动一次docker
# 只要启动后是running状态就可以
docker run --name nacos-dev -d ^
-e mode=standalone ^
-p 18848:8848 ^
-p 19848:9848 ^
-p 19849:9849 ^
nacos/nacos-server:v2.2.3
2)拷贝nacos目录到宿主机
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
3)停止并删除容器
docker stop nacos-dev && docker rm nacos-dev
第三步:在mysql中执行nacos sql脚本
1)创建数据库:nacos(名称自定义)
2)执行sql脚本(mysql-schema.sql):
执行后会创建如下10几张表:
第四步:创建并以挂载目录的方式启动容器
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
参数解释
--name nacos-dev # 容器名称
-d # 后台运行容器
--restart unless-stopped #设置重启策略为在容器手动停止时以外的任何原因退出时重启
--network docker-network # 将容器连接到自定义的 docker网络中
--privileged=true # 提供一些额外的权限给容器
-p 18848:8848 # 将容器的 8848端口映射到宿主机的 18848端口
-p 19848:9848 # 将容器的 9848端口映射到宿主机的 19848端口
-p 19849:9849 # 将容器的 9849端口映射到宿主机的 19849端口
-e prefer_host_mode=hostname # 设置 nacos使用主机名模式
-e mode=standalone # 设置 nacos运行模式为单机模式
-e spring_datasource_platform=mysql # 设置数据源平台为 mysql
-e mysql_service_host=mysql-dev # mysql容器名
-e mysql_service_port=3306 # mysql容器端口
-e mysql_service_db_name=nacos # nacos数据库
-e mysql_service_user=root # 连接mysql用户
-e mysql_service_password=123456 # 连接mysql密码
-e jvm_xms=512m # 设置 java 虚拟机的初始堆大小为 512mb
-e jvm_xmx=512m # 设置 java 虚拟机的最大堆大小为 512mb
-e jvm_xmn=256m # 设置 java 虚拟机的新生代堆大小为 256mb
-e mysql_service_db_param="characterencoding=utf8&connecttimeout=10000&sockettimeout=30000&autoreconnect=true&usessl=false&servertimezone=utc&allowpublickeyretrieval=true" # 设置mysql连接的参数
-v d:\develop\docker\data\nacos\bin:/home/nacos/bin # 挂载宿主机的 nacos bin 目录到容器
-v d:\develop\docker\data\nacos\conf:/home/nacos/conf # 挂载宿主机的 nacos 配置目录到容器
-v d:\develop\docker\data\nacos\data:/home/nacos/data # 挂载宿主机的 nacos 数据目录到容器
-v d:\develop\docker\data\nacos\logs:/home/nacos/logs # 挂载宿主机的 nacos 日志目录到容器
nacos/nacos-server:v2.2.3 # 使用的 nacos镜像版本
第五步:验证
1)在浏览器中访问:http://localhost:18848/nacos
默认用户:nacos,密码:nacos
2)创建命名空间:
命名空间保存到了mysql,说明本次安装成功了。
3.4 安装minio
第一步、拉取镜像
docker pull minio/minio
第二步、创建挂载目录
第三步:创建并运行容器
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"
第四步:验证
访问 http://127.0.0.1:9000 或 http://127.0.0.1:9001
用户名、密码:minioadmin
3.5 安装xxl-job
官方文档:快速入门
第一步、拉取镜像
docker pull xuxueli/xxl-job-admin:2.4.0
第二步、执行初始化脚本
下载地址:tables_xxl_job.sql
第三步、创建挂载目录
配置文件下载:application.properties
修改 mysql 连接信息:
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
第四步:创建并运行容器
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
第五步:验证
http://localhost:8081/xxl-job-admin/
用户名:admin
密码:123456
新增一个任务:
查看数据库:
四、使用 docker-compose 管理容器
4.1 创建 docker-compose.yml 文件
# 定义compose语义版本
version: '3.8'
# 定义服务
services:
redis:
image: redis:7.0.14
container_name: redis
# 重启策略:在容器手动停止时以外的任何原因退出时重启
restart: unless-stopped
# 启动redis服务;设置密码为123456;开启redis持久化
command: redis-server /etc/redis/redis.conf --requirepass 123456 --appendonly yes
# 设置容器时区、语言环境
environment:
tz: asia/shanghai
lang: en_us.utf-8
volumes:
# 需要下载相应版本的redis.conf文件,下载地址:https://github.com/redis/redis/tags
- "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"
# 设置mysql服务器的最大连接数、指定mysql服务器的默认字符集、指定mysql服务器的默认排序规则
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连接信息
- mysql_service_host=mysql # 注意:因为是容器间通信,这里要设置mysql容器名,`127.0.0.1`或`localhost`不好使
- mysql_service_db_name=nacos
- mysql_service_port=3306
- mysql_service_user=root
- mysql_service_password=123456
# 修改jvm参数
- jvm_xms=256m #-xms default: 1g
- jvm_xmx=256m #-xmx default: 1g
- jvm_xmn=128m #-xmn default: 512m
- jvm_ms=32m #-xx:metaspacesize default: 128m
- jvm_mms=64m #-xx:maxmetaspacesize default: 320m
- 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
4.2 启动服务
# 进入 docker-compose.yml 所在目录,执行以下命令
docker-compose up -d
发表评论