基础认识

Docker

  • Docker允许开发中将应用、依赖、函数库、配置一起打包,形成可移植镜像

  • Docker应用运行在容器中,使用沙箱机制,相互隔离

  • Docker镜像中包含完整运行环境,包括系统函数库,仅依赖系统的Linux内核,因此可以在任意Linux操作系统上运行

Docker是一个快速交付应用、运行应用的技术,具备下列优势:

  • 可以将程序及其依赖、运行环境一起打包为一个镜像,可以迁移到任意Linux操作系统

  • 运行时利用沙箱机制形成隔离容器,各个应用互不干扰

  • 启动、移除都可以通过一行命令完成,方便快捷

镜像和容器

镜像(Image):Docker将应用程序及其所需的依赖、函数库、环境、配置等文件打包在一起,称为镜像。

容器(Container):镜像中的应用程序运行后形成的进程就是容器,只是Docker会给容器进程做隔离,对外不可见。

一切应用最终都是代码组成,都是硬盘中的一个个的字节形成的文件。只有运行时,才会加载到内存,形成进程。

镜像,就是把一个应用在硬盘上的文件、及其运行环境、部分系统函数库文件一起打包形成的文件包。这个文件包是只读的。

容器呢,就是将这些文件中编写的程序、函数加载到内存中允许,形成进程,只不过要隔离起来。因此一个镜像可以启动多次,形成多个容器进程。

dockerHub

开源应用程序非常多,打包这些应用往往是重复的劳动。为了避免这些重复劳动,人们就会将自己打包的应用镜像,例如Redis、MySQL镜像放到网络上,共享使用,就像GitHub的代码共享一样。

  • DockerHub:DockerHub是一个官方的Docker镜像的托管平台。这样的平台称为Docker Registry。

  • 国内也有类似于DockerHub 的公开服务,比如 网易云镜像服务阿里云镜像库等。

我们一方面可以将自己的镜像共享到DockerHub,另一方面也可以从DockerHub拉取镜像:

架构

我们要使用Docker来操作镜像、容器,就必须要安装Docker。

Docker是一个CS架构的程序,由两部分组成:

  • 服务端(server):Docker守护进程,负责处理Docker指令,管理镜像、容器等

  • 客户端(client):通过命令或RestAPI向Docker服务端发送指令。可以在本地或远程向服务端发送指令。

image-20210731154257653.png镜像:

  • 将应用程序及其依赖、环境、配置打包在一起

容器:

  • 镜像运行起来就是容器,一个镜像可以运行多个容器

Docker结构:

  • 服务端:接收命令或远程请求,操作镜像或容器

  • 客户端:发送命令或者请求到Docker服务端

DockerHub:

  • 一个镜像托管的服务器,类似的还有阿里云镜像服务,统称为DockerRegistry

Docker的常用命令

帮助命令

docker version         #显示docker版本信息
docker info            #显示docker的系统信息,包括镜像和容器的数量
docker 命令 --help      #万能命令,查看docker命令

镜像命令

[root@iz2ze6kf0lsrq4dbhvcppvz ~]# docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
hello-world         latest              bf756fb1ae65        10 months ago       13.3kB
​
#解释
   REPOSITORY   镜像的仓库源
   TAG          镜像的标签
   IMAGE ID     镜像的id
   CREATED      镜像的创建时间
   SIZE         镜像的大小
   
#可选项
  -a, --all             # 列出所有的镜像
      --digests         # 显示更多的信息
  -f, --filter filter   Filter output based on conditions provided
      --format string   Pretty-print images using a Go template
      --no-trunc        Don't truncate output
  -q, --quiet           # 只显示镜像的ID
​

搜索镜像命令

docker search 
[root@iz2ze6kf0lsrq4dbhvcppvz ~]# docker search mysql
NAME                              DESCRIPTION                                     STARS               OFFICIAL            AUTOMATED
mysql                             MySQL is a widely used, open-source relation…   10115               [OK]                
mariadb                           MariaDB is a community-developed fork of MyS…   3715                [OK]                
mysql/mysql-server                Optimized MySQL Server Docker images. Create…   739                                     [OK]
percona                           Percona Server is a fork of the MySQL relati…   511                 [OK]                
​
​
#可选项
  -f, --filter filter   设置条件来过滤筛选   例:--filter=stars=300 
      --format string   Pretty-print search using a Go template
      --limit int       Max number of search results (default 25)
      --no-trunc        Don't truncate output
