Docker在Windows下的安装及使用

未来可期丶 2024-06-14 10:37:02 阅读 65

Docker在Windows下的安装及使用

一、前言二、安装Docker2.1 安装 docker desktop2.2 修改 docker desktop 配置 三、使用Docker3.1 安装redis3.2 安装mysql3.3 安装nacos3.4 安装minio3.5 安装xxl-job 四、使用 docker-compose 管理容器4.1 创建 docker-compose.yml 文件4.2 启动服务

一、前言

在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 -lwsl -vwsl -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常用命令:https://blog.csdn.net/mst_sun/article/details/135133934

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

第三步:创建并运行容器

Linux 中换行输入符是 \

Windows cmd 中换行输入符是 ^

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\nacosdocker cp nacos-dev:/home/nacos/conf D:\Develop\Docker\Data\nacosdocker cp nacos-dev:/home/nacos/data D:\Develop\Docker\Data\nacosdocker 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/Shanghaispring.datasource.username=rootspring.datasource.password=123456spring.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-networknetworks: docker-network: external: true

4.2 启动服务

# 进入 docker-compose.yml 所在目录,执行以下命令docker-compose up -d

在这里插入图片描述



声明

本文内容仅代表作者观点,或转载于其他网站,本站不以此文作为商业用途
如有涉及侵权,请联系本站进行删除
转载本站原创文章,请注明来源及作者。