windows下安装和使用docker(一)
以下为windows下安装docker和使用的过程
本机环境如下


一、下载安装程序
Docker Desktop: The #1 Containerization Tool for Developers | Docker
二、运行安装程序,按照向导


三、重新机器以后,进行配置

1) 自动会更新系统
启动docker-desktop时,提示wsl包版本需要更新,也就是太旧了
WSL是适用于 Linux 的 Windows 子系统(WSL)是 Windows作系统的一项功能,可用于运行 Linux 文件系统,以及直接在 Windows 上运行Linux 命令行工具和 GUI 应用。
Docker Desktop 需依赖WSL

2)更新系统


四、windows键+r 运行 ,键入cmd/wsl之后运行效果
1) cmd 运行之后,只是支持docker等有限的linux,命令

2) wsl 运行之后,可以输入linux命令

3) 点击进入cygwin 窗口, 依据你安装时,安装的软件包来支持命令行,例如wget默认没有需要你勾选

五、使用docker
进入 cmd 可以执行docker 命令
C:\Users\king\welcome-to-docker>docker --help Usage: docker [OPTIONS] COMMAND A self-sufficient runtime for containers Common Commands: run Create and run a new container from an image(创建并启动一个新的容器,从镜像) exec Execute a command in a running container ps List containers build Build an image from a Dockerfile (用Dockerfile来创建image) bake Build from a file (从一个文件去创建) pull Download an image from a registry (下载一个镜像) push Upload an image to a registry images List images (列出镜像) login Authenticate to a registry logout Log out from a registry search Search Docker Hub for images version Show the Docker version information info Display system-wide information
docker --version 这个命令会显示你安装的 Docker 版本,说明 Docker 已经成功运行。
C:\Users\king\welcome-to-docker>docker --version
Docker version 28.5.1, build e180ab8
一些其他命令的使用
C:\Users\king\welcome-to-docker>docker docker-compose --version
Docker version 28.5.1, build e180ab8
C:\Users\king\welcome-to-docker>docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
C:\Users\king\welcome-to-docker>docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
//更多命令参考 docker | Docker Docs
//详细查看 version信息
C:\Users\king>docker version
Client:
Version: 28.5.1
API version: 1.51
Go version: go1.24.8
Git commit: e180ab8
Built: Wed Oct 8 12:19:16 2025
OS/Arch: windows/amd64
Context: desktop-linux
Server: Docker Desktop 4.50.0 (209931)
Engine:
Version: 28.5.1
API version: 1.51 (minimum version 1.24)
Go version: go1.24.8
Git commit: f8215cc
Built: Wed Oct 8 12:17:24 2025
OS/Arch: linux/amd64
Experimental: false
containerd:
Version: 1.7.27
GitCommit: 05044ec0a9a75232cad458027ca83437aae3f4da
runc:
Version: 1.2.5
GitCommit: v1.2.5-0-g59923ef
docker-init:
Version: 0.19.0
GitCommit: de40ad0
docker desktop 软件主界面如下

注意: docker运行期间,docker-desktop软件不能关闭
会提示:
C:\Users\king>docker ps
error during connect: Get "http://%2F%2F.%2Fpipe%2FdockerDesktopLinuxEngine/v1.51/containers/json": open //./pipe/dockerDesktopLinuxEngine: The system cannot find the file specified.
六、配置文件所在位置

七、启动容器,加载现成的ngnix镜像
C:\Users\king>docker pull registry.cn-shenzhen.aliyuncs.com/amgs/nginx:latest latest: Pulling from amgs/nginx 13e320bf29cd: Pull complete 7b50399908e1: Pull complete 8cf9fb7a0b56: Pull complete 8cc1569e58f5: Pull complete 57b64962dd94: Pull complete 650ee30bbe5e: Pull complete 362f35df001b: Pull complete Digest: sha256:10d5e08c653bc46286c2e4eaa095783d14be6486825fea247efab07ab329cda0 Status: Downloaded newer image for registry.cn-shenzhen.aliyuncs.com/amgs/nginx:latest registry.cn-shenzhen.aliyuncs.com/amgs/nginx:latest
你在Docker Desktop 中你可以查看和设置更改本地镜像仓库的位置,图中为默认的存放位置

