1.帮助命令
1-1)docker version 查看版本
1-2)docker info 查看docker的信息
1-3)docker -help 帮助
2.镜像命令
2-1)docker images 列出本地的镜像

各个选项说明
同一个仓库源可以有多个TAG,代表这个仓库源的不同版本,我们使用REPOSITORY:TAG来定义不同的镜像。
如果不指定一个镜像的版本标签,例如我只使用hello-world,dokcer将默认使用 hello-world:latest镜像。
再例如我制定了版本 hello-world:1.5.0 ,docker将使用hello-world:1.5.0镜像。
2-1-1)OPTION 参数详解
-a 列出本地所有镜像
-q 只显示镜像ID
—digests 显示镜像的摘要信息
—no-trunc 显示完整的镜像信息
2-1)docker search 镜像名称 从docker-hub 搜索某个镜像


查询 点赞数 500以上的 redis镜像
docker search -s 500 redis
2-3)docker pull 镜像名称:版本(不指定默认为latest) 拉取/下载镜像
2-4)单个删除 docker rmi 镜像ID/镜像名:版本(不指定版本也是默认删除latest) 删除本地镜像

docker引擎:不能删除hello-world,因为后台正在运行这个镜像
解决方法:docker rmi -f hello-world 强制删除
2-5)多个删除 docker rmi -f 镜像名1:版本 镜像名2:版本
2-6)删除全部 docker rmi if $(docker images -qa)
3.docker容器命令
容器,必须要有镜像才能创建容器 所以先拉取一个centos镜像
新建并启动容器:docker run [OPTION] IMAGE[COMMAND][ARG…]
和hello-world一样,如果本地没有,那就会到docker-hub搜索再下载
OPTION 选项说明:有些是一个杠(-),有些是两个杠(—)
—name=”容器的新名字”,为容器指定一个名称
-d:后天运行容器,并且返回容器ID,即启动守护式容器
-i:以交互模式运行容器,通常与-t同时使用
-t:为容器重新分配一个伪输入终端,通常与-i同时使用
-P(大写P):指定端口映射
-p:指定端口映射,有一下四种格式
ip:hostPort:containerPort
ip::containerPort
hostPort:containerPort
containerPort

先使用 docker images 列出所有镜像 可以使用镜像名和ID来指定运行,这里使用ID,这时候出现 kernel too old 的提示信息,提示内核版本太老,
因为我当时下载的是 centos:latest ,也就是最新的centos8,所以我这里重新指定版本下载 6.8的centos,然后指定ID再运行,成功进入!
这时候我已经进入了 centos 6.8的系统,这里面就能使用linux命令来操作
—name 指定别名

docker ps [OPTION]
OPTION 参数详解
-a: 列出当前所有正在运行的容器+历史上运行过的
-l:显示最近创建(上一个)的容器
-n:显示最近n个创建的容器
-q:静默模式,只显示容器编号
—no-trunc:不截断输出
docker ps 查看当前运行的容器
这个容器ID 就是上方的目录
**
启动容器:docker start 容器名/ID 可以将已经停止退出的容器重新启动
docker start mycentos
docker start 1waad2221
停止容器
停止:docker stop 容器名/容器ID
强制停止:docker kill 容器名/容器ID
删除已停止的容器
单个删除:docker rm 容器ID
多个删除(带 -f表示强制删除):docker rm -f $(docker ps -aq)
docker ps -qa | xargs docker rm -f
可以看到我没有携带 -f参数时,正在运行的容器会删除失败
强制删除容器:
docker rm -f 容器ID
启动守护式容器:
docker run -d 容器名/容器ID
运行docker run -d centos后
使用docker ps -a查看,会发现 容器已经退出
说明:Docker 容器后台运行,就必须有一个前台进程
容器运行的命令如果不是那些“一直挂起”的命令,比如 top或tail,就是会自动退出的
这个也是docker 的机制问题,比如你的web容器,我们以nginx为例子,正常情况下,我们配置启动服务只需要相应启动的service即可,
例如:service nginx start
但是如果这样做,nginx为后台进程模式运行,会导致docker前台没有运行的应用,
这样的容器后台启动后,会立刻关闭它,因为docker认为他很闲,没有事情可做
所以,最佳的方案就是,将你要运行的程序以前台进程的形式运行
启动交互式容器
使用镜像centos:latest以交互模式启动一个容器,在容器内执行/bin/bash命令
docker run -it centos /bin/bash
docker run -d centos /bin/bash -c “while true;do echo hello centos ; sleep 2;done”
docker 用交互式容器启动,并且执行一个死循环脚本,这样就不会被关掉了

查看容器日志
docker logs 容器ID
docker logs -f -t —tail 显示行数 容器ID

