• Window for Docker深入浅出


    docker简介

    docker是一个基于go语言实现的开源容器。

    docker可以使项目的部署变得简单,只要服务器上也安装了docker,那么就不需要再在上面安装类似于tomcat,mysql,jdk这些软件,直接将docker镜像部署到服务器上的docker即可正常运行。

    docker容器和虚拟机的比较

    虚拟机是独立于本地操作系统的一个新的操作系统,占有自己独立的内存,cpu等本地资源,而且操作系统本身也消耗大量的系统资源。如果虚拟机数量越多,那么每个虚拟机所能分配的系统资源就会被减少。使用虚拟机的好处是能够在一台服务器上实现多个操作系统并行的工作,比如window安装了虚拟机软件vmware,上面可以同时运行ubuntu,centos,window7、8、10等不同类型和版本的操作系统。

    docker容器不是一个新的虚拟机,它不会占用独立的系统资源,它运行在本地操作系统之上,多个docker容器共享本地操作系统的资源。docker容器不是虚拟机,所以同一台机器上的所有docker容器只适用于本地操作系统环境。使用docker的好处是,docker不会创建一个新的系统,所以一个docker容器占用的资源比虚拟机要低很多。而且多个docker是共享本地操作系统资源的,不会出现因容器资源不够需要重新调整的情况,因为docker容器直接用的就是本地操作系统的资源,并且多个docker容器共享这些资源,多个docker容器会自动协调处理。

    Window下使用docker

    下载:Desktop for Windows

    我的window for docker版本如下

    image-20200123200444967

    一般电脑默认安装的window家庭版,所以至少需要window专业版,因为需要window支持Hyper-V功能

    如果必须用家庭版的话,就只能安装toolbox工具了,具体方法网上百度。

    image-20200123155840764

    注册中心及配置国内镜像

    Docker用Registry来保存用户构建的镜像。Registry分为公共和私有两种。Docker公司运营公共的Registry叫做Docker Hub。用户可以在Docker Hub注册账号,分享并保存自己的镜像(说明:在Docker Hub下载镜像巨慢,可以自己构建私有的Registry)。

    Linux:修改/etc/docker/daemon.json

    Window:修改%programdata%dockerconfigdaemon.json,在文件夹中直接输入%programdata%就可以跳转到%programdata%所指向的目录

    registry-mirrors加上国内镜像地址https://docker.mirrors.ustc.edu.cn,如果没有就创建

    image-20200123174828142

    或者在docker可视化工具上面直接设置

    我用的是网易源:http://hub-mirror.c.163.com

    image-20200123200827481

    用了一会儿发现还是有问题,经常网络超时导致下载失败。后来发现阿里云上提供了镜像加速服务

    https://cr.console.aliyun.com/cn-hangzhou/instances/mirrors

    image-20200123212337561

    加速器地址处提供了更加稳定高速的下载通道

    docker镜像相关命令

    docker镜像可以看作容器的模版,容器可以在镜像的基础上做任意修改而不会影响到镜像文件。如果想保留修改过后的容器配置,也可以再将容器备份成镜像文件来重复使用

    • docker images:查看所有镜像

      image-20200123173720465

      可以看到,当前我没有安装任何镜像

      REPOSITORY:镜像名称

      TAG:版本号,因为docker可以安装多个不同版本的镜像,以此来区分

      IMAGE ID:镜像id,全局唯一

      CREATED:镜像创建时间

      SIZE:镜像大小

    • docker search 镜像名:镜像查找

      image-20200123175134782

      NAME:仓库名称

      DESCRIPTION:镜像描述

      STARS:用户评价,反应一个镜像的受欢迎程度

      OFFICIAL:是否官方

      AUTOMATED:自动构建,表示该镜像由Docker Hub自动构建流程创建的

    • docker pull 镜像名称:从中央仓库中下载镜像到本地

      比如下载mysql,版本是5.7.28

      image-20200123212041821

    • docker rmi 镜像ID:根据镜像id删除镜像,被删除的镜像不能被任意一个容器依赖

    docker容器相关命令

    • docker run:创建容器

      -i:运行容器

      -t:运行容器后并进入命令行,命令行退出时容器关闭,这是交互式运行容器

      -d:后台运行容器,这是守护式运行容器

      --name:为创建的容器命名

      -p:表示端口映射,前者是宿主机端口,后者是容器内的映射端口。可以使用多个-p做多个端口映射

      -v:表示目录映射关系(前者是宿主机目录,后者是映射到宿主机上的目录),可以使用多个-v做多个目录或文件映射。注意:最好做目录映射,在宿主机上做修改,然后共享到容器上。

    (1)交互式方式创建容器

    docker run -it --name=容器名称 镜像:版本 /bin/bash
    

    不过在window上这样并没有直接进入容器命令行,需要启动容器之后,再用docker exec命令进入

    启动一个有centos镜像的容器

    docker run -id --name=mycentos centos:7 /bin/bash
    

    进入到centos系统容器的命令行

    docker exec -it ebddc3d7ef1c /bin/bash
    

    image-20200123222810217

    退出容器输入exit

    (2)守护式方式创建容器

    docker run -di --name=容器名称 镜像:版本
    

    如果容器已被创建并且启动,则用docker exec 容器名称(或者容器ID)命令再次声明容器是以交互式或者守护式启动

    • docker start 容器名称或id:启动容器

    • docker stop 容器名称或id:停止容器

    • docker ps:查看正在运行的容器

    • docker ps –a:查看所有容器

    • docker ps –l:查看最后一次运行的容器

    • docker ps -f status=exited:查看停止的容器

    • docker rm 容器名(容器id):删除容器

    文件拷贝

    • docker cp 需要拷贝的文件或目录 容器名称:容器目录:拷贝文件到容器中

      在桌面上创建一个文件a.txt:内容如下

      image-20200123223256380

      将本地文件拷贝到centos容器中,ebddc3d7ef1c是容器启动的id

      docker cp .a.txt ebddc3d7ef1c:/
      

      查看centos容器,发现根目录多了a.txt文件

      image-20200123223501042

    • docker cp 容器名称:容器目录 需要拷贝的文件或目录:拷贝容器文件到本地

      删除本地的a.txt文件,运行命令

      docker cp ebddc3d7ef1c:/a.txt C:/Users/dagger/Desktop 
      

    目录挂载

    在容器启动时,使用-v将本地目录挂载到容器目录上,这样我们就可以通过修改宿主机某个目录的文件从而去影响容器

    docker run -di -v 本地目录:容器目录 --name=mycentos3 centos:7
    

    如果报以下错误:Unhandled exception: Drive has not been shared,则在window for docker上右击进入settings,在Resources -> FILE SHARING勾选要共享的盘符,然后apply

    image-20200123230435987

    本地目录:

    image-20200123230957514

    运行命令

    docker run -di -v D:Usersdaggerdocker:/usr/local/myhtml233 --name=mycentos centos:7
    

    进入centos容器,查看/usr/local/myhtml233目录

    image-20200123231057091

    发现文件夹共享成功

    查看容器信息

    docker inspect 容器名(容器id)
    
    [
        {
            "Id": "f8eb81b80dacb99c95c80d5203b9315d8088d283a74aa3324aa08a8970701447",
            "Created": "2020-01-23T15:05:08.218933031Z",
            "Path": "/bin/bash",
            "Args": [],
            "State": {
                "Status": "running",
                "Running": true,
                "Paused": false,
                "Restarting": false,
                "OOMKilled": false,
                "Dead": false,
                "Pid": 3941,
                "ExitCode": 0,
                "Error": "",
                "StartedAt": "2020-01-23T15:05:08.69116933Z",
                "FinishedAt": "0001-01-01T00:00:00Z"
            },
            "Image": "sha256:5e35e350aded98340bc8fcb0ba392d809c807bc3eb5c618d4a0674d98d88bccd",
            "ResolvConfPath": "/var/lib/docker/containers/f8eb81b80dacb99c95c80d5203b9315d8088d283a74aa3324aa08a8970701447/resolv.conf",
            "HostnamePath": "/var/lib/docker/containers/f8eb81b80dacb99c95c80d5203b9315d8088d283a74aa3324aa08a8970701447/hostname",
            "HostsPath": "/var/lib/docker/containers/f8eb81b80dacb99c95c80d5203b9315d8088d283a74aa3324aa08a8970701447/hosts",
            "LogPath": "/var/lib/docker/containers/f8eb81b80dacb99c95c80d5203b9315d8088d283a74aa3324aa08a8970701447/f8eb81b80dacb99c95c80d5203b9315d8088d283a74aa3324aa08a8970701447-json.log",
            "Name": "/mycentos",
            "RestartCount": 0,
            "Driver": "overlay2",
            "Platform": "linux",
            "MountLabel": "",
            "ProcessLabel": "",
            "AppArmorProfile": "",
            "ExecIDs": null,
            "HostConfig": {
                "Binds": [
                    "/host_mnt/d/Users/dagger/docker:/usr/local/myhtml233"
                ],
                "ContainerIDFile": "",
                "LogConfig": {
                    "Type": "json-file",
                    "Config": {}
                },
                "NetworkMode": "default",
                "PortBindings": {},
                "RestartPolicy": {
                    "Name": "no",
                    "MaximumRetryCount": 0
                },
                "AutoRemove": false,
                "VolumeDriver": "",
                "VolumesFrom": null,
                "CapAdd": null,
                "CapDrop": null,
                "Capabilities": null,
                "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",
                "ConsoleSize": [
                    30,
                    98
                ],
                "Isolation": "",
                "CpuShares": 0,
                "Memory": 0,
                "NanoCpus": 0,
                "CgroupParent": "",
                "BlkioWeight": 0,
                "BlkioWeightDevice": [],
                "BlkioDeviceReadBps": null,
                "BlkioDeviceWriteBps": null,
                "BlkioDeviceReadIOps": null,
                "BlkioDeviceWriteIOps": null,
                "CpuPeriod": 0,
                "CpuQuota": 0,
                "CpuRealtimePeriod": 0,
                "CpuRealtimeRuntime": 0,
                "CpusetCpus": "",
                "CpusetMems": "",
                "Devices": [],
                "DeviceCgroupRules": null,
                "DeviceRequests": null,
                "KernelMemory": 0,
                "KernelMemoryTCP": 0,
                "MemoryReservation": 0,
                "MemorySwap": 0,
                "MemorySwappiness": null,
                "OomKillDisable": false,
                "PidsLimit": null,
                "Ulimits": null,
                "CpuCount": 0,
                "CpuPercent": 0,
                "IOMaximumIOps": 0,
                "IOMaximumBandwidth": 0,
                "MaskedPaths": [
                    "/proc/asound",
                    "/proc/acpi",
                    "/proc/kcore",
                    "/proc/keys",
                    "/proc/latency_stats",
                    "/proc/timer_list",
                    "/proc/timer_stats",
                    "/proc/sched_debug",
                    "/proc/scsi",
                    "/sys/firmware"
                ],
                "ReadonlyPaths": [
                    "/proc/bus",
                    "/proc/fs",
                    "/proc/irq",
                    "/proc/sys",
                    "/proc/sysrq-trigger"
                ]
            },
            "GraphDriver": {
                "Data": {
                    "LowerDir": "/var/lib/docker/overlay2/2ba91f7449cd21329222ff031dbf670babcc46eb1715d25854991447f8279a17-init/diff:/var/lib/docker/overlay2/b2189a3b36619b294ab99d2cf8f7a1ac6341f9cde9026af1cc064787df1294be/diff",
                    "MergedDir": "/var/lib/docker/overlay2/2ba91f7449cd21329222ff031dbf670babcc46eb1715d25854991447f8279a17/merged",
                    "UpperDir": "/var/lib/docker/overlay2/2ba91f7449cd21329222ff031dbf670babcc46eb1715d25854991447f8279a17/diff",
                    "WorkDir": "/var/lib/docker/overlay2/2ba91f7449cd21329222ff031dbf670babcc46eb1715d25854991447f8279a17/work"
                },
                "Name": "overlay2"
            },
            "Mounts": [
                {
                    "Type": "bind",
                    "Source": "/host_mnt/d/Users/dagger/docker",
                    "Destination": "/usr/local/myhtml233",
                    "Mode": "",
                    "RW": true,
                    "Propagation": "rprivate"
                }
            ],
            "Config": {
                "Hostname": "f8eb81b80dac",
                "Domainname": "",
                "User": "",
                "AttachStdin": false,
                "AttachStdout": false,
                "AttachStderr": false,
                "Tty": false,
                "OpenStdin": true,
                "StdinOnce": false,
                "Env": [
                    "PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"
                ],
                "Cmd": [
                    "/bin/bash"
                ],
                "Image": "centos:7",
                "Volumes": null,
                "WorkingDir": "",
                "Entrypoint": null,
                "OnBuild": null,
                "Labels": {
                    "org.label-schema.build-date": "20191001",
                    "org.label-schema.license": "GPLv2",
                    "org.label-schema.name": "CentOS Base Image",
                    "org.label-schema.schema-version": "1.0",
                    "org.label-schema.vendor": "CentOS"
                }
            },
            "NetworkSettings": {
                "Bridge": "",
                "SandboxID": "76994e52c7c0b37ee472ecff2e08d8354f7d7f8cf63f7b3d40b8e7b8a5c8984f",
                "HairpinMode": false,
                "LinkLocalIPv6Address": "",
                "LinkLocalIPv6PrefixLen": 0,
                "Ports": {},
                "SandboxKey": "/var/run/docker/netns/76994e52c7c0",
                "SecondaryIPAddresses": null,
                "SecondaryIPv6Addresses": null,
                "EndpointID": "f1d0e4e91ff76b7b194007f445a7105a9aa189921f11622fc721dc6caab9a0c3",
                "Gateway": "172.17.0.1",
                "GlobalIPv6Address": "",
                "GlobalIPv6PrefixLen": 0,
                "IPAddress": "172.17.0.2",
                "IPPrefixLen": 16,
                "IPv6Gateway": "",
                "MacAddress": "02:42:ac:11:00:02",
                "Networks": {
                    "bridge": {
                        "IPAMConfig": null,
                        "Links": null,
                        "Aliases": null,
                        "NetworkID": "77e1860258ee30a2fb27db24dca139cf4853d7891e4895f61b419a4e438294b8",
                        "EndpointID": "f1d0e4e91ff76b7b194007f445a7105a9aa189921f11622fc721dc6caab9a0c3",
                        "Gateway": "172.17.0.1",
                        "IPAddress": "172.17.0.2",
                        "IPPrefixLen": 16,
                        "IPv6Gateway": "",
                        "GlobalIPv6Address": "",
                        "GlobalIPv6PrefixLen": 0,
                        "MacAddress": "02:42:ac:11:00:02",
                        "DriverOpts": null
                    }
                }
            }
        }
    ]
    

    获取指定信息,比如获取ip,外面一层引号,两边两个大括号,前面的.不能少

    docker inspect --format='{{.NetworkSettings.IPAddress}}' 容器名(容器id)
    
  • 相关阅读:
    Silverlight Working with Sockets
    在Visual Studio 2010中使用gtest
    一个简单排序(就是传说中的冒泡)
    lucene锁与IndexModifier
    SQL Server 中的CTE递归查询
    利用Intelligencia.UrlRewriter.dll实现URL重写
    hibernate.cfg.xml详解
    WCF能干什么?
    C# 生成PDF
    MS SQL Server查询优化方法
  • 原文地址:https://www.cnblogs.com/dagger9527/p/12231674.html
Copyright © 2020-2023  润新知