Docker官方文档

官方文档:
Docker 安装 - 图1

Docker远程仓库

Docker 安装 - 图2

安装步骤以及命令

准备工作

  1. # 1. 卸载已安装过的旧版本的docker [新服务器无需此操作]
  2. yum remove docker \
  3. docker-client \
  4. docker-client-latest \
  5. docker-common \
  6. docker-latest \
  7. docker-latest-logrotate \
  8. docker-logrotate \
  9. docker-engine
  10. # 2. 需要安装的包
  11. yum install -y yum-utils

开始docker安装命令

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

验证安装成功

Docker 安装 - 图3

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

Hollo-world

Hollo-word示例

测试docker环境是否正常,使用官方提供的hollo-word的示例
镜像运行命令

  1. docker run hello-world # docker run 镜像

执行结果:
Docker 安装 - 图4

  1. 当执行run命令时,本地不存在需要执行的镜像,则会到远程镜像仓库拉取
  2. 执行镜像为添加tag版本号,则会拉取远程最新的镜像版本 lastest 表示最新版本

    镜像基本命令

  • 容器启动命令 ``` docker run [可选参数] image | docker container run [可选参数] image

    参书说明

    —name=”Name” #容器名字 tomcat01 tomcat02 用来区分容器 -d #后台方式运行 -it #使用交互方式运行,进入容器查看内容 -p #指定容器的端口 -p 8080(宿主机):8080(容器)
    1. -p ip:主机端口:容器端口
    2. -p 主机端口:容器端口(常用)
    3. -p 容器端口
    4. 容器端口
    -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

  1. **常见的坑:docker容器使用后台运行,就必须要有要一个前台进程,docker发现没有应用,就会自动停止**
  2. - 查看当前docker环境下的所有镜像
  3. ```shell
  4. docker images #查看当前docker环境下的所有镜像
  5. docker image ls
  6. [root@bogon /]# docker images
  7. # 镜像名称 镜像版本 唯一ID 时间 镜像大小
  8. REPOSITORY TAG IMAGE ID CREATED SIZE
  9. hello-world latest feb5d9fea6a5 6 weeks ago 13.3kB
  • 搜索镜像 【建议少用,使用远程仓库可以查看镜像详情】

    1. docker search #搜索镜像
  • 下载镜像

    1. docker pull #下载镜像 docker image pull
  • 删除镜像

    1. docker rmi #删除镜像 docker image rm
    2. docker rmi -f $(docker images -aq) #删除全部的镜像

    容器基本命令

  • 查询容器 ```shell 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

  1. - 容器停止命令
  2. ```shell
  3. docker stop 容器ID # 容器停止命令
  4. # 查询到正在运行的容器,
  5. # -q 仅展示容器ID
  6. [root@bogon /]# docker ps -q
  7. cca290da9e9c
  8. [root@bogon /]# docker stop cca290da9e9c
  9. cca290da9e9c 【容器停止成功】
  10. docker stop $(docker ps -aq) # 停止所有正在运行的容器 $ 代表取值
  11. [root@bogon /]# docker ps -q 【正在运行的容器】
  12. a924fd191505
  13. 7d58cbf29ea3
  14. [root@bogon /]# docker stop $(docker ps -q)【停止所有正在运行的容器】
  15. a924fd191505
  16. 7d58cbf29ea3
  • 杀死正在运行的容器

    1. docker kill 容器ID

    Docker 安装 - 图5

  • 删除容器

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

    Docker 安装 - 图6

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

    Docker 安装 - 图7

  • 启动和重启容器

    1. docker start 容器id #启动容器
    2. docker restart 容器id #重启容器
  • 进入容器

    1. docker exec -it 容器ID /bin/bash #进入容器并且打开一个新的终端

    Docker 安装 - 图8

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

    Docker 安装 - 图9

  • 退出容器

    1. exit #容器直接退出
    2. ctrl +P +Q #容器不停止退出 ---注意:这个很有用的操作
  • 查看docker日志 ```shell docker logs —help Options:

    1. --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 #跟着日志 ``` Docker 安装 - 图10
  • 查看容器中进程信息

    1. docker top 容器ID

    Docker 安装 - 图11

  • 查看容器的元数据 ```shell

    命令

    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 /]#

  1. - 从容器内拷贝到主机上
  2. ```shell
  3. docker cp 容器id:容器内路径 主机目的路径

Docker 安装 - 图12

小结

Docker 安装 - 图13

命令集合

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

其它

宿主机端口容器内部端口 以及端口暴露:
Docker 安装 - 图14
容器内nginx启动后对外暴露端口号为80,宿主机通过-p命令将3344端口与容器的80端口映射
命令:

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