参考官网:https://docs.docker.com/engine/reference/commandline/cli/
帮助启动类命令
启动docker: systemctl start docker
停止docker: systemctl stop docker
重启docker: systemctl restart docker
查看docker状态: systemctl status docker
设置开机启动: systemctl enable docker
查看docker概要信息: docker info
查看docker总体帮助文档: docker --help
查看docker总体帮助文档: docker --help
镜像命令
docker images 列出本地主机上的镜像
docker images
OPTIONS说明:
-a :列出本地所有的镜像(含历史映像层)
-q :只显示镜像ID。
各个表头参数说明:
REPOSITORY:表示镜像的仓库源
TAG:镜像的标签版本号 不指定显示最新的(latest)一个版本号
IMAGE ID:镜像ID
CREATED:镜像创建时间
SIZE:镜像大小
同一仓库源可以有多个 TAG版本,代表这个仓库源的不同个版本,我们使用 REPOSITORY:TAG 来定义不同的镜像。
如果你不指定一个镜像的版本标签,例如你只使用 ubuntu,docker 将默认使用 ubuntu:latest 镜像
docker search 查找某个镜像
从远程仓库搜索某个镜像
OPTIONS说明:
–limit : 只列出N个镜像,默认25个
如:docker search --limit 5 redis
各个表头参数说明:
docker pul下载镜像
docker pull redis
没有指定tag默认下载最新版,等价于
docker pull redis:latest
docker system df 查看镜像/容器/数据卷所占的空间
docker system df
docker rmi删除镜像
删除单个镜像
docker rmi -f 镜像ID
若使用docker rmi 镜像ID 提示该镜像被容器ef9abec1f025 使用,无法被删除
添加–force 或-f 表示强制删除该镜像
删除多个镜像
docker rmi -f 镜像名1 镜像名2
删除全部镜像
docker rmi -f $(docker images -qa)
将docker images -qa 传递给 docker rmi -f 命令
docker images -qa表示获取全部镜像ID
容器命令
docker pull 下载镜像
有镜像才能创建容器,这是根本前提
docker pull centos
docker pull ubuntu
centos(大约200M)占用内存比ubuntu(大约73M)大, 这里使用ubuntu镜像,
docker run 新建+启动容器( 交互式操作)
docker run [OPTIONS] IMAGE [COMMAND] [ARG…]
OPTIONS说明(常用):
注意有些是一个减号,有些是两个减号
–name=“容器新名字” 为容器指定一个名称;
-d: 后台运行容器并返回容器ID,也即启动守护式容器(后台运行);
-i:以交互模式运行容器,通常与 -t 同时使用;
-t:为容器重新分配一个伪输入终端,通常与 -i 同时使用;
也即启动交互式容器(前台有伪终端,等待交互);
-P: 随机端口映射,大写P
-p: 指定端口映射,小写p
docker run -it ubuntu /bin/bash
参数说明:
-i: 交互式操作。
-t: 终端。
-it:以交互模式启动一个容器,
ubuntu : ubuntu 镜像。
/bin/bash:表示在容器内部打开bash终端,用户可以在终端上执行命令和查看容器内部文件系统。放在镜像名后的是命令,这里我们希望有个交互式 Shell,因此用的是 /bin/bash。
要退出终端,直接输入 exit:
启动守护式容器(后台运行)
在大部分的场景下,我们希望 docker 的服务是在后台运行的,
我们可以过 -d 指定容器的后台运行模式。
docker run -d ubuntu
使用docker ps -a 进行查看, 会发现容器已经退出
很重要的要说明的一点: Docker容器如果想要在后台运行,就必须有一个前台进程.
容器运行的命令如果不是那些一直挂起的命令(比如运行top,tail),就是会自动退出的。
这个是docker的机制问题,比如你的web容器,我们以nginx为例,正常情况下,
我们配置启动服务只需要启动响应的service即可。例如service nginx start
但是,这样做,nginx为后台进程模式运行,就导致docker前台没有运行的应用,
这样的容器后台启动后,会立即自杀因为他觉得他没事可做了.
所以,最佳的解决方案是,将你要运行的程序以前台进程的形式运行,
常见就是交互式操作模式,表示我还有交互操作,别中断
以redis为例后台运行
docker run -d redis
前台交互式启动
以redis为例
docker run -it redis
对于redis、mysql这些应用,我们一般采用后台守护式启动
docker ps 列出当前所有正在运行的容器
docker ps [OPTIONS]
OPTIONS说明(常用):
-a :列出当前所有正在运行的容器+历史上运行过的
-l :显示最近创建的容器。
-n:显示最近n个创建的容器。
-q :静默模式,只显示容器编号。
exit/ctrl+p+q 退出容器
1 exit
run启动容器,exit退出,容器停止
2 ctrl+p+q
run启动容器,ctrl+p+q退出,容器不停止
docker start 启动已停止运行的容器
docker start 93ec18a9b1b6
docker restart 重启容器
docker restart 93ec18a9b1b6
docker stop 停止容器
docker stop 93ec18a9b1b6
docker kill 强制停止容器
docker kill 2f48b8d19c03
docker rm 删除已停止的容器
启动的容器不允许删除,先停止容器,再进行删除
或者强制删除
docker rm -f 4ac88c73b274
一次性删除多个容器实例
将docker ps -a -q返回的结果传递给docker rmi -f 命令
docker rm -f $(docker ps -a -q)
将docker ps -a -q 作为参数xargs 执行命令
docker ps -a -q | xargs docker rm
其它
docker logs查看容器日志
docker logs 0335b4a3cbae
docker top查看容器内运行的进程
docker top 0335b4a3cbae
docker inspect查看容器内部细节
docker inspect命令用于查看Docker对象的详细信息。它可以查看容器、镜像、网络等各种对象的详细信息,包括配置、状态、网络等方面的信息。
[root@dongguo ~]# docker inspect 0335b4a3cbae[ { "Id": "0335b4a3cbae05bfd4c03a19b471f2e320a759ae02bd58f82f2f81c062a30f77", "Created": "2023-06-23T21:00:17.885426188Z", "Path": "docker-entrypoint.sh", "Args": [ "redis-server" ], "State": { "Status": "running", "Running": true, "Paused": false, "Restarting": false, "OOMKilled": false, "Dead": false, "Pid": 15258, "ExitCode": 0, "Error": "", "StartedAt": "2023-06-23T21:00:18.045267761Z", "FinishedAt": "0001-01-01T00:00:00Z" }, "Image": "sha256:7614ae9453d1d87e740a2056257a6de7135c84037c367e1fffa92ae922784631", "ResolvConfPath": "/var/lib/docker/containers/0335b4a3cbae05bfd4c03a19b471f2e320a759ae02bd58f82f2f81c062a30f77/resolv.conf", "HostnamePath": "/var/lib/docker/containers/0335b4a3cbae05bfd4c03a19b471f2e320a759ae02bd58f82f2f81c062a30f77/hostname", "HostsPath": "/var/lib/docker/containers/0335b4a3cbae05bfd4c03a19b471f2e320a759ae02bd58f82f2f81c062a30f77/hosts", "LogPath": "/var/lib/docker/containers/0335b4a3cbae05bfd4c03a19b471f2e320a759ae02bd58f82f2f81c062a30f77/0335b4a3cbae05bfd4c03a19b471f2e320a759ae02bd58f82f2f81c062a30f77-json.log", "Name": "/festive_ride", "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, "ConsoleSize": [ 34, 131 ], "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", "Isolation": "", "CpuShares": 0, "Memory": 0, "NanoCpus": 0, "CgroupParent": "", "BlkioWeight": 0, "BlkioWeightDevice": [], "BlkioDeviceReadBps": [], "BlkioDeviceWriteBps": [], "BlkioDeviceReadIOps": [], "BlkioDeviceWriteIOps": [], "CpuPeriod": 0, "CpuQuota": 0, "CpuRealtimePeriod": 0, "CpuRealtimeRuntime": 0, "CpusetCpus": "", "CpusetMems": "", "Devices": [], "DeviceCgroupRules": null, "DeviceRequests": null, "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/1ca531c9fe50499d3bea2948a29f0e2fae0c4ef27efeb1e7d92a965b67d0af71-init/diff:/var/lib/docker/overlay2/0cb171a5403987a76a8cf3a670b85f01fd6b4b3e3605c4452fdb07fe52e77b9c/diff:/var/lib/docker/overlay2/441e4c82f35c47524d53beaf146cc3b22abf42d59ec31f9687cc586b7dfd051c/diff:/var/lib/docker/overlay2/7a5e7e57e9aba2dcfd758fc0866e9af6dbb3111327544069e6be9d539f970ec3/diff:/var/lib/docker/overlay2/1db4ca7e11010350ad63f9f302f037911ab42e12247946e0610bae41292d40e6/diff:/var/lib/docker/overlay2/23cfa44bd9728c6ea5686c0136196b3328520705d7078a7aa75be3b8401521e3/diff:/var/lib/docker/overlay2/929c534593b838115d695073b935dc877e1c371009ea4274f14b593022f95195/diff", "MergedDir": "/var/lib/docker/overlay2/1ca531c9fe50499d3bea2948a29f0e2fae0c4ef27efeb1e7d92a965b67d0af71/merged", "UpperDir": "/var/lib/docker/overlay2/1ca531c9fe50499d3bea2948a29f0e2fae0c4ef27efeb1e7d92a965b67d0af71/diff", "WorkDir": "/var/lib/docker/overlay2/1ca531c9fe50499d3bea2948a29f0e2fae0c4ef27efeb1e7d92a965b67d0af71/work" }, "Name": "overlay2" }, "Mounts": [ { "Type": "volume", "Name": "a564bb56e5f355f39526203c2d0c2ccc9ad7cdb3eec883fd73c5b2f3d36f87ac", "Source": "/var/lib/docker/volumes/a564bb56e5f355f39526203c2d0c2ccc9ad7cdb3eec883fd73c5b2f3d36f87ac/_data", "Destination": "/data", "Driver": "local", "Mode": "", "RW": true, "Propagation": "" } ], "Config": { "Hostname": "0335b4a3cbae", "Domainname": "", "User": "", "AttachStdin": false, "AttachStdout": false, "AttachStderr": false, "ExposedPorts": { "6379/tcp": {} }, "Tty": false, "OpenStdin": false, "StdinOnce": false, "Env": [ "PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin", "GOSU_VERSION=1.12", "REDIS_VERSION=6.2.6", "REDIS_DOWNLOAD_URL=http://download.redis.io/releases/redis-6.2.6.tar.gz", "REDIS_DOWNLOAD_SHA=5b2b8b7a50111ef395bf1c1d5be11e6e167ac018125055daa8b5c2317ae131ab" ], "Cmd": [ "redis-server" ], "Image": "redis", "Volumes": { "/data": {} }, "WorkingDir": "/data", "Entrypoint": [ "docker-entrypoint.sh" ], "OnBuild": null, "Labels": {} }, "NetworkSettings": { "Bridge": "", "SandboxID": "eb1f015b5514625fd0f01ba5d92a4dfe66a9275b85c89f487976675b02134276", "HairpinMode": false, "LinkLocalIPv6Address": "", "LinkLocalIPv6PrefixLen": 0, "Ports": { "6379/tcp": null }, "SandboxKey": "/var/run/docker/netns/eb1f015b5514", "SecondaryIPAddresses": null, "SecondaryIPv6Addresses": null, "EndpointID": "1f6670fa68e2627489a004f8cb78c367ddb260b6e8fd379f25a3fc4c070c4775", "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": "f3d2dc5a51080f517a978680b82469bb72ee261900f9ab0665d58ea1a28b95d8", "EndpointID": "1f6670fa68e2627489a004f8cb78c367ddb260b6e8fd379f25a3fc4c070c4775", "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进入正在运行的容器
以命令行交互
docker exec -it aaa14efee277 /bin/bash
1.运行ubuntu
开启一个新的会话,进入Ubuntu容器
docker attach进入正在运行的容器
ocker attach aaa14efee277
区别
exec 是在容器中打开新的终端,并且可以启动新的进程
用exit退出,不会导致容器的停止。
attach 直接进入容器启动命令的终端,不会启动新的进程
用exit退出,会导致容器的停止。
推荐使用 docker exec 命令,因为退出容器终端,不会导致容器的停止。
docker cp 从容器内拷贝文件到主机上
docker cp 容器ID:容器内路径 目的主机路径
将/下的a.txt拷贝到/tmp目录下
docker cp aaa14efee277:/a.txt /tmp/a.txt
导入和导出容器
export
导出容器的内容留作为一个tar归档文件
import
从tar包中的内容创建一个新的文件系统再导入为镜像
cat /tmp/abc.tar | docker import - dongguo/ubuntu:latest