• Docker 安装及基本命令


    Docker官方文档

    官方文档:

    image-20211108185336635

    Docker远程仓库

    image-20211108144100167

    安装步骤以及命令

    准备工作

    # 1. 卸载已安装过的旧版本的docker [新服务器无需此操作]
    yum remove docker 
                      docker-client 
                      docker-client-latest 
                      docker-common 
                      docker-latest 
                      docker-latest-logrotate 
                      docker-logrotate 
                      docker-engine
    # 2. 需要安装的包
    yum install -y  yum-utils
    

    开始docker安装命令

    # 3. 设置镜像仓库
    # 官方镜像地址是比较慢,可以使用国内的,比如阿里的
    yum-config-manager 
        --add-repo 
        https://download.docker.com/linux/centos/docker-ce.repo
        
    #推荐使用国内的
    yum-config-manager 
        --add-repo 
        https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
        
    # 4. 更新yum索引,获取最新的索引yum makecache fast
    yum makecache fast
    
    # 5. 安装docker相关的 docker-ce 社区版 而ee是企业版,企业版是收费
    yum install docker-ce docker-ce-cli containerd.io
    
    # 6.启动docker
    systemctl start docker 
    
    # 7. 验证是否安装成功
    docker version 
    

    验证安装成功

    image-20211108135451858

    执行version命令,出现docker的版本信息,即为安装成功

    Hollo-world

    Hollo-word示例

    测试docker环境是否正常,使用官方提供的hollo-word的示例

    镜像运行命令

    docker run hello-world # docker run  镜像  
    

    执行结果:

    image-20211108141217302

    1. 当执行run命令时,本地不存在需要执行的镜像,则会到远程镜像仓库拉取

    2. 执行镜像为添加tag版本号,则会拉取远程最新的镜像版本 lastest 表示最新版本

    镜像基本命令

    • 容器启动命令
    docker run [可选参数] image | docker container run [可选参数] image 
    #参书说明
    --name="Name"		#容器名字 tomcat01 tomcat02 用来区分容器
    -d					#后台方式运行
    -it 				#使用交互方式运行,进入容器查看内容
    -p					#指定容器的端口 -p 8080(宿主机):8080(容器)
    		-p ip:主机端口:容器端口
    		-p 主机端口:容器端口(常用)
    		-p 容器端口
    		容器端口
    -P(大写) 				随机指定端口
    
    # 测试、启动并进入容器
    [root@iz2zeak7sgj6i7hrb2g
    [root@iz2zeak7sgj6i7hrb2g862z ~]# docker run -it centos /bin/bash 【启动并进入容器】
    [root@241b5abce65e /]# ls
    bin  dev  etc  home  lib  lib64  lost+found  media  mnt  opt  proc  root  run  sbin  srv  sys  tmp  usr  var
    [root@241b5abce65e /]# exit 【从容器退回主机】
    exit
    

    常见的坑:docker容器使用后台运行,就必须要有要一个前台进程,docker发现没有应用,就会自动停止

    • 查看当前docker环境下的所有镜像
    docker images #查看当前docker环境下的所有镜像
    docker image ls
    
    [root@bogon /]# docker images
    # 镜像名称      镜像版本    唯一ID           时间         镜像大小
     REPOSITORY    TAG       IMAGE ID       CREATED       SIZE
     hello-world   latest    feb5d9fea6a5   6 weeks ago   13.3kB
    
    
    • 搜索镜像 【建议少用,使用远程仓库可以查看镜像详情】
    docker search #搜索镜像
    
    • 下载镜像
    docker pull #下载镜像 docker image pull
    
    
    • 删除镜像
    docker rmi #删除镜像 docker image rm
    docker rmi -f $(docker images -aq) #删除全部的镜像
    

    容器基本命令

    • 查询容器
    docker ps # 列出当前正在运行的容器
      -a, --all     	 #列出当前正在运行的容器 + 带出历史运行过的容器
      -n=?, --last int   #列出最近创建的?个容器 ?为1则只列出最近创建的一个容器,为2则列出2个
      -q, --quiet        #只列出容器的编号
    
    [root@bogon /]# docker ps
    # 容器唯一ID	镜像名		执行命令				   时间			 状态           暴露端口	  容器名
    CONTAINER ID   IMAGE     COMMAND                  CREATED         STATUS         PORTS     NAMES
    7d18e99366ff   nginx     "/docker-entrypoint.…"   2 minutes ago   Up 2 minutes   80/tcp    pedantic_faraday
    --------
    [root@bogon /]# docker ps -a
    CONTAINER ID   IMAGE         COMMAND                  CREATED          STATUS                      PORTS     NAMES
    7d18e99366ff   nginx         "/docker-entrypoint.…"   4 minutes ago    Up 4 minutes                80/tcp    pedantic_faraday【正在运行的容器】
    d05f3bc3884a   hello-world   "/hello"                 45 minutes ago   Exited (0) 45 minutes ago             modest_tereshkova【之前运行过的容器】
    --------
    [root@bogon /]# docker ps -q
    d9b9a2b10c76
    3c4c5037f3d4
    --------
    [root@bogon /]# docker ps -n=2
    CONTAINER ID   IMAGE     COMMAND                  CREATED          STATUS          PORTS     NAMES
    d9b9a2b10c76   nginx     "/docker-entrypoint.…"   36 seconds ago   Up 35 seconds   80/tcp    nginx06
    3c4c5037f3d4   nginx     "/docker-entrypoint.…"   41 seconds ago   Up 40 seconds   80/tcp    nginx05
    
    
    • 容器停止命令
    docker stop 容器ID  # 容器停止命令
    
    # 查询到正在运行的容器,
    # -q  仅展示容器ID
    [root@bogon /]# docker ps -q
    cca290da9e9c
    [root@bogon /]# docker stop cca290da9e9c
    cca290da9e9c 【容器停止成功】
    
    docker stop $(docker ps -aq)  # 停止所有正在运行的容器  $ 代表取值
    [root@bogon /]# docker ps -q 【正在运行的容器】
    a924fd191505
    7d58cbf29ea3
    [root@bogon /]# docker stop $(docker ps -q)【停止所有正在运行的容器】
    a924fd191505
    7d58cbf29ea3
    
    
    • 杀死正在运行的容器
    docker kill 容器ID 
    

    image-20211108152814641

    • 删除容器
    docker rm 容器id   				#删除指定的容器,不能删除正在运行的容器,如果要强制删除 rm -rf
    

    image-20211108152325200

    docker rm -f $(docker ps -aq)  	 #删除所有的容器
    

    image-20211108153027090

    • 启动和重启容器
    docker start 容器id	#启动容器
    docker restart 容器id	#重启容器
    
    • 进入容器
     docker exec -it 容器ID /bin/bash  #进入容器并且打开一个新的终端
    

    image-20211108161633686

    docker attach 容器id #进入容器并且进入正在执行的终端
    

    image-20211108162649880

    • 退出容器
    exit 		#容器直接退出
    ctrl +P +Q  #容器不停止退出 	---注意:这个很有用的操作
    
    • 查看docker日志
    docker logs --help
    Options:
          --details        Show extra details provided to logs 
    *  -f, --follow         Follow log output
          --since string   Show logs since timestamp (e.g. 2013-01-02T13:23:37) or relative (e.g. 42m for 42 minutes)
    *      --tail string    Number of lines to show from the end of the logs (default "all")
    *  -t, --timestamps     Show timestamps
          --until string   Show logs before a timestamp (e.g. 2013-01-02T13:23:37) or relative (e.g. 42m for 42 minutes)
    ➜  ~ docker run -d centos /bin/sh -c "while true;do echo 6666;sleep 1;done" #模拟日志      
    #显示日志
    -tf		#显示日志信息(一直更新)
    --tail number #需要显示日志条数
    docker logs -t --tail n 容器id #查看n行日志
    docker logs -ft 容器id #跟着日志
    
    

    image-20211108183300677

    • 查看容器中进程信息
    docker top 容器ID
    

    image-20211108183438746

    • 查看容器的元数据
    #命令
    docker inspect 容器ID 
    
    # 测试
    [root@bogon /]# docker inspect  7daa2237ec1d
    [
        {
            "Id": "7daa2237ec1d92b8b4b850814e9c74bef8e48efc978aed7234c979594c88d07a",
            "Created": "2021-11-08T08:23:50.342564917Z",
            "Path": "/docker-entrypoint.sh",
            "Args": [
                "nginx",
                "-g",
                "daemon off;"
            ],
            "State": {
                "Status": "running",
                "Running": true,
                "Paused": false,
                "Restarting": false,
                "OOMKilled": false,
                "Dead": false,
                "Pid": 84968,
                "ExitCode": 0,
                "Error": "",
                "StartedAt": "2021-11-08T08:23:51.070809271Z",
                "FinishedAt": "0001-01-01T00:00:00Z"
            },
            "Image": "sha256:87a94228f133e2da99cb16d653cd1373c5b4e8689956386c1c12b60a20421a02",
            "ResolvConfPath": "/var/lib/docker/containers/7daa2237ec1d92b8b4b850814e9c74bef8e48efc978aed7234c979594c88d07a/resolv.conf",
            "HostnamePath": "/var/lib/docker/containers/7daa2237ec1d92b8b4b850814e9c74bef8e48efc978aed7234c979594c88d07a/hostname",
            "HostsPath": "/var/lib/docker/containers/7daa2237ec1d92b8b4b850814e9c74bef8e48efc978aed7234c979594c88d07a/hosts",
            "LogPath": "/var/lib/docker/containers/7daa2237ec1d92b8b4b850814e9c74bef8e48efc978aed7234c979594c88d07a/7daa2237ec1d92b8b4b850814e9c74bef8e48efc978aed7234c979594c88d07a-json.log",
            "Name": "/nginx02",
            "RestartCount": 0,
            "Driver": "overlay2",
            "Platform": "linux",
            "MountLabel": "",
            "ProcessLabel": "",
            "AppArmorProfile": "",
            "ExecIDs": [
                "4120fe6eff388f1ca32d9c09cce02c286e500ea0aca00e596ba590adfeac6ca7",
                "ef7a9731d2bc08e70aef31905aba67028e8c85fa5e42ac0dc942dd9c03071cb4"
            ],
            "HostConfig": {
                "Binds": null,
                "ContainerIDFile": "",
                "LogConfig": {
                    "Type": "json-file",
                    "Config": {}
                },
                "NetworkMode": "default",
                "PortBindings": {
                    "80/tcp": [
                        {
                            "HostIp": "",
                            "HostPort": "8000"
                        }
                    ]
                },
                "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/0778d818ab0406f00a7ad651d9c70f1b586642fb92d468220a4b2d66ffdeecc6-init/diff:/var/lib/docker/overlay2/d58fab8d23dafafd6c7674ffac3dad8ed91b6515b413bdc128164d74482e63fd/diff:/var/lib/docker/overlay2/c7d9e2e744739c79e8ba575430ca0fb9e5cb5707309aaa3844ac4eec7800fd05/diff:/var/lib/docker/overlay2/bc03eef418af2d95e47e4a90db360d1195c84daada7133561f80384f366287bb/diff:/var/lib/docker/overlay2/4a0f6d30a8c3e58f8b01e2b5c964a7b4a9abc90a295cc74692ffc60ec6fbe125/diff:/var/lib/docker/overlay2/fb8c8d457fbd46f237da67fc31370d3449dd3104d872bdb888102e9c221ee44b/diff:/var/lib/docker/overlay2/efc57b47f664f34115950ea32175fcde004bf1c1fc758c6bdc39f45ae5abe13d/diff",
                    "MergedDir": "/var/lib/docker/overlay2/0778d818ab0406f00a7ad651d9c70f1b586642fb92d468220a4b2d66ffdeecc6/merged",
                    "UpperDir": "/var/lib/docker/overlay2/0778d818ab0406f00a7ad651d9c70f1b586642fb92d468220a4b2d66ffdeecc6/diff",
                    "WorkDir": "/var/lib/docker/overlay2/0778d818ab0406f00a7ad651d9c70f1b586642fb92d468220a4b2d66ffdeecc6/work"
                },
                "Name": "overlay2"
            },
            "Mounts": [],
            "Config": {
                "Hostname": "7daa2237ec1d",
                "Domainname": "",
                "User": "",
                "AttachStdin": false,
                "AttachStdout": true,
                "AttachStderr": true,
                "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.21.3",
                    "NJS_VERSION=0.6.2",
                    "PKG_RELEASE=1~buster"
                ],
                "Cmd": [
                    "nginx",
                    "-g",
                    "daemon off;"
                ],
                "Image": "nginx",
                "Volumes": null,
                "WorkingDir": "",
                "Entrypoint": [
                    "/docker-entrypoint.sh"
                ],
                "OnBuild": null,
                "Labels": {
                    "maintainer": "NGINX Docker Maintainers <docker-maint@nginx.com>"
                },
                "StopSignal": "SIGQUIT"
            },
            "NetworkSettings": {
                "Bridge": "",
                "SandboxID": "de74adbe1f577f46455dac020aac4dd14c3bada9810ba35b06b710f0e0522374",
                "HairpinMode": false,
                "LinkLocalIPv6Address": "",
                "LinkLocalIPv6PrefixLen": 0,
                "Ports": {
                    "80/tcp": [
                        {
                            "HostIp": "0.0.0.0",
                            "HostPort": "8000"
                        },
                        {
                            "HostIp": "::",
                            "HostPort": "8000"
                        }
                    ]
                },
                "SandboxKey": "/var/run/docker/netns/de74adbe1f57",
                "SecondaryIPAddresses": null,
                "SecondaryIPv6Addresses": null,
                "EndpointID": "3ffd53ff1bf337358adfcf1fd9a969c8ddd212ca887d38d46c19a758dd64ea6c",
                "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": "eec222979fd743eb8682227b74092fa21437ae7c785033443db4dcae88d93352",
                        "EndpointID": "3ffd53ff1bf337358adfcf1fd9a969c8ddd212ca887d38d46c19a758dd64ea6c",
                        "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
                    }
                }
            }
        }
    ]
    [root@bogon /]# 
    
    • 从容器内拷贝到主机上
    docker cp 容器id:容器内路径  主机目的路径
    

    image-20211108184458672

    小结

    image-20200514214313962

    命令集合

      attach      Attach local standard input, output, and error streams to a running container
      #当前shell下 attach连接指定运行的镜像
      build       Build an image from a Dockerfile # 通过Dockerfile定制镜像
      commit      Create a new image from a container's changes #提交当前容器为新的镜像
      cp          Copy files/folders between a container and the local filesystem #拷贝文件
      create      Create a new container #创建一个新的容器
      diff        Inspect changes to files or directories on a container's filesystem #查看docker容器的变化
      events      Get real time events from the server # 从服务获取容器实时时间
      exec        Run a command in a running container # 在运行中的容器上运行命令 打开一个新的终端
      export      Export a container's filesystem as a tar archive #导出容器文件系统作为一个tar归档文件[对应import]
      history     Show the history of an image # 展示一个镜像形成历史
      images      List images #列出系统当前的镜像
      import      Import the contents from a tarball to create a filesystem image #从tar包中导入内容创建一个文件系统镜像
      info        Display system-wide information # 显示全系统信息
      inspect     Return low-level information on Docker objects #查看容器详细信息
      kill        Kill one or more running containers # kill指定docker容器
      load        Load an image from a tar archive or STDIN #从一个tar包或标准输入中加载一个镜像[对应save]
      login       Log in to a Docker registry # 登录远程仓库
      logout      Log out from a Docker registry # 退出远程仓库
      logs        Fetch the logs of a container # 查看docker 日志
      pause       Pause all processes within one or more containers
      port        List port mappings or a specific mapping for the container
      ps          List containers # 列出正在运行的容器
      pull        Pull an image or a repository from a registry  # 拉取镜像
      push        Push an image or a repository to a registry  # 向远程推镜像
      rename      Rename a container
      restart     Restart one or more containers # 容器重启
      rm          Remove one or more containers # 删除容器
      rmi         Remove one or more images  # 删除容器
      run         Run a command in a new container # 启动一个容器
      save        Save one or more images to a tar archive (streamed to STDOUT by default)
      search      Search the Docker Hub for images  # 搜索一个镜像
      start       Start one or more stopped containers # 启动docker
      stats       Display a live stream of container(s) resource usage statistics # 镜像或docker 状态
      stop        Stop one or more running containers # 停止容器/停止docker
      tag         Create a tag TARGET_IMAGE that refers to SOURCE_IMAGE # 镜像tag版本
      top         Display the running processes of a container# 查看一个容器的进程信息
      unpause     Unpause all processes within one or more containers 
      update      Update configuration of one or more containers 
      version     Show the Docker version information # docker 版本
      wait        Block until one or more containers stop, then print their exit codes
    
    

    其它

    宿主机端口容器内部端口 以及端口暴露:

    img

    容器内nginx启动后对外暴露端口号为80,宿主机通过-p命令将3344端口与容器的80端口映射

    命令:

    docker run -p 3344:80 镜像名 # -p小写为指定端口号的映射
    -P # 大写-P为宿主机任意端口号与容器暴露的端口号映射
    

    相关Docker文章推荐

    Docker文件系统 & 数据卷

    Docker 安装及基本命令

    Docker 部署nginx/tomcat/ES+kibana

    Docker网络

    Docker C/S架构

    Dockerfile自定义镜像

  • 相关阅读:
    Phalanx--hdu2859(dp 最大对称子图)
    Spring Cloud-hystrix Dashboard(八)
    Spring Cloud-hystrix使用例子(七)
    mysql deadlock、Lock wait timeout解决和分析
    Spring Cloud-hystrix(六)
    Spring Cloud-Ribbon负载均衡策略类IRule(五)
    Spring Cloud-Ribbon ILoadBalancer负载均衡器核心源码(四)
    Spring Cloud-Ribbon实现客户端的服务均衡(三)
    Spring Cloud-Eureka实现服务的注册与发现(二)
    Spring Cloud-个人理解的微服务演变过程(一)
  • 原文地址:https://www.cnblogs.com/MrYuChen-Blog/p/15529288.html
Copyright © 2020-2023  润新知