windows下安装和使用docker(一)

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

image

 

image


一、下载安装程序
       Docker Desktop: The #1 Containerization Tool for Developers | Docker


二、运行安装程序,按照向导

image

       

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

 

image

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

image

 

 

 2)更新系统

image

 

image

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

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

image    image

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

image

 

五、使用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  软件主界面如下

image

   注意: 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.


六、配置文件所在位置

image

 

七、启动容器,加载现成的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 中你可以查看和设置更改本地镜像仓库的位置,图中为默认的存放位置

image

 

#查看镜像

 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端口

image

 

相关参考命令:

 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
    

 


 

   

 

posted @ 2025-11-09 11:14  jinzi  阅读(0)  评论(0)    收藏  举报