​

下载镜像命令

# 下载镜像 docker pull 镜像名[:tag]
[root@iz2ze6kf0lsrq4dbhvcppvz ~]# docker pull mysql
Using default tag: latest       #如果不写tag,默认最新版本latest
latest: Pulling from library/mysql
bb79b6b2107f: Pull complete     # 分层下载:docker image的核心 联合文件系统
49e22f6fb9f7: Pull complete 
842b1255668c: Pull complete 
9f48d1f43000: Pull complete 
c693f0615bce: Pull complete 
8a621b9dbed2: Pull complete 
0807d32aef13: Pull complete 
a56aca0feb17: Pull complete 
de9d45fd0f07: Pull complete 
1d68a49161cc: Pull complete 
d16d318b774e: Pull complete 
49e112c55976: Pull complete 
Digest: sha256:8c17271df53ee3b843d6e16d46cff13f22c9c04d6982eb15a9a47bd5c9ac7e2d  #签名
Status: Downloaded newer image for mysql:latest
docker.io/library/mysql:latest    #真实地址
​
#两个命令等价
docker pull mysql
docker.io/library/mysql:latest
​
#下载mqsql5.7版本
[root@iz2ze6kf0lsrq4dbhvcppvz ~]# docker pull mysql:5.7
5.7: Pulling from library/mysql
bb79b6b2107f: Already exists      #下载最新版本是已下载,无需再下载,可以共用
49e22f6fb9f7: Already exists 
842b1255668c: Already exists 
9f48d1f43000: Already exists 
c693f0615bce: Already exists 
8a621b9dbed2: Already exists 
0807d32aef13: Already exists 
f15d42f48bd9: Pull complete 
098ceecc0c8d: Pull complete 
b6fead9737bc: Pull complete 
351d223d3d76: Pull complete 
Digest: sha256:4d2b34e99c14edb99cdd95ddad4d9aa7ea3f2c4405ff0c3509a29dc40bcb10ef
Status: Downloaded newer image for mysql:5.7
docker.io/library/mysql:5.7

删除镜像命令

docker rmi
​
[root@iz2ze6kf0lsrq4dbhvcppvz ~]# docker rmi -f 1b12f2e9257b  #删除指定的镜像
Untagged: mysql:5.7
Untagged: mysql@sha256:4d2b34e99c14edb99cdd95ddad4d9aa7ea3f2c4405ff0c3509a29dc40bcb10ef
Deleted: sha256:1b12f2e9257be96da5c075f186dc371b18442b0f9281728ac64c9a69c6e0e264
Deleted: sha256:b21d85dcc43f7db4e532c3ca07e5adbc1e02beb37646b7079217ea2b1922af91
Deleted: sha256:603c9faa831d58a3f60eb377cd6246a281a97b906406a92bf3452726a6f15b69
Deleted: sha256:2d927a6eb4cc26ba5454193a3f4abf503b6cea710293d4f0e6d061c08578b687
Deleted: sha256:b96c2c2176ca7b5223469ad39c9e17509505233dd81030878bc12b03074baef4 
            #删除是也是分层删除,只删除自己独有的
            
