zoukankan      html  css  js  c++  java
  • docker 命令(未完...)

    镜像

    docker image ls --help 查看帮助文档
    docker image ls -f 过滤器,是个好东西。虽然目前没发现好在哪里...

    列出所有镜像

    [admin@centos7 ~]$ docker image ls
    REPOSITORY    TAG       IMAGE ID       CREATED        SIZE
    hello-world   latest    d1165f221234   2 months ago   13.3kB
    

    镜像体积

    [admin@centos7 ~]$ docker system df
    TYPE            TOTAL     ACTIVE    SIZE      RECLAIMABLE
    Images          1         0         13.34kB   13.34kB (100%)
    Containers      0         0         0B        0B
    Local Volumes   0         0         0B        0B
    Build Cache     0         0         0B        0B
    

    列出虚悬镜象

    [admin@centos7 ~]$ docker image ls -f dangling=true
    REPOSITORY   TAG       IMAGE ID   CREATED   SIZE
    
    

    删除镜像

    docker image rm 可根据镜像ID,标签,摘要删除
    利用docker image ls配合删除,如 docker image rm $(docker image ls -q redis)
    遇到的问题

    1. 提示有容器正在运行不能删除
    [admin@centos7 ~]$ docker image rm $(docker image ls -q nginx)
    Error response from daemon: conflict: unable to delete 19486213a479 (cannot be forced) - image is being used by running container acf4ac2e29af
    Error response from daemon: conflict: unable to delete d1a364dc548d (cannot be forced) - image has dependent child images
    
    

    try: 停止容器

    [admin@centos7 ~]$ docker container stop acf4ac2e29af
    acf4ac2e29af
    [admin@centos7 ~]$ docker container stop f041072b1682
    f041072b1682
    
    
    1. 提示有容器存在不能删除
    [admin@centos7 ~]$ docker image rm $(docker image ls -q nginx)
    Error response from daemon: conflict: unable to delete 19486213a479 (must be forced) - image is being used by stopped container acf4ac2e29af
    Error response from daemon: conflict: unable to delete d1a364dc548d (cannot be forced) - image has dependent child images
    
    

    try :删除容器
    docker container prune
    再次删除 - 成功

    定制镜像

    利用commit理解构建镜像【最好不要用!!!】

    docker run --name webserver -d -p 80:80 nginx
    通过localhost访问 (若是虚拟机,通过ip访问。获取ip:ifconfig -a

    尝试修改首页内容:

    [admin@centos7 ~]$ docker exec -it webserver bash
    root@f041072b1682:/# echo '<h1>hello,world!!!<h1>' > /usr/share/nginx/html/index.html
    root@f041072b1682:/# exit
    exit
    

    为什么不要用commit?

    1. 不仅更改了目标文件,很多无关的文件也被改动了,臃肿
    2. 黑箱操作,除了制作者知道“做了什么”,其他人根本不知道

    Dockerfile

    docker run --name webserver -d -p 80:80 nginx
    创建Dockerfile

    mkdir mynginx
    cd mynginx
    cat>>Dockerfile
    FROM nginx
    RUN echo '<h1>helo,docker.</h1>' > /usr/share/nginx/html/index.html
    【ctrl+d 退出】
    

    构建镜像(请注意v3后面有个.,不要遗漏了)
    docker build -t nginx:v3 .

    运行
    docker run --name web2 -d -p 81:80 nginx:v3
    通过localhost访问 (若是虚拟机,通过ip访问。获取ip:ifconfig -a

    docker commit的区别(个人理解,不确定是否有误)
    docker commit是在原来镜像的基础上修改并提交 从而构建新镜像,而Dockerfile不会修改原来的镜像。(通过docker history nginx:latestdocker history nginx:v3 查看可得知)

    构建上下文

    Docker 构建上下文就是 Docker 客户端上传给服务端的 tar 文件解压后的内容,也即 docker build 命令行后面指定路径下的文件。
    从上述这句话简单理解为“.”即为上下文路径。
    “上下文”这个概念还不太好理解,请阅读原文

    容器

    新建并启动

    前提: 没有指定镜像ubuntu 18.04
    docker run ubuntu:18.04 /bin/echo 'Hello world'
    可以看到没有指定镜像,会自动从registry下载,然后利用镜像创建并启动容器,执行容器并自动终止容器

    查看容器信息

    docker container ls

    获取容器输出信息

    docker container logs [container ID or NAMES]

    后台运行(守护态)容器

    docker run -d ubuntu:18.04 /bin/echo 'Hello world' 自动终止容器

    终止容器

    docker container stop

    启动容器

    docker container start
    重启 docker container restart

    查看所有容器(包含终止状态的)

    docker container ls -a

    进入容器

    docker exec or docker attach
    推荐使用exec,因为执行exit不会终止容器

    删除容器

    docker container rm
    清除所有终止状态的容器
    docker container prune

    使用网络

    外部访问容器

    • -P: 随机映射一个端口到内部容器开放的网络端口
      假设随机端口号为“32768”,以nginx为例:
      比如nginx ,默认端口为80 ,那执行 docker run -d -P nginx 后系统会自动分配端口号32768映射到80
    • -p: 指定映射的端口号并且一个指定端口只能绑定一个容器
      docker run -p ip:hostPort:containerPort 指定映射使用一个特定地址
      docker run -p ip::containerPort 映射指定地址的任意端口(系统自动分配)
      docker run -p hostPort:containerPort
      访问多个端口配置:
    docker run -d 
        -p 80:80 
        -p 443:443 
        nginx:alpine
    

    查看端口配置

    [admin@centos7 ~]$ docker port ee
    3306/tcp -> 0.0.0.0:3306
    3306/tcp -> :::3306
    
    

    "ee"是container的ID前两位
    使用docker inspect ee还可以看到容器自己的内部网络和ip地址

    [
        {
            "Id": "eef935e57bdba34f5543cb4b6c9a34cfddddf53aaaad503422a3064e85864a8f",
            "Created": "2021-05-28T08:28:01.688452011Z",
            "Path": "/entrypoint.sh",
            "Args": [
                "mysqld"
            ],
            "State": {
                "Status": "running",
                "Running": true,
                "Paused": false,
                "Restarting": false,
                "OOMKilled": false,
                "Dead": false,
                "Pid": 9397,
                "ExitCode": 0,
                "Error": "",
                "StartedAt": "2021-05-28T08:28:03.207678971Z",
                "FinishedAt": "0001-01-01T00:00:00Z"
            },
            "Image": "sha256:13efa2a210dd30a2f1249611a7b8bc17d27001ecd2431da849a985e5231ba565",
            "ResolvConfPath": "/var/lib/docker/containers/eef935e57bdba34f5543cb4b6c9a34cfddddf53aaaad503422a3064e85864a8f/resolv.conf",
            "HostnamePath": "/var/lib/docker/containers/eef935e57bdba34f5543cb4b6c9a34cfddddf53aaaad503422a3064e85864a8f/hostname",
            "HostsPath": "/var/lib/docker/containers/eef935e57bdba34f5543cb4b6c9a34cfddddf53aaaad503422a3064e85864a8f/hosts",
            "LogPath": "/var/lib/docker/containers/eef935e57bdba34f5543cb4b6c9a34cfddddf53aaaad503422a3064e85864a8f/eef935e57bdba34f5543cb4b6c9a34cfddddf53aaaad503422a3064e85864a8f-json.log",
            "Name": "/node1",
            "RestartCount": 0,
            "Driver": "overlay2",
            "Platform": "linux",
            "MountLabel": "",
            "ProcessLabel": "",
            "AppArmorProfile": "",
            "ExecIDs": null,
            "HostConfig": {
                "Binds": [
                    "v1:/var/lib/mysql"
                ],
                "ContainerIDFile": "",
                "LogConfig": {
                    "Type": "json-file",
                    "Config": {}
                },
                "NetworkMode": "net1",
                "PortBindings": {
                    "3306/tcp": [
                        {
                            "HostIp": "",
                            "HostPort": "3306"
                        }
                    ]
                },
                "RestartPolicy": {
                    "Name": "no",
                    "MaximumRetryCount": 0
                },
                "AutoRemove": false,
                "VolumeDriver": "",
                "VolumesFrom": null,
                "CapAdd": null,
                "CapDrop": null,
                "CgroupnsMode": "host",
                "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": [
                    0,
                    0
                ],
                "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/6fa8747c4a52149185fd5251aeea7f343da837f651117867ea01f7ceb697981b-init/diff:/var/lib/docker/overlay2/7d43b4531453aef07cfee614fde8f7da3a202d72e7c385b06101f956ab3870c1/diff:/var/lib/docker/overlay2/c4c44ebbe8ce6c280d7db483cc7c5ed4284a7dcd486a78f90e2a6afc321bf663/diff:/var/lib/docker/overlay2/d58232ae5c870e11c60f0fbcb4597f7a4692699d078b8aad09273ad0ead26774/diff:/var/lib/docker/overlay2/ef892da0cb66ef59f05f21d1381afff688649651e4c963ff275b2a9f3e284df8/diff:/var/lib/docker/overlay2/aba250a727fa3eaceaaecfc82e55c1a8cb1767b819f06988cf1aa928c2bde26b/diff:/var/lib/docker/overlay2/6e42a40f4796686b01b70bd59c2cdf7e4b5f98ddba9e9f3735eadfd231b42fbc/diff:/var/lib/docker/overlay2/1ad2744dcd2088696f0edc44ae089d7ac4993e9ed33c3b6c7c0f10d4b4321144/diff:/var/lib/docker/overlay2/21f4fef789c645e7e5a0ad02e04b4f39389987c66b622038828845cbba368655/diff:/var/lib/docker/overlay2/0568bfa07d3c7650eaa2f3af5496dacf2d82b04529316f3cdc238887331cff07/diff:/var/lib/docker/overlay2/77733cfb761a741c5835e99dcfe141595ed76398ccbc92f1e98e8b41e48e1d65/diff:/var/lib/docker/overlay2/5a4fe2ddeec13136519be4936f23473948a61817cfcb4e207799680692a1f9a5/diff:/var/lib/docker/overlay2/1ee4980528b372ce550099e64aaa8e4de4de47be46c2cb236264f4c1030d309a/diff",
                    "MergedDir": "/var/lib/docker/overlay2/6fa8747c4a52149185fd5251aeea7f343da837f651117867ea01f7ceb697981b/merged",
                    "UpperDir": "/var/lib/docker/overlay2/6fa8747c4a52149185fd5251aeea7f343da837f651117867ea01f7ceb697981b/diff",
                    "WorkDir": "/var/lib/docker/overlay2/6fa8747c4a52149185fd5251aeea7f343da837f651117867ea01f7ceb697981b/work"
                },
                "Name": "overlay2"
            },
            "Mounts": [
                {
                    "Type": "volume",
                    "Name": "v1",
                    "Source": "/var/lib/docker/volumes/v1/_data",
                    "Destination": "/var/lib/mysql",
                    "Driver": "local",
                    "Mode": "z",
                    "RW": true,
                    "Propagation": ""
                },
                {
                    "Type": "volume",
                    "Name": "536a960c78f5949c4797bd34fabafc7ce48b06bb44424076a1d41d8bb19ebe5d",
                    "Source": "/var/lib/docker/volumes/536a960c78f5949c4797bd34fabafc7ce48b06bb44424076a1d41d8bb19ebe5d/_data",
                    "Destination": "/var/log/mysql",
                    "Driver": "local",
                    "Mode": "",
                    "RW": true,
                    "Propagation": ""
                }
            ],
            "Config": {
                "Hostname": "eef935e57bdb",
                "Domainname": "",
                "User": "1001",
                "AttachStdin": false,
                "AttachStdout": false,
                "AttachStderr": false,
                "ExposedPorts": {
                    "3306/tcp": {},
                    "33060/tcp": {},
                    "4567/tcp": {},
                    "4568/tcp": {}
                },
                "Tty": false,
                "OpenStdin": false,
                "StdinOnce": false,
                "Env": [
                    "MYSQL_ROOT_PASSWORD=123456",
                    "CLUSTER_NAME=PXC",
                    "XTRABACKUP_PASSWORD=123456",
                    "PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin",
                    "PXC_VERSION=8.0.22-13.1",
                    "PXC_REPO=release",
                    "OS_VER=el8",
                    "FULL_PERCONA_XTRADBCLUSTER_VERSION=8.0.22-13.1.el8"
                ],
                "Cmd": [
                    "mysqld"
                ],
                "Image": "pxc",
                "Volumes": {
                    "/var/lib/mysql": {},
                    "/var/log/mysql": {}
                },
                "WorkingDir": "",
                "Entrypoint": [
                    "/entrypoint.sh"
                ],
                "OnBuild": null,
                "Labels": {
                    "org.label-schema.build-date": "20201204",
                    "org.label-schema.license": "GPLv2",
                    "org.label-schema.name": "CentOS Base Image",
                    "org.label-schema.schema-version": "1.0",
                    "org.label-schema.vendor": "CentOS",
                    "org.opencontainers.image.authors": "info@percona.com"
                }
            },
            "NetworkSettings": {
                "Bridge": "",
                "SandboxID": "1e1d29e4ecf8d61c46caf473e09cb3bd6e3cab343406d5f41a22e282e9358ae4",
                "HairpinMode": false,
                "LinkLocalIPv6Address": "",
                "LinkLocalIPv6PrefixLen": 0,
                "Ports": {
                    "3306/tcp": [
                        {
                            "HostIp": "0.0.0.0",
                            "HostPort": "3306"
                        },
                        {
                            "HostIp": "::",
                            "HostPort": "3306"
                        }
                    ],
                    "33060/tcp": null,
                    "4567/tcp": null,
                    "4568/tcp": null
                },
                "SandboxKey": "/var/run/docker/netns/1e1d29e4ecf8",
                "SecondaryIPAddresses": null,
                "SecondaryIPv6Addresses": null,
                "EndpointID": "",
                "Gateway": "",
                "GlobalIPv6Address": "",
                "GlobalIPv6PrefixLen": 0,
                "IPAddress": "",
                "IPPrefixLen": 0,
                "IPv6Gateway": "",
                "MacAddress": "",
                "Networks": {
                    "net1": {
                        "IPAMConfig": {
                            "IPv4Address": "172.18.0.2"
                        },
                        "Links": null,
                        "Aliases": [
                            "eef935e57bdb"
                        ],
                        "NetworkID": "2226ef15f47104900a44b7b3bdcea5baad7381cc3e105878fb1cc031983d4b1a",
                        "EndpointID": "11e532bc87067768bce63260fd751f861f17c34692c33014ff467d5d1c49649c",
                        "Gateway": "172.18.0.1",
                        "IPAddress": "172.18.0.2",
                        "IPPrefixLen": 24,
                        "IPv6Gateway": "",
                        "GlobalIPv6Address": "",
                        "GlobalIPv6PrefixLen": 0,
                        "MacAddress": "02:42:ac:12:00:02",
                        "DriverOpts": null
                    }
                }
            }
        }
    ]
    
    

    容器互联

    1. 新建网络
      docker network create -d bridge my-net
      -d 指定网络类型,bridge,overlay(用于swarm mode)

    2. 连接容器
      docker run --network=my-net
      原理: 连接到同一个网络的 容器 之间都可以互联
      栗子

    连接多个容器使用compose

    配置DNS

    1. 配置全部容器的DNS(全局配置文件)
    sudo vi /etc/docker/daemon.json
    {
      "dns" : [
        "8.8.8.8"
      ]
    }
    

    配置后重启docker,此时所有容器会被关闭。
    检查是否已生效

    systemctl daemon-reload
    systemctl restart docker
    docker run -it --rm ubuntu:18.04 cat etc/resolv.conf
    

    2.指定容器配置
    docker run -h HOSTNAME 配置主机名
    会被写入容器内的 /etc/hostname 和 /etc/hosts ,但是不会在容器外部被看到
    docker run --dns=IP_ADDRESS 添加DNS服务器到容器的 /etc/resolv.conf
    --dns-search=DOMAIN 设定容器的搜索域

    注意,--dns--dns-search 如果没有配置,默认使用主机的 /etc/resolv.conf 来配置容器

    docker file

    配置文件 /etc/docker/daemon.json

    damon.json

    需要注意的点

    1. 删除镜像前 需要删除使用该镜像的所有容器
    2. 定制镜像,最后一步需要清除掉无关文件

    问题

    1. 为什么镜像和使用该镜像的容器,DNS不是一样的呢?
    [admin@centos7 ~]$ docker image ls -a
    REPOSITORY    TAG       IMAGE ID       CREATED        SIZE
    ubuntu        18.04     81bcf752ac3d   8 days ago     63.1MB
    pxc           latest    13efa2a210dd   2 months ago   560MB
    [admin@centos7 ~]$ docker container ls -a
    CONTAINER ID   IMAGE     COMMAND                  CREATED       STATUS                        PORTS                                                                 NAMES
    ade00ee0a5fc   pxc       "/entrypoint.sh mysq…"   2 hours ago   Up 57 minutes                 4567-4568/tcp, 33060/tcp, 0.0.0.0:3310->3306/tcp, :::3310->3306/tcp   node6
    [admin@centos7 ~]$ docker run -it --rm pxc:latest cat etc/resolv.conf
    search localdomain com
    nameserver 114.114.114.114
    nameserver 8.8.8.8
    [admin@centos7 ~]$ docker exec -it ade bash
    bash-4.4$ cat etc/resolv.conf
    search localdomain com
    nameserver 127.0.0.11
    options ndots:0
    
    

    个人问题:

    学习到这里其实突然有点茫然,该怎么去部署一个系统呢?
    主要是学习dockerfile指令详解这一章节,不明白这些指令在实际场景中为什么要应用。
    项目部署完整流程
    前后端项目部署实战 - 原文博客

    当前系统信息

    docker info

    Client:
     Context:    default
     Debug Mode: false
     Plugins:
      app: Docker App (Docker Inc., v0.9.1-beta3)
      buildx: Build with BuildKit (Docker Inc., v0.5.1-docker)
      scan: Docker Scan (Docker Inc.)
    
    Server:
     Containers: 5
      Running: 2
      Paused: 0
      Stopped: 3
     Images: 3
     Server Version: 20.10.6
     Storage Driver: overlay2
      Backing Filesystem: xfs
      Supports d_type: true
      Native Overlay Diff: true
      userxattr: false
     Logging Driver: json-file
     Cgroup Driver: cgroupfs
     Cgroup Version: 1
     Plugins:
      Volume: local
      Network: bridge host ipvlan macvlan null overlay
      Log: awslogs fluentd gcplogs gelf journald json-file local logentries splunk syslog
     Swarm: inactive
     Runtimes: io.containerd.runc.v2 io.containerd.runtime.v1.linux runc
     Default Runtime: runc
     Init Binary: docker-init
     containerd version: 05f951a3781f4f2c1911b05e61c160e9c30eaa8e
     runc version: 12644e614e25b05da6fd08a38ffa0cfe1903fdec
     init version: de40ad0
     Security Options:
      seccomp
       Profile: default
     Kernel Version: 3.10.0-1160.el7.x86_64
     Operating System: CentOS Linux 7 (Core)
     OSType: linux
     Architecture: x86_64
     CPUs: 1
     Total Memory: 972.3MiB
     Name: centos7.com
     ID: GK7Q:GLMK:ARGI:LDF6:PHRT:BC3Q:XTJJ:3THM:3C33:546F:GCN5:YGOD
     Docker Root Dir: /var/lib/docker
     Debug Mode: false
     Registry: https://index.docker.io/v1/
     Labels:
     Experimental: false
     Insecure Registries:
      127.0.0.0/8
     Registry Mirrors:
      https://hub-mirror.c.163.com/
      https://mirror.baidubce.com/
     Live Restore Enabled: false
    

    docker image ls -a

    [admin@centos7 ~]$ docker image ls -a
    REPOSITORY    TAG       IMAGE ID       CREATED        SIZE
    ubuntu        18.04     81bcf752ac3d   8 days ago     63.1MB
    pxc           latest    13efa2a210dd   2 months ago   560MB
    hello-world   latest    d1165f221234   2 months ago   13.3kB
    

    docker container ls -a

    [admin@centos7 ~]$ docker container ls -a
    CONTAINER ID   IMAGE     COMMAND                  CREATED       STATUS                        PORTS                                                                 NAMES
    ade00ee0a5fc   pxc       "/entrypoint.sh mysq…"   2 hours ago   Up 57 minutes                 4567-4568/tcp, 33060/tcp, 0.0.0.0:3310->3306/tcp, :::3310->3306/tcp   node6
    05bdf7f9bc8e   pxc       "/entrypoint.sh mysq…"   2 hours ago   Up 57 minutes                 4567-4568/tcp, 33060/tcp, 0.0.0.0:3309->3306/tcp, :::3309->3306/tcp   node5
    615d10c29943   pxc       "/entrypoint.sh mysq…"   2 hours ago   Exited (137) 58 minutes ago                                                                         node3
    5ecac524b09b   pxc       "/entrypoint.sh mysq…"   2 hours ago   Exited (137) 58 minutes ago                                                                         node2
    eef935e57bdb   pxc       "/entrypoint.sh mysq…"   2 hours ago   Exited (137) 58 minutes ago                                                                         node1
    
    

    参考文档:
    Docker--从入门到实践

    上面的内容,主要还是一些知识点整理和个人的一些思考,权当参考,如有错误或者更好的建议,可以在评论区指正,不胜感激!

  • 相关阅读:
    C#窗体操作的小技巧
    C#操作Xml
    Path类对路径字符串的操作
    Google Maps 基础
    C#时间操作总结
    根据地理坐标计算瓦片行列号
    使用VBA宏批量修改表格
    检测到在集成的托管管道模式下不适用的ASP.NET设置的解决方法
    Asp.net实现URL重写
    VS2013利用ajax访问不了json文件——VS2013配置webconfig识别json文件
  • 原文地址:https://www.cnblogs.com/Tester_Dolores/p/14817336.html
Copyright © 2011-2022 走看看