查看容器内运行的进程
docker top 容器ID
查看容器内部的细节
docker inspect 容器ID
如下内容
[{"Id": "cd0c3bada7f26d512a866e9a4b65846134d31293d49da36d37c8cde1fe32f84c","Created": "2020-12-15T09:17:11.244795919Z","Path": "/bin/bash","Args": ["-c","while true;do echo hello centos ; sleep 2;done"],"State": {"Status": "running","Running": true,"Paused": false,"Restarting": false,"OOMKilled": false,"Dead": false,"Pid": 20018,"ExitCode": 0,"Error": "","StartedAt": "2020-12-15T09:17:11.509213751Z","FinishedAt": "0001-01-01T00:00:00Z"},"Image": "sha256:300e315adb2f96afe5f0b2780b87f28ae95231fe3bdd1e16b9ba606307728f55","ResolvConfPath": "/var/lib/docker/containers/cd0c3bada7f26d512a866e9a4b65846134d31293d49da36d37c8cde1fe32f84c/resolv.conf","HostnamePath": "/var/lib/docker/containers/cd0c3bada7f26d512a866e9a4b65846134d31293d49da36d37c8cde1fe32f84c/hostname","HostsPath": "/var/lib/docker/containers/cd0c3bada7f26d512a866e9a4b65846134d31293d49da36d37c8cde1fe32f84c/hosts","LogPath": "","Name": "/sad_heisenberg","RestartCount": 0,"Driver": "overlay2","MountLabel": "system_u:object_r:svirt_sandbox_file_t:s0:c71,c564","ProcessLabel": "system_u:system_r:svirt_lxc_net_t:s0:c71,c564","AppArmorProfile": "","ExecIDs": null,"HostConfig": {"Binds": null,"ContainerIDFile": "","LogConfig": {"Type": "journald","Config": {}},"NetworkMode": "default","PortBindings": {},"RestartPolicy": {"Name": "no","MaximumRetryCount": 0},"AutoRemove": false,"VolumeDriver": "","VolumesFrom": null,"CapAdd": null,"CapDrop": null,"Dns": [],"DnsOptions": [],"DnsSearch": [],"ExtraHosts": null,"GroupAdd": null,"IpcMode": "","Cgroup": "","Links": null,"OomScoreAdj": 0,"PidMode": "","Privileged": false,"PublishAllPorts": false,"ReadonlyRootfs": false,"SecurityOpt": null,"UTSMode": "","UsernsMode": "","ShmSize": 67108864,"Runtime": "docker-runc","ConsoleSize": [0,0],"Isolation": "","CpuShares": 0,"Memory": 0,"NanoCpus": 0,"CgroupParent": "","BlkioWeight": 0,"BlkioWeightDevice": null,"BlkioDeviceReadBps": null,"BlkioDeviceWriteBps": null,"BlkioDeviceReadIOps": null,"BlkioDeviceWriteIOps": null,"CpuPeriod": 0,"CpuQuota": 0,"CpuRealtimePeriod": 0,"CpuRealtimeRuntime": 0,"CpusetCpus": "","CpusetMems": "","Devices": [],"DiskQuota": 0,"KernelMemory": 0,"MemoryReservation": 0,"MemorySwap": 0,"MemorySwappiness": -1,"OomKillDisable": false,"PidsLimit": 0,"Ulimits": null,"CpuCount": 0,"CpuPercent": 0,"IOMaximumIOps": 0,"IOMaximumBandwidth": 0},"GraphDriver": {"Name": "overlay2","Data": {"LowerDir": "/var/lib/docker/overlay2/da15661756f0cca3e26f4246a16a9112aafe5f87140f2abb36e0811a70058025-init/diff:/var/lib/docker/overlay2/e7bb311dfe837c10358327b1d72479bda3e3347759415c1df177443109f26802/diff","MergedDir": "/var/lib/docker/overlay2/da15661756f0cca3e26f4246a16a9112aafe5f87140f2abb36e0811a70058025/merged","UpperDir": "/var/lib/docker/overlay2/da15661756f0cca3e26f4246a16a9112aafe5f87140f2abb36e0811a70058025/diff","WorkDir": "/var/lib/docker/overlay2/da15661756f0cca3e26f4246a16a9112aafe5f87140f2abb36e0811a70058025/work"}},"Mounts": [],"Config": {"Hostname": "cd0c3bada7f2","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/bash","-c","while true;do echo hello centos ; sleep 2;done"],"Image": "centos","Volumes": null,"WorkingDir": "","Entrypoint": null,"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"}},"NetworkSettings": {"Bridge": "","SandboxID": "1a66d59314a39ab44d3bd8e24561e3c6baab400735a4acccd131203c2b31d423","HairpinMode": false,"LinkLocalIPv6Address": "","LinkLocalIPv6PrefixLen": 0,"Ports": {},"SandboxKey": "/var/run/docker/netns/1a66d59314a3","SecondaryIPAddresses": null,"SecondaryIPv6Addresses": null,"EndpointID": "7a055ebd30f40051074797a8a198f0c81773b32f432847669e4d6a0e4d60b1e7","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": "8d8d8de8d14daa2fb701763b2f3bc841c0cc1351821b7e40e7b8e2b4192ee95a","EndpointID": "7a055ebd30f40051074797a8a198f0c81773b32f432847669e4d6a0e4d60b1e7","Gateway": "172.17.0.1","IPAddress": "172.17.0.2","IPPrefixLen": 16,"IPv6Gateway": "","GlobalIPv6Address": "","GlobalIPv6PrefixLen": 0,"MacAddress": "02:42:ac:11:00:02"}}}}]
进入正在运行的容器进行命令交互
模拟场景
第一步,启动容器(docker run -it centos [/bin/bash])
第二步,CTRL+P+Q 退出容器不关闭
第三步,进行命令交互
方式1、直接进入容器进行操作
docker attach 容器ID(直接进入容器启动命令的终端,不会启动新的进程)
方式2、在宿主机上面进行操作
docker exec -t 容器ID 命令操作(在容器中打开新的终端,并且可以启动新的进程)
exec也能做到和attach一样的功能
docker exec -t 容器ID /bin/bash
所以,exec功能比attach强大
从容器内拷贝文件到宿主机上
docker cp 容器ID:容器内的路径 宿主机的路径
4.
难得排版,将就看吧



