帮助命令
docker version #显示docker的版本信息docker info #显示docker的系统信息,包括镜像和容器的数量等docker 命令 --help #显示该命令的帮助命令
帮助文档的地址:https://docs.docker.com/engine/reference/commandline/dockerd/
镜像命令
docker images 查看所有本地的主机上的镜像
[root@localhost ~]# docker imagesREPOSITORY TAG IMAGE ID CREATED SIZEmysql 5.7 9f1d21c1025a 4 days ago 448MBhello-world latest d1165f221234 4 months ago 13.3kBcptactionhank/atlassian-jira-software 8.1.0 f9f09151d8df 2 years ago 531MB#解释REPOSITORY 镜像的仓库TAG 镜像的版本IMAGE ID 镜像的唯一标识CREATED 镜像创建时间SIZE 镜像的大小#可选项[root@localhost ~]# docker images --helpUsage: docker images [OPTIONS] [REPOSITORY[:TAG]]List imagesOptions:-a, --all #列出所有的镜像--digests Show 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@localhost ~]# docker search mysqlNAME DESCRIPTION STARS OFFICIAL AUTOMATEDmysql MySQL is a widely used, open-source relation… 11164 [OK]mariadb MariaDB Server is a high performing open sou… 4235 [OK]#可选项 通过搜查来过滤--filter=STARS=5000 #搜索出来的镜像就是STARTS大于5000的--[root@localhost ~]# docker search --helpUsage: docker search [OPTIONS] TERMSearch the Docker Hub for imagesOptions:-f, --filter filter Filter output based on conditions provided--format string Pretty-print search using a Go template--limit int Max number of search results (default 25)--no-trunc Don't truncate output[root@localhost ~]# docker search mysql --filter=STARS=5000NAME DESCRIPTION STARS OFFICIAL AUTOMATEDmysql MySQL is a widely used, open-source relation… 11164 [OK]
docker pull 下载命令
#下载镜像 docker pull 镜像名字[:tag][root@localhost ~]# docker pull mysqlUsing default tag: latest #如果不写tag,默认就是latest最新版本latest: Pulling from library/mysql33847f680f63: Pull complete #分层下载,docker image 的核心 联合文件系统5cb67864e624: Pull complete1a2b594783f5: Pull completeb30e406dd925: Pull complete48901e306e4c: Pull complete603d2b7147fd: Pull complete802aa684c1c4: Pull complete715d3c143a06: Pull complete6978e1b7a511: Pull completef0d78b0ac1be: Pull complete35a94d251ed1: Pull complete36f75719b1a9: Pull completeDigest: sha256:8b928a5117cf5c2238c7a09cd28c2e801ac98f91c3f8203a8938ae51f14700fd #签名Status: Downloaded newer image for mysql:latestdocker.io/library/mysql:latest #真实地址#两个命令等价docker pull mysqldocker pull docker.io/library/mysql:latest#指定版本下载[root@localhost ~]# docker pull mysql:5.75.7: Pulling from library/mysql33847f680f63: Already exists5cb67864e624: Already exists1a2b594783f5: Already existsb30e406dd925: Already exists48901e306e4c: Already exists603d2b7147fd: Already exists802aa684c1c4: Already exists5b5a19178915: Pull completef9ce7411c6e4: Pull completef51f6977d9b2: Pull completeaeb6b16ce012: Pull completeDigest: sha256:be70d18aedc37927293e7947c8de41ae6490ecd4c79df1db40d1b5b5af7d9596Status: Downloaded newer image for mysql:5.7docker.io/library/mysql:5.7#前面的内容可以看出是已经存在的文件,就不需要再次下载,只需更新新的内容,极大的节省内存,这就是联合文件系统
docker rmi 删除镜像
[root@localhost ~]# docker rmi -f d1165f221234Untagged: hello-world:latestUntagged: hello-world@sha256:df5f5184104426b65967e016ff2ac0bfcd44ad7899ca3bbcf8e44e4461491a9eDeleted: sha256:d1165f2212346b2bab48cb01c1e39ee8ad1be46b87873d9ca7a4e434980a7726docker rmi -f 镜像ID #删除指定的镜像docker rmi -f 容器ID 容器ID 容器ID #删除多个镜像docker rmi -f $(docker images -aq) #删除全部的镜像
容器命令
我们有了镜像才可以创建容器,下载一个centos
[root@localhost ~]# docker pull centosUsing default tag: latestlatest: Pulling from library/centos7a0437f04f83: Pull completeDigest: sha256:5528e8b1b1719d34604c87e11dcd1c0a20bedf46e83b5632cdeac91b8c04efc1Status: Downloaded newer image for centos:latestdocker.io/library/centos:latest
新建容器并启动
docker run [可选参数] image#参数说明--name="Name" 容器名字 tomcat01 tomcat02 ,用来区分容器-d 后台方式运行-it 使用交互方式运行,进入容器查看内容-p 指定容器的端口 -p 8080:8080-p ip:主机端口:容器端口-p 主机端口:容器端口(常用)-p 容器端口-P 随机指定端口#测试一下 启动并进入容器[root@localhost ~]# docker run -it centos /bin/bash[root@0f6efcd405d9 /]# ls #查看容器内的centosbin dev etc home lib lib64 lost+found media mnt opt proc root run sbin srv sys tmp usr var#从容器中退出到主机[root@0f6efcd405d9 /]# exitexit[root@localhost ~]# lsanaconda-ks.cfg jira-master.zip xampp-linux-x64-7.4.14-0-installer.run.1atlassian-jira-software-7.2.2-x64.bin xampp-linux-x64-7.4.14-0-installer.run
列出所有的运行的容器
#docker ps 命令#列出当前正在运行的容器-a #列出当前正在运行的容器 + 带出历史运行的容器-n=? #显示最近创建的容器-q #只显示容器的编号[root@localhost ~]# docker psCONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES[root@localhost ~]# docker ps -aCONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES0f6efcd405d9 centos "/bin/bash" 4 minutes ago Exited (0) About a minute ago strange_grothendieck1e87b2e797e1 cptactionhank/atlassian-jira-software:8.1.0 "/docker-entrypoint.…" 46 hours ago Exited (255) 59 minutes ago 0.0.0.0:8090->8080/tcp, :::8090->8080/tcp jira-software1853c568ab06 9f1d21c1025a "docker-entrypoint.s…" 46 hours ago Exited (255) 59 minutes ago 0.0.0.0:3306->3306/tcp, :::3306->3306/tcp, 33060/tcp mysqlc5812bde1a92 d1165f221234 "/hello" 3 days ago Exited (0) 3 days ago vibrant_cartwrightba84d1187514 d1165f221234 "/hello" 5 days ago Exited (0) 5 days ago condescending_mahavira
退出容器
exit #直接容器停止并退出Ctrl + P + Q #容器不停止退出[root@localhost ~]# docker ps #当前没有容器运行CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES[root@localhost ~]# docker run -it centos /bin/bash #容器不停止退出[root@cd37c8887b62 /]# [root@localhost ~]# docker ps #可以看到当前正在运行的容器CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMEScd37c8887b62 centos "/bin/bash" 21 seconds ago Up 20 seconds clever_fermat
删除容器
docker rm 容器ID #删除指定的容器,不能删除正在运行的容器,如果要强制删除 rm-fdocker rm -f $(docker ps -aq) #删除所有的容器docker ps -a -q|xargs docker rm #删除所有的容器[root@localhost ~]# docker rm cd37c8887b62Error response from daemon: You cannot remove a running container cd37c8887b6241953c518df86764812a24751d92853e759837e98b5153f2840e. Stop the container before attempting removal or force remove[root@localhost ~]# docker rm -f cd37c8887b62cd37c8887b62
启动和停止容器的操作
docker start 容器ID #启动容器docker restart 容器ID #重启容器docker stop 容器ID #停止当前正在运行的容器docker kill 容器ID #强制停止当前容器
常用其他命令
后台启动容器
#docker run -d 镜像名[root@localhost ~]# docker psCONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES[root@localhost ~]# docker run -d centos579465de4963353554e1bd2af04782c263223f674552c329b555336ad22083cc[root@localhost ~]# docker psCONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES从上面可以发现问题:在使用命令后台启动centos之后,docker ps 发现没有运行的容器centos停止运行了?为什么?常见的坑:docker 容器使用后台运行,就必须要有一个前台进程,docker发现没有应用,就会自动停止
查看日志
docker logs -f -t --taii 容器,发现容器没有日志#自己编写一段shell脚本[root@localhost ~]# docker run -d centos /bin/sh -c "while true;do echo hello,world;sleep 1;done"94a80050dc4b064efc64a1f01b1b646e6e778b9afd7de8439f29e8102e3bec9f[root@localhost ~]# docker psCONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES94a80050dc4b centos "/bin/sh -c 'while t…" 29 seconds ago Up 28 seconds nervous_kare[root@localhost ~]# docker logs -tf --tail 10 94a80050dc4b2021-07-24T09:45:35.957645789Z hello,world2021-07-24T09:45:36.962548024Z hello,world2021-07-24T09:45:37.967424222Z hello,world2021-07-24T09:45:38.970952228Z hello,world#显示日志-tf #显示日志 t 显示时间戳--tail number #要显示的日志条数
查看容器中进程信息
[root@localhost ~]# docker top 94a80050dc4bUID PID PPID C STIME TTY TIME CMDroot 3914 3895 0 17:44 ? 00:00:00 /bin/sh -c while true;do echo hello,world;sleep 1;doneroot 4430 3914 0 17:50 ? 00:00:00 /usr/bin/coreutils --coreutils-prog-shebang=sleep /usr/bin/sleep 1[root@localhost ~]#
查看容器中的元数据
docker inspect 容器id[root@localhost ~]# docker inspect 94a80050dc4b[{"Id": "94a80050dc4b064efc64a1f01b1b646e6e778b9afd7de8439f29e8102e3bec9f", #可以看到这里 我们容器ID的就是这里容器id取了前几位"Created": "2021-07-24T09:44:30.154427774Z","Path": "/bin/sh", #容器的启动路径"Args": ["-c","while true;do echo hello,world;sleep 1;done" #刚刚那个手写的脚本 一直循环输入hello world 每一秒],"State": {"Status": "running","Running": true,"Paused": false,"Restarting": false,"OOMKilled": false,"Dead": false,"Pid": 3914,"ExitCode": 0,"Error": "","StartedAt": "2021-07-24T09:44:30.626810771Z","FinishedAt": "0001-01-01T00:00:00Z"},"Image": "sha256:300e315adb2f96afe5f0b2780b87f28ae95231fe3bdd1e16b9ba606307728f55","ResolvConfPath": "/var/lib/docker/containers/94a80050dc4b064efc64a1f01b1b646e6e778b9afd7de8439f29e8102e3bec9f/resolv.conf","HostnamePath": "/var/lib/docker/containers/94a80050dc4b064efc64a1f01b1b646e6e778b9afd7de8439f29e8102e3bec9f/hostname","HostsPath": "/var/lib/docker/containers/94a80050dc4b064efc64a1f01b1b646e6e778b9afd7de8439f29e8102e3bec9f/hosts","LogPath": "/var/lib/docker/containers/94a80050dc4b064efc64a1f01b1b646e6e778b9afd7de8439f29e8102e3bec9f/94a80050dc4b064efc64a1f01b1b646e6e778b9afd7de8439f29e8102e3bec9f-json.log","Name": "/nervous_kare","RestartCount": 0,"Driver": "overlay2","Platform": "linux","MountLabel": "","ProcessLabel": "","AppArmorProfile": "","ExecIDs": null,"HostConfig": {"Binds": null,"ContainerIDFile": "","LogConfig": {"Type": "json-file","Config": {"max-size": "100m"}},"NetworkMode": "default","PortBindings": {},"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/dd4bfbc3d94f5ba7595ffec677271b7e7ea12ac16e8deadc9557737ced4155b4-init/diff:/var/lib/docker/overlay2/57444df837df39ca7b692f700d46e99c9ac472d0a79463398c5c1baffb11e9d0/diff","MergedDir": "/var/lib/docker/overlay2/dd4bfbc3d94f5ba7595ffec677271b7e7ea12ac16e8deadc9557737ced4155b4/merged","UpperDir": "/var/lib/docker/overlay2/dd4bfbc3d94f5ba7595ffec677271b7e7ea12ac16e8deadc9557737ced4155b4/diff","WorkDir": "/var/lib/docker/overlay2/dd4bfbc3d94f5ba7595ffec677271b7e7ea12ac16e8deadc9557737ced4155b4/work"},"Name": "overlay2"},"Mounts": [],"Config": {"Hostname": "94a80050dc4b","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 hello,world;sleep 1;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": "9e0b6936f4fa99b01c7803e6fa505807eec0ade1bdf48ef929e68dd1e365eb09","HairpinMode": false,"LinkLocalIPv6Address": "","LinkLocalIPv6PrefixLen": 0,"Ports": {},"SandboxKey": "/var/run/docker/netns/9e0b6936f4fa","SecondaryIPAddresses": null,"SecondaryIPv6Addresses": null,"EndpointID": "4e44f3eaad9d60a39b1885d26a6b7d7bb2ffd906bbde6aff3c083e7f80065482","Gateway": "172.17.0.1","GlobalIPv6Address": "","GlobalIPv6PrefixLen": 0,"IPAddress": "172.17.0.3","IPPrefixLen": 16,"IPv6Gateway": "","MacAddress": "02:42:ac:11:00:03","Networks": {"bridge": {"IPAMConfig": null,"Links": null,"Aliases": null,"NetworkID": "517171546df0fe9e01080f2fdfd4183ebcaba019655f8cec73ef220eb2b39eaa","EndpointID": "4e44f3eaad9d60a39b1885d26a6b7d7bb2ffd906bbde6aff3c083e7f80065482","Gateway": "172.17.0.1","IPAddress": "172.17.0.3","IPPrefixLen": 16,"IPv6Gateway": "","GlobalIPv6Address": "","GlobalIPv6PrefixLen": 0,"MacAddress": "02:42:ac:11:00:03","DriverOpts": null}}}}]
进入当前正在运行的容器
#我们通常容器都是使用后台方式运行的,需要进入容器修改一些配置时#命令docker exec -it 容器id BashShell#测试[root@localhost ~]# docker psCONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES51fa8fe0d85b centos "/bin/bash" 20 seconds ago Up 19 seconds quirky_elion[root@localhost ~]# docker exec -it 51fa8fe0d85b /bin/bash[root@51fa8fe0d85b /]# lsbin dev etc home lib lib64 lost+found media mnt opt proc root run sbin srv sys tmp usr var[root@51fa8fe0d85b /]# ps -efUID PID PPID C STIME TTY TIME CMDroot 1 0 0 09:14 pts/0 00:00:00 /bin/bashroot 15 0 0 09:15 pts/1 00:00:00 /bin/bashroot 32 15 0 09:16 pts/1 00:00:00 ps -ef#方式二docker attach 容器id[root@localhost ~]# docker attach 51fa8fe0d85b#docker exec #进入容器后开启一个新的终端#docker attach #进入容器正在执行的终端,不会启动新的进程!
从容器内拷贝文件到主机上
docker cp 容器id[root@localhost home]# docker attach 2075c5dd8b33 #进入docker容器内部[root@2075c5dd8b33 /]# cd /home[root@2075c5dd8b33 home]# ls#在容器内新建一个文件[root@2075c5dd8b33 home]# touch test.java[root@2075c5dd8b33 home]# exitexit#将文件拷贝出来到主机上[root@localhost home]# docker cp 2075c5dd8b33:/home/test.java /home[root@localhost home]# lshello.java jira test.java#拷贝是一个手动过程,未来使用-v 卷的技术,可以实现,自动同步