[root@iz2ze6kf0lsrq4dbhvcppvz ~]# docker rmi -f $(docker images -aq)  #删除所有镜像
Untagged: mysql:latest
Untagged: mysql@sha256:8c17271df53ee3b843d6e16d46cff13f22c9c04d6982eb15a9a47bd5c9ac7e2d
Deleted: sha256:db2b37ec6181ee1f367363432f841bf3819d4a9f61d26e42ac16e5bd7ff2ec18
Deleted: sha256:4d2a8e0ab441c5c1170a783be98b47096324f531f84cc387f06523af79ee7cd5
Deleted: sha256:09e5f20e5b3289cedaf4824906f74057b5b9b8765a246d8bfaafded2562a901a
Deleted: sha256:c25bdaaaf298842706f214fd3d855ca6f215cc66d01345efb9fd7479f6ca7b5f
Deleted: sha256:64231a7235fe05862b419beb8884dec599d27cab1b1bb402f0f75e64bc4cbd19
Deleted: sha256:79bc33a7ecad0032cc5e218d8b246b645f4cfddbf639b5db8383f81d4cbb6c9b
Deleted: sha256:33134afe9e842a2898e36966f222fcddcdb2ab42e65dcdc581a4b38b2852c2e0
Deleted: sha256:dd053ec71039c3646324372061452778609b9ba42d1501f6a72c0272c94f8965
Deleted: sha256:2d4c647f875f6256f210459e5c401aad27ad223d0fa3bada7c4088a6040f8ba4
Deleted: sha256:4bded7e9aa769cb0560e60da97421e2314fa896c719179b926318640324d7932
Deleted: sha256:5fd9447ef700dfe5975c4cba51d3c9f2e757b34782fe145c1d7a12dfbee1da2f
Deleted: sha256:5ee7cbb203f3a7e90fe67330905c28e394e595ea2f4aa23b5d3a06534a960553
Deleted: sha256:d0fe97fa8b8cefdffcef1d62b65aba51a6c87b6679628a2b50fc6a7a579f764c
Untagged: hello-world:latest
Untagged: hello-world@sha256:8c5aeeb6a5f3ba4883347d3747a7249f491766ca1caa47e5da5dfcf6b9b717c0
Deleted: sha256:bf756fb1ae65adf866bd8c456593cd24beb6a0a061dedf42b26a993176745f6b
              #参数传递,递归删除

容器命令

容器保护三个状态:

  • 运行:进程正常运行

  • 暂停:进程暂停,CPU不再运行,并不释放内存

  • 停止:进程终止,回收进程占用的内存、CPU等资源

说明:我们有了镜像才可以创建容器,Linux,下载一个Centos镜像测试

docker pull centos

新建容器并启动

docker run[可选参数] images名
​
#参数说明
​
--name="Name"         容器名字,用来区分容器
-d                    后台方式运行
-i -t -it             使用交互方式运行,进去容器查看内容
-p                    指定容器的端口,-p 8080:8080
      -p  主机端口:容器端口   -常用
      -p  容器端口
      容器端口(不-p,直接容器端口)
      -p ip:主机端口:容器端口
      
-P(大写)              随机指定端口
​
​
#启动并进去容器
/*交互运行需要控制台,Linux控制台一般在bin下,默认bash命令*/
[root@iz2ze6kf0lsrq4dbhvcppvz ~]# docker run -it centos /bin/bash  
[root@4a52300eb7fd /]# 
/*第一行@后面为主机名,第二行进入容器后,显示的是容器的ID */
[root@4a52300eb7fd /]# ls
bin  etc   lib    lost+found  mnt  proc  run   srv  tmp  var
dev  home  lib64  media       opt  root  sbin  sys  usr
#从容器中退回主机
[root@4a52300eb7fd /]# exit
exit
[root@iz2ze6kf0lsrq4dbhvcppvz /]# ls
bin   data  etc   lib    lost+found  mnt  proc  run   srv  tmp  var
boot  dev   home  lib64  media       opt  root  sbin  sys  usr
​

列出所有运行中的容器

docker ps
#常用参数
  -a     #列出当前正在运行的容器+带出历史运行过得容器
  -n=?  #显示最近创建的x个容器
  -q     #只显示容器的编号   -aq #全部
[root@iz2ze6kf0lsrq4dbhvcppvz /]# docker ps
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES
​
#查看曾经运行过的容器
[root@iz2ze6kf0lsrq4dbhvcppvz /]# docker ps -a
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS                       PORTS               NAMES
4a52300eb7fd        centos              "/bin/bash"         11 minutes ago      Exited (127) 3 minutes ago                       loving_dewdney
c38f10af72dc        bf756fb1ae65        "/hello"            19 hours ago        Exited (0) 19 hours ago                          goofy_maxwell
​

退出容器

exit      #直接容器停止并退出
Ctrl+p+q  #容器不停止退出

删除容器

docker rm 容器id               #删除制定的容器,不能删除正在运行的容器,如何要强制删除 rm-s
docker rm $(docker ps -aq)   #删除所有容器
docker ps -a -q|xargs docker rm  #同上

启动和停止容器的操作

docker start 容器id       #启动容器
docker restart 容器id     #重启容器
docker stop 容器id        #停止当前真在运行的容器
docker kill 容器id		#强制停止当前容器

#测试
[root@iz2ze6kf0lsrq4dbhvcppvz /]# docker run -it centos /bin/bash

[root@90e4c7e1ffe7 /]# exit
exit

[root@iz2ze6kf0lsrq4dbhvcppvz /]# docker ps
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES

[root@iz2ze6kf0lsrq4dbhvcppvz /]# docker ps -a
CONTAINER ID    IMAGE   COMMAND     CREATED     STATUS           PORTS           NAMES
90e4c7e1ffe7  | centos "/bin/bash" | 4 minutes ago | Exited (127) About a minute ago  |                  |   hopeful_almeida
4a52300eb7fd        centos              "/bin/bash"         30 minutes ago      Exited (127) 22 minutes ago                           loving_dewdney
c38f10af72dc        bf756fb1ae65        "/hello"            19 hours ago        Exited (0) 19 hours ago                               goofy_maxwell

[root@iz2ze6kf0lsrq4dbhvcppvz /]# docker start 90e4c7e1ffe7
90e4c7e1ffe7
[root@iz2ze6kf0lsrq4dbhvcppvz /]# docker ps
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES
90e4c7e1ffe7        centos              "/bin/bash"         5 minutes ago       Up 3 seconds                            hopeful_almeida

[root@iz2ze6kf0lsrq4dbhvcppvz /]# docker stop 90e4c7e1ffe7
90e4c7e1ffe7

[root@iz2ze6kf0lsrq4dbhvcppvz /]# docker ps
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES

[root@iz2ze6kf0lsrq4dbhvcppvz /]# docker restart 90e4c7e1ffe7
90e4c7e1ffe7

[root@iz2ze6kf0lsrq4dbhvcppvz /]# docker ps
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES
90e4c7e1ffe7        centos              "/bin/bash"         5 minutes ago       Up 2 seconds                            hopeful_almeida

常用的其他命令

后台启动容器

#命令 docker run -d 镜像名
[root@iz2ze6kf0lsrq4dbhvcppvz /]# docker run -d centos
[root@iz2ze6kf0lsrq4dbhvcppvz /]# docker ps
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES
# docker ps,发现centos停止了
#常见的坑,docker容器使用后台运行,就必须要有一个前台进程,docker发现没有应用,就会自动停止
#ngins容器启动后,发现自己没有提供服务,就会立刻停止,就是没有程序了

查看日志

docker logs

[root@iz2ze6kf0lsrq4dbhvcppvz /]# docker logs -f -t --tail 10 ec27e6a2976c

# 自己写一段shell脚本
  [root@iz2ze6kf0lsrq4dbhvcppvz /]# docker run -d centos /bin/sh -c "while true;do echo cheng;sleep 1;done"

  [root@iz2ze6kf0lsrq4dbhvcppvz /]# docker ps
CONTAINER ID        IMAGE           
7175a14f714f        centos              

#显示日志
-tf            #显示日志  -f  #显示时间戳
--tail number  #显示日记的条数

[root@iz2ze6kf0lsrq4dbhvcppvz /]# docker logs -ft --tail 10 7175a14f714f 
2020-10-30T11:48:20.115122670Z cheng
2020-10-30T11:48:21.116665132Z cheng
2020-10-30T11:48:22.118194930Z cheng
......

查看容器中的进程信息 ps

docker top 容器ID

[root@iz2ze6kf0lsrq4dbhvcppvz /]# docker top 7175a14f714f
UID(当前用户ID)       PID(副id)   PPID(进程id)       C      STIME               TTY       root                24506        24484               0     19:45                ?       
root                  25170        24506               0      9:52                ?       

查看镜像的元数据

docker inspect  

#参数
  -f, --format string   Format the output using the given Go template
  -s, --size            Display total file sizes if the type is container
      --type string     Return JSON for specified type

[root@iz2ze6kf0lsrq4dbhvcppvz /]# docker inspect 7175a14f714f
[
    {
        "Id": "7175a14f714f136e4faffb72893b6ceafe8c36c983fdd9eeb7a1e91eeaf3a141",
        "Created": "2020-10-30T11:45:49.551098301Z",
        "Path": "/bin/sh",
        "Args": [
            "-c",
            "while true;do echo cheng;sleep 1;done"
        ],
        "State": {
            "Status": "running",
            "Running": true,
            "Paused": false,
            "Restarting": false,
            "OOMKilled": false,
            "Dead": false,
            "Pid": 24506,
            "ExitCode": 0,
            "Error": "",
            "StartedAt": "2020-10-30T11:45:49.871263582Z",
            "FinishedAt": "0001-01-01T00:00:00Z"
        },
        "Image": "sha256:0d120b6ccaa8c5e149176798b3501d4dd1885f961922497cd0abef155c869566",
        "ResolvConfPath": "/var/lib/docker/containers/7175a14f714f136e4faffb72893b6ceafe8c36c983fdd9eeb7a1e91eeaf3a141/resolv.conf",
        "HostnamePath": "/var/lib/docker/containers/7175a14f714f136e4faffb72893b6ceafe8c36c983fdd9eeb7a1e91eeaf3a141/hostname",
        "HostsPath": "/var/lib/docker/containers/7175a14f714f136e4faffb72893b6ceafe8c36c983fdd9eeb7a1e91eeaf3a141/hosts",
        "LogPath": "/var/lib/docker/containers/7175a14f714f136e4faffb72893b6ceafe8c36c983fdd9eeb7a1e91eeaf3a141/7175a14f714f136e4faffb72893b6ceafe8c36c983fdd9eeb7a1e91eeaf3a141-json.log",
        "Name": "/sleepy_wescoff",
        "RestartCount": 0,
        "Driver": "overlay2",
        "Platform": "linux",
        "MountLabel": "",
        "ProcessLabel": "",
        "AppArmorProfile": "",
        "ExecIDs": null,
        "HostConfig": {
            "Binds": null,
            "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": [
                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/607172e6852b0feb89b76c23dbe4e96a080b18d022df2be5a7ac68ca2c8960fa-init/diff:/var/lib/docker/overlay2/ad496418380f6cb419a578c5670963727b65da203017888d7c3ab300d8e7f852/diff",
                "MergedDir": "/var/lib/docker/overlay2/607172e6852b0feb89b76c23dbe4e96a080b18d022df2be5a7ac68ca2c8960fa/merged",
                "UpperDir": "/var/lib/docker/overlay2/607172e6852b0feb89b76c23dbe4e96a080b18d022df2be5a7ac68ca2c8960fa/diff",
                "WorkDir": "/var/lib/docker/overlay2/607172e6852b0feb89b76c23dbe4e96a080b18d022df2be5a7ac68ca2c8960fa/work"
            },
            "Name": "overlay2"
        },
        "Mounts": [],
        "Config": {
            "Hostname": "7175a14f714f",
            "Domainname": "",
            "User": "",
            "AttachStdin": false,
            "AttachStdout": false,
            "AttachStderr": false,
            "Tty": false,
            "OpenStdin": false,
            "StdinOnce": false,
            "Env": [
                "PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"
            ],
            "Cmd": [
                "/bin/sh",
                "-c",
                "while true;do echo cheng;sleep 1;done"
            ],
            "Image": "centos",
            "Volumes": null,
            "WorkingDir": "",
            "Entrypoint": null,
            "OnBuild": null,
            "Labels": {
                "org.label-schema.build-date": "20200809",
                "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": "8419f54995fb9a85aa4b45c24b2408cbbb7ff3c2f064951dc1deec770b606b97",
            "HairpinMode": false,
            "LinkLocalIPv6Address": "",
            "LinkLocalIPv6PrefixLen": 0,
            "Ports": {},
            "SandboxKey": "/var/run/docker/netns/8419f54995fb",
            "SecondaryIPAddresses": null,
            "SecondaryIPv6Addresses": null,
            "EndpointID": "0cbbe0fdbaf8e80d8bb2cba747248ec10efb556d1a575e52ccfb09f899529e56",
            "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": "524b4177e62239ec574c8f35591a7d951dff460c5c3c11b64bb072dfb727ebb0",
                    "EndpointID": "0cbbe0fdbaf8e80d8bb2cba747248ec10efb556d1a575e52ccfb09f899529e56",
                    "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
                }
            }
        }
    }
]

进入当前正在运行的容器

#我们通常容器都是使用后天方式运行的,需要进入容器,修改一些配置

#命令一
 docker exec -it 容器ID bashshell(/bin/bash)
 
 #测试
 [root@iz2ze6kf0lsrq4dbhvcppvz /]# docker exec -it 7175a14f714f /bin/bash
[root@7175a14f714f /]# ls
bin  etc   lib	  lost+found  mnt  proc  run   srv  tmp  var
dev  home  lib64  media       opt  root  sbin  sys  usr
[root@7175a14f714f /]# ps -ef
UID        PID  PPID  C STIME TTY          TIME CMD
root         1     0  0 11:45 ?        00:00:00 /bin/sh -c while true;do echo cheng;sleep 1;done
root      1202     0  0 12:05 pts/0    00:00:00 /bin/bash
root      1283     1  0 12:06 ?        00:00:00 /usr/bin/coreutils --coreutils-prog-shebang=sleep /usr/bin/sleep 
root      1284  1202  0 12:06 pts/0    00:00:00 ps -ef

#命令二
docker attach 容器ID
#测试
[root@iz2ze6kf0lsrq4dbhvcppvz /]# docker attcah 容器ID
正在执行当前的代码。。。。

#docker exec    #进入容器后开启一个新的终端,可以在里面操作(常用)
#docker attach  #进入容器正在执行的终端,不会启动新的进程

从容器内拷贝文件到主机上

docker cp 容器ID:容器内路径 目的的主机路径
#测试
   #查看当前主机目录
[root@iz2ze6kf0lsrq4dbhvcppvz home]# cd /home
[root@iz2ze6kf0lsrq4dbhvcppvz home]# ls
admin  staragent  www
   #进入docker容器内部
[root@iz2ze6kf0lsrq4dbhvcppvz home]# docker attach c14697de48a4 
[root@c14697de48a4 /]# cd /home
  #新建文件
[root@c14697de48a4 home]# touch cheng.java
[root@c14697de48a4 home]# ls
cheng.java
[root@c14697de48a4 home]# exit
exit
  #拷贝
[root@iz2ze6kf0lsrq4dbhvcppvz home]# docker cp c14697de48a4:/home/cheng.java /home
[root@iz2ze6kf0lsrq4dbhvcppvz home]# ls
admin  cheng.java  staragent  www

#拷贝是一个手动过程,未来学习-v卷的技术,可以实现自动

总结

Docker 版本命令

  • 查看 Docker 安装的版本**

    $ docker version

Docker 镜像命令

  • 列出所有 Docker 镜像

    $ docker images
    $ docker image ls -a
  • 运行 Docker 镜像(守护态方式)

    $ docker run -d <镜像名>
  • 删除 Docker 镜像

    $ docker  image rm <镜像名>
  • 删除 Docker 虚悬镜像

    $ docker image prune
  • 镜像的保存+加载

    利用docker save将nginx镜像导出磁盘,然后再通过load加载回来

    docker save -o [保存的目标文件名称] [镜像名称]
    docker load -i [文件名称]

Docker 容器命令

  • 进入运行中的 Docker 容器

    $ docker exec -it container-id /bin/bash
  • 列出正在运行的容器

    $ docker ps -a
  • 列出所有 Docker 容器(包括已停止的容器)

    $ docker ps -l
  • Docker 容器状态相关命令

    
    # 停止一个运行的容器
    docker stop <容器 ID>
    # 让一个停止的容器再次运行
    docker start <容器 ID>
    # 让一个容器从暂停状态恢复运行
    docker pause <容器 ID>
    # 让一个运行的容器暂停
    docker unpause <容器 ID>
  • 删除 Docker 容器

    $ docker rm -f <容器 ID>
  • 删除停止(失效)的 Docker 容器

    $ docker container prune
  • 查看 Docker 容器运行日志

    $ docker logs <容器名>
  • 实时监听 Docker 容器运行日志

    $ docker logs -f <容器名>

Docker 数据卷命令

  • 创建数据卷

    $ docker volume create <数据卷名>
  • 列出所有 Docker 数据卷

    $ docker volume ls
  • 删除指定 Docker 数据卷

    $ docker volume rm <数据卷名>
  • 查看数据卷详细信息,包括关联的宿主机目录位置

    $ docker volume inspect
  • 删除所有未关联(失效)的 Docker 数据卷

    $ docker volume rm $(docker volume ls -qf dangling=true)
    $ docker volume prune
  • 挂载数据卷

    docker run的命令中通过 -v 参数挂载文件或目录到容器中:

    • -v volume名称:容器内目录

    • -v 宿主机文件:容器内文

    • -v 宿主机目录:容器内目录

Docker 文件操作命令

  • 从主机复制文件到 Docker 容器

    $ sudo docker cp host_path containerID:container_path
  • 从 Docker 容器复制文件到主机

    $ sudo docker cp containerID:container_path host_path

END