#查看镜像
C:\Users\king>docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
registry.cn-shenzhen.aliyuncs.com/amgs/nginx latest 10d5e08c653b 11 months ago 279MB
#查看运行的容器,里面什么也没有
C:\Users\king>docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
运行ngnix,启动容器
C:\Users\king>docker run --name mynginxrongqi -p 8080:80 -d registry.cn-shenzhen.aliyuncs.com/amgs/nginx
121d6c6da243d505d55eb28a80a656111adf9ed7752ae29e070a8fc1f3a0a44e
再次查看运行的容器,会看到
C:\Users\king>docker ps
CONTAINER ID IMAGE COMMAND CREAT STATUS PORTS NAMES
121d6c6da243 registry.cn-shenzhen.aliyuncs.com/amgs/nginx "/docker-entrypoint.…" 5 minutes ago Up 5 minutes 0.0.0.0:8080->80/tcp, [::]:8080->80/tcp mynginxrongqi
访问网页8080端口

相关参考命令:
docker 提供了丰富的命令来管理和操作镜像,包括:
#操作镜像
docker images : 列出所有本地镜像
docker image ls:列出本地镜像。
docker image pull(docker pull):从远程仓库拉取镜像到本地。
docker image push(docker push):将本地image(镜像)推送到远程仓库。
docker image inspect(docker inspect):查看镜像的详细信息。
docker rmi/rm -f imageID #通过imageID 删除单个image
docker rmi/rm -f $(docker images -aq) #删除全部的image
docker save ... : 将image从仓库导出,保存为tar压缩文件,用于其他机器或备份。
docker load ... : 在本地加载tar压缩文件来创建新image,并放入仓库。
#容器操作
docker restart 容器id: 重启某容器
docker start 容器id: 启动某容器(容器运行后,可以停止)
docker stop 容器id:
#另外我们可以导出保存为tar形式,放在别的地方使用,比如另一台安装有docker的机器上加载
C:\Users\king>docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
registry.cn-shenzhen.aliyuncs.com/amgs/nginx latest 10d5e08c653b 11 months ago 279MB
C:\Users\king>docker save -o mynginx.tar registry.cn-shenzhen.aliyuncs.com/amgs/nginx 10d5e08c653b
1)-o(--output) 表示指定导出的tar包名称,这里是mynginx.tar
2) registry.cn-shenzhen.aliyuncs.com/amgs/nginx 表示REPOSITORY
3) 10d5e08c653b 表示要导出的镜像,即IMAGE ID
#load tar文件
C:\Users\king>docker load -i mynginx.tar
Loaded image: registry.cn-shenzhen.aliyuncs.com/amgs/nginx:latest
Loaded image ID: sha256:10d5e08c653bc46286c2e4eaa095783d14be6486825fea247efab07ab329cda0
#加载后会发现tag为none或不可见
C:\Users\king>docker images -a
REPOSITORY TAG IMAGE ID CREATED SIZE
registry.cn-shenzhen.aliyuncs.com/amgs/nginx latest 10d5e08c653b 11 months ago 279MB
#用docker tag 给镜像设置标签
C:\Users\king>docker tag 10d5e08c653b myngnix:last
#再次查看镜像时会显示出来
C:\Users\king>docker images -a
REPOSITORY TAG IMAGE ID CREATED SIZE
myngnix last 10d5e08c653b 11 months ago 279MB
registry.cn-shenzhen.aliyuncs.com/amgs/nginx latest 10d5e08c653b 11 months ago 279MB
八、修改 nginx.conf
(1) 方法一、安装带有vim/vi的nginx镜像(有的不带vim/vi编辑器)
#注意 121d6c6da243 是nginx 容器id,非image id C:\Users\king>docker exec -it 121d6c6da243 /bin/bash root@121d6c6da243:/# 解释下 exec 命令代表附着到运行着的容器内部 -it 是 -i 与 -t两个参数合并写法,-i -t 标志着为我们指定的容器创建了TTY并捕捉了STDIN 121d6c6da243 是我们要进入的容器Id /bin/bash 指定了执行命令的shell #编辑nginx.conf文件 vim /etc/nginx/nginx.conf #ngnix容器内的默认首页html文件目录为
vim /usr/share/nginx/html
#重新启动nginx /usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx.conf #执行exit命令我们可以从容器内部退出
(2)方法二、把文件cp出来,修改之后再cp回容器
docker cp 容器id:容器内目录 宿主机目录
举例如下
1.复制目录
C:\Users\king>docker cp f5fbd5d9f5a4:/etc/nginx ./ #(./表示宿主机当前目录,这里会把/etc/nginx下的所有文件cp出来到当前目录)
Successfully copied 16.9kB to C:\Users\king\.\
symlink \usr\lib\nginx\modules C:\Users\king\nginx\modules: A required privilege is not held by the client.
2.复制单个文件
C:\Users\king>docker cp f5fbd5d9f5a4:/etc/nginx/nginx.conf d:/dockerfileop
Successfully copied 2.56kB to d:\dockerfileop
九、我们查看下运行的容器相关信息
C:\Users\king>docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 121d6c6da243 registry.cn-shenzhen.aliyuncs.com/amgs/nginx "/docker-entrypoint.…" About an hour ago Up About an hour 0.0.0.0:8080->80/tcp,
[::]:8080->80/tcp mynginxrongqi C:\Users\king>docker inspect 121d6c6da243 [ { "Id": "121d6c6da243d505d55eb28a80a656111adf9ed7752ae29e070a8fc1f3a0a44e", "Created": "2025-11-09T07:41:29.109070054Z", "Path": "/docker-entrypoint.sh", "Args": [ //启动时相关命令参数 "nginx", "-g", "daemon off;" ], "State": { //当前的状态 "Status": "running", "Running": true, "Paused": false, "Restarting": false, "OOMKilled": false, "Dead": false, "Pid": 924, "ExitCode": 0, "Error": "", "StartedAt": "2025-11-09T07:41:29.58946416Z", "FinishedAt": "0001-01-01T00:00:00Z" }, //镜像信息 "Image": "sha256:10d5e08c653bc46286c2e4eaa095783d14be6486825fea247efab07ab329cda0", "ResolvConfPath": "/var/lib/docker/containers/121d6c6da243d505d55eb28a80a656111adf9ed7752ae29e070a8fc1f3a0a44e/resolv.conf", "HostnamePath": "/var/lib/docker/containers/121d6c6da243d505d55eb28a80a656111adf9ed7752ae29e070a8fc1f3a0a44e/hostname", "HostsPath": "/var/lib/docker/containers/121d6c6da243d505d55eb28a80a656111adf9ed7752ae29e070a8fc1f3a0a44e/hosts", "LogPath": "/var/lib/docker/containers/121d6c6da243d505d55eb28a80a656111adf9ed7752ae29e070a8fc1f3a0a44e/121d6c6da243d505d55eb28a80a656111adf9ed7752ae29e070a8fc1f3a0a44e-json.log", "Name": "/mynginxrongqi", //容器的名称 "RestartCount": 0, "Driver": "overlayfs", "Platform": "linux", "MountLabel": "", "ProcessLabel": "", "AppArmorProfile": "", "ExecIDs": null, "HostConfig": { "Binds": null, "ContainerIDFile": "", "LogConfig": { "Type": "json-file", "Config": {} }, "NetworkMode": "bridge", "PortBindings": { "80/tcp": [ { "HostIp": "", "HostPort": "8080" } ] }, "RestartPolicy": { "Name": "no", "MaximumRetryCount": 0 }, "AutoRemove": false, "VolumeDriver": "", "VolumesFrom": null, "ConsoleSize": [ 30, 120 ], "CapAdd": null, "CapDrop": null, "CgroupnsMode": "private", "Dns": [], "DnsOptions": [], "DnsSearch": [], "ExtraHosts": null, "GroupAdd": null, "IpcMode": "private", "Cgroup": "", "Links": null, "OomScoreAdj": 0, "PidMode": "", "Privileged": false, "PublishAllPorts": false, "ReadonlyRootfs": false, "SecurityOpt": null, "UTSMode": "", "UsernsMode": "", "ShmSize": 67108864, "Runtime": "runc", "Isolation": "", "CpuShares": 0, "Memory": 0, "NanoCpus": 0, "CgroupParent": "", "BlkioWeight": 0, "BlkioWeightDevice": [], "BlkioDeviceReadBps": [], "BlkioDeviceWriteBps": [], "BlkioDeviceReadIOps": [], "BlkioDeviceWriteIOps": [], "CpuPeriod": 0, "CpuQuota": 0, "CpuRealtimePeriod": 0, "CpuRealtimeRuntime": 0, "CpusetCpus": "", "CpusetMems": "", "Devices": [], "DeviceCgroupRules": null, "DeviceRequests": null, "MemoryReservation": 0, "MemorySwap": 0, "MemorySwappiness": null, "OomKillDisable": null, "PidsLimit": null, "Ulimits": [], "CpuCount": 0, "CpuPercent": 0, "IOMaximumIOps": 0, "IOMaximumBandwidth": 0, "MaskedPaths": [ "/proc/asound", "/proc/acpi", "/proc/interrupts", "/proc/kcore", "/proc/keys", "/proc/latency_stats", "/proc/timer_list", "/proc/timer_stats", "/proc/sched_debug", "/proc/scsi", "/sys/firmware", "/sys/devices/virtual/powercap" ], "ReadonlyPaths": [ "/proc/bus", "/proc/fs", "/proc/irq", "/proc/sys", "/proc/sysrq-trigger" ] }, "GraphDriver": { "Data": null, "Name": "overlayfs" }, "Mounts": [], "Config": { "Hostname": "121d6c6da243", "Domainname": "", "User": "", "AttachStdin": false, "AttachStdout": false, "AttachStderr": false, "ExposedPorts": { "80/tcp": {} }, "Tty": false, "OpenStdin": false, "StdinOnce": false, "Env": [ "PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin", "NGINX_VERSION=1.27.3", "NJS_VERSION=0.8.7", "NJS_RELEASE=1~bookworm", "PKG_RELEASE=1~bookworm", "DYNPKG_RELEASE=1~bookworm" ], "Cmd": [ "nginx", "-g", "daemon off;" ], "Image": "registry.cn-shenzhen.aliyuncs.com/amgs/nginx", "Volumes": null, "WorkingDir": "", "Entrypoint": [ "/docker-entrypoint.sh" ], "OnBuild": null, "Labels": { "maintainer": "NGINX Docker Maintainers \u003cdocker-maint@nginx.com\u003e" }, "StopSignal": "SIGQUIT", "StopTimeout": 1 }, "NetworkSettings": { "Bridge": "", "SandboxID": "3f2f691137826d2b0b5bf4b404e974b0e45a950db7eadfaa53b8f55b4fa4880c", "SandboxKey": "/var/run/docker/netns/3f2f69113782", "Ports": { "80/tcp": [ { "HostIp": "0.0.0.0", "HostPort": "8080" }, { "HostIp": "::", "HostPort": "8080" } ] }, "HairpinMode": false, "LinkLocalIPv6Address": "", "LinkLocalIPv6PrefixLen": 0, "SecondaryIPAddresses": null, "SecondaryIPv6Addresses": null, "EndpointID": "4d8d3ca919b778339105131803df11a82eca0a387e59c47752fe96bafaba2df4", "Gateway": "172.17.0.1", "GlobalIPv6Address": "", "GlobalIPv6PrefixLen": 0, "IPAddress": "172.17.0.2", "IPPrefixLen": 16, "IPv6Gateway": "", "MacAddress": "ea:b2:9d:e8:71:0c", "Networks": { "bridge": { "IPAMConfig": null, "Links": null, "Aliases": null, "MacAddress": "ea:b2:9d:e8:71:0c", "DriverOpts": null, "GwPriority": 0, "NetworkID": "ca29df9c0be06622ce4d8bb4e9ab32b5dd13d91b56b4c8aa3038f96a94814fde", "EndpointID": "4d8d3ca919b778339105131803df11a82eca0a387e59c47752fe96bafaba2df4", "Gateway": "172.17.0.1", "IPAddress": "172.17.0.2", "IPPrefixLen": 16, "IPv6Gateway": "", "GlobalIPv6Address": "", "GlobalIPv6PrefixLen": 0, "DNSNames": null } } }, "ImageManifestDescriptor": { "mediaType": "application/vnd.docker.distribution.manifest.v2+json", "digest": "sha256:10d5e08c653bc46286c2e4eaa095783d14be6486825fea247efab07ab329cda0", "size": 1778, "annotations": { "containerd.io/distribution.source.registry.cn-shenzhen.aliyuncs.com": "amgs/nginx", "io.containerd.image.name": "registry.cn-shenzhen.aliyuncs.com/amgs/nginx:latest", "org.opencontainers.image.ref.name": "latest" }, "platform": { "architecture": "amd64", "os": "linux" } } } ]
十、创建新的镜像存放仓库
举例: 创建containerexample容器并启动服务
#首先在在主机上新建一个目录,供存储镜像
mkdir d:\dockerwarehouse
#创建容器
docker run -d -p 4000:5000 --name containerexample --restart=always --privileged=true -v d:\dockerwarehouse:/var/lib/registry registryimagename
#解释:
-p 4000:5000 端口
--name containerexample 运行的容器名称
--restart=always 自动重启
--privileged=true 安全模块selinux把权限禁止了,加上这行是给容器增加执行权限
-v d:\dockerwarehouse:/var/lib/registry 把主机的d:\dockerwarehouse目录挂载到containerexample容器的/var/lib/registry目录下,假如有删除容器操作,我们的镜像也不会被删除
registryimagename 镜像名称
#查看启动的容器
docker ps -a
十一、操作容器
C:\Users\king>docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES f5fbd5d9f5a4 registry.cn-shenzhen.aliyuncs.com/amgs/nginx "/docker-entrypoint.…" 3 hours ago Up 3 hours 0.0.0.0:8080->80/tcp, [::]:8080->80/tcp mynginxrongqi #停止某容器 C:\Users\king>docker stop f5fbd5d9f5a4 f5fbd5d9f5a4 #启动某容器 C:\Users\king>docker start f5fbd5d9f5a4 f5fbd5d9f5a4
十二、查看某容器的日志
C:\Users\king>docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES f5fbd5d9f5a4 registry.cn-shenzhen.aliyuncs.com/amgs/nginx "/docker-entrypoint.…" 3 hours ago Up 3 hours 0.0.0.0:8080->80/tcp, [::]:8080->80/tcp mynginxrongqi 查看 f5fbd5d9f5a4 容器的日志 C:\Users\king>docker logs f5fbd5d9f5a4 /docker-entrypoint.sh: /docker-entrypoint.d/ is not empty, will attempt to perform configuration /docker-entrypoint.sh: Looking for shell scripts in /docker-entrypoint.d/ /docker-entrypoint.sh: Launching /docker-entrypoint.d/10-listen-on-ipv6-by-default.sh 10-listen-on-ipv6-by-default.sh: info: Getting the checksum of /etc/nginx/conf.d/default.conf 10-listen-on-ipv6-by-default.sh: info: Enabled listen on IPv6 in /etc/nginx/conf.d/default.conf /docker-entrypoint.sh: Sourcing /docker-entrypoint.d/15-local-resolvers.envsh /docker-entrypoint.sh: Launching /docker-entrypoint.d/20-envsubst-on-templates.sh /docker-entrypoint.sh: Launching /docker-entrypoint.d/30-tune-worker-processes.sh /docker-entrypoint.sh: Configuration complete; ready for start up 2025/11/09 12:02:44 [notice] 1#1: using the "epoll" event method 2025/11/09 12:02:44 [notice] 1#1: nginx/1.27.3 2025/11/09 12:02:44 [notice] 1#1: built by gcc 12.2.0 (Debian 12.2.0-14) 2025/11/09 12:02:44 [notice] 1#1: OS: Linux 6.6.87.2-microsoft-standard-WSL2 2025/11/09 12:02:44 [notice] 1#1: getrlimit(RLIMIT_NOFILE): 1048576:1048576 2025/11/09 12:02:44 [notice] 1#1: start worker processes 2025/11/09 12:02:44 [notice] 1#1: start worker process 29 2025/11/09 12:02:44 [notice] 1#1: start worker process 30
小结:
docker安装为默认安装
(1)配置文件在
C:\Users\king\.docker
(2)安装在C:\Program Files\Docker
(3)docker、docker-compose
相关下载
1、docker-desktop下载:
https://desktop.docker.com/win/main/amd64/Docker%20Desktop%20Installer.exe?utm_source=docker&utm_medium=webreferral&utm_campaign=dd-smartbutton&utm_location=module&_gl=1*is5ldm*_gcl_au*MTcxOTcwODc0My4xNzYyNjU3NzI0*_ga*MjAwNzg3OTUxOS4xNzYyNjU3NzI0*_ga_XJWPQMJYHQ*czE3NjI2NTc3MjQkbzEkZzEkdDE3NjI2NTc4MDMkajU5JGwwJGgw
2.nginx下载:
registry.cn-shenzhen.aliyuncs.com/amgs/nginx:latest

浙公网安备 33010602011771号