概念:容器是docker的核心概念之一,容器是镜像运行的实例。镜像是一个只读的静态文件,容器是有运行时需要的可写文件层,容器中程序处于运行状态。
容器的7种状态
created(已创建)
restarting(重启中)
running(运行中)
removing(迁移中)
paused(暂停)
exited(停止)
dead(死亡)
用docker ps -a 可以查看 容器的状态
4.1创建容器、删除容器
[xxx@rocky9-docker ~]$ docker create -it centos
837966a72016e4e8cb4471700ecd9fb408fbd693adec8bbadf62d40f6117eb8d
[xxx@rocky9-docker ~]$ docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
[xxx@rocky9-docker ~]$ docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
837966a72016 centos "/bin/bash" 9 seconds ago Created zen_fermi
2bae5889ca5f test:0.11 "bash" 4 hours ago Exited (0) 4 hours ago friendly_chaplygin
25dbd5a4fdb5 ea16f5beeaac "bash" 4 hours ago Exited (0) 4 hours ago ecstatic_engelbart
d914d1f8da7c centos "bash" 4 hours ago Exited (2) 4 hours ago hardcore_meninsky
[xxx@rocky9-docker ~]$ docker rm 837966a72016
837966a72016
[xxx@rocky9-docker ~]$ docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
2bae5889ca5f test:0.11 "bash" 4 hours ago Exited (0) 4 hours ago friendly_chaplygin
25dbd5a4fdb5 ea16f5beeaac "bash" 4 hours ago Exited (0) 4 hours ago ecstatic_engelbart
d914d1f8da7c centos "bash" 4 hours ago Exited (2) 4 hours ago hardcore_meninsky
命令解释:
docker create -it centos #创建一个容器,
-i保持标准输入打开 -t是否分配一个伪终端,默认为false
docker create的参数选项十分繁多,分为运行模式、环境配置、资源限制、安全保护。
docker rm 837966a72016 #删除容器ID为2016的容器,rm命令用于删除处于终止或者退出状态的容器.
-f 强行终止并删除一个运行的容器
-l 删除容器的连接,但保留容器
-v 删除容器挂载的数据卷
docker create命令,发现其相关选项有点多,为方便以后查看,通过网络搜索整理如下:
1、create 命令与容器运行模式相关的选项:
-a,--attach= [] 是否绑定到标准输人、输出和错误
-d,--detach=true| false 是否在后台运行容器,默认为否
--detach-keys="" 从attach模式退出的快捷键
--entrypoint="" 镜像存在人口命令时,覆盖为新的命令
-- expose= [] 指定容器会暴露出来的端口或端口范围
--group-add= [] 运行容器的用户组
-i,-- interactive=true| false 保持标准输人打开,默认为false
--ipc="" 容器IPC命名空间,可以为其他容器或主机
-- isolation= "default" 容器使用的隔离机制
-- log-driver= "json-file" 指定容器的日志驱动类型,可以为json-file、syslog、journald、gelf、fluentd、awslogs、splunk、etwlogs、gcplogs或none
--log-opt=[] 传递给日志驱动的选项
- -net= "bridge" 指定容器网络模式,包括bridge、none、 其他容器内网络、host 的网络或某个现有网络等
--net-alias= [] 容器在网络中的别名
-P,--publish-all=true | false 通过NAT机制将容器标记暴露的端口自动映射到本地主机的临时端口
-p, --publish=[] 指定如何映射到本地主机端口,例如-p 11234-12234:1234-2234
--pid=host 容器的PID命名空间
--userns="" 启用userns - remap时配置用户命名空间的模式
--uts=host 容器的utS命名空间
-- restart= "no" 容器的重启策略,包括no、on- failure[:max-retry]、always、unless- stopped等
-- rm=true | false 容器退出后是否自动删除,不能跟-d同时使用
-t,--tty=true | false 是否分配-一个伪终端,默认为false
-- tmpfs= [] 挂载临时文件系统到容器
-v| --volume [= [ [HOST- DIR: ] CONTAINER -DIR [:OPTIONS]]] 挂载主机上的文件卷到容器内
- -volume - driver="" 挂载文件卷的驱动类型
--volumes- from= [] 从其他容器挂载卷
-W,--workdir= ”” 容器内的默认工作目录
2、create命令与容器环境和配置相关的选项
-- add-host= [] 在容器内添加一个 主机名到IP地址的映射关 系(通过/etc/hosts 文件)
-- device= [] 映射物理机上的设备到容器内
--dns - search= [] DNS搜索域
--dns -opt= [] 自定义的DNS选项
--dns= [] 自定义的DNS服务器
-e,--env= [] 指定容器内环境变量
--env-file= [] 从文件中读取环境变量到容器内
-h,-- hostname=" " 指定容器内的主机名
--ip=" " 指定容器的IPv4地址
--ip6=" " 指定容器的IPv6地址
--link= [<name or id>:alias] 链接到其他容器
--link-local-ip= [] : 容器的本地链接地址列表
- - mac-address=" " 指定容器的Mac地址
--name=" " 指定容器的别名
3、create命令与容器资源限制和安全保护相关的选项
--blkio-weight=10~1000 容器读写块设备的1/0性能权重,默认为0
--blkio-weight-device=[DEVICE_ NAME : WEIGHT] 指定各个块设备的I/O性能权重
--cpu-shares=0 允许容器使用CPU资源的相对权重,默认一个容器能用满个核的 CPU
--cap-add=[] 增加容器的Linux指定安全能力
--cap-drop=[] 移除容器的Linux指定安全能力
--cgroup-parent=" " 容器cgroups 限制的创建路径
--cidfile="" 指定容器的进程ID号写到文件
--cpu-period=0 限制容器在CFS调度器下的CPU占用时间片
--cpuset-cpus=" " 限制容器能使用哪些CPU核心
--cpuset-mems=" " NUMA架构下使用哪些核心的内存
--cpu-quota=0 限制容器在CFS调度器下的CPU配额
--device-read-bps=[] 挂载设备的读吞吐率(以bps为单位)限制
--device-write-bps=[] 挂载设备的写吞吐率(以bps为单位)限制
--device-read-iops=[] 挂载设备的读速率(以每秒io次数为单位)限制
--device-write-iops=[] 挂载设备的写速率(以每秒i/o次数为单位)限制
--health-cmd=" " 指定检查容器健康状态的命令
--health-interval=0s 执行健康检查的间隔时间,单位可以为ms、s、 m或h
--health-retries=int 健康检查失败重试次数,超过则认为不健康
--health-start-period=0s 容器启动后进行健康检查的等待时间,单位可以为ms、s、m或h
--health-timeout=0s 健康检查的执行超时,单位可以为ms、s、m或h
--no-healthcheck=true|false 是否禁用健康检查
--init 在容器中执行-一个init进程,来负责响应信号和处理僵尸状态子进程
--kernel-memory=" " 限制容器使用内核的内存大小,单位可以是b、k、m或g
-m,--memory=" " 限制容器内应用使用的内存,单位可以是b、k、m或g
--memory-reservation="" 当系统中内存过低时,容器会被强制限制内存到给定值,默认情况下等于内存限制值
--memory-swap="LIMIT" 限制容器使用内存和交换区的总大小
--oom-kill-disable=true|false 内存耗尽时是否杀死容器
--00m-score-adj="" 调整容器的内存耗尽参数
--pids-limit="" 限制容器的pid个数
--privileged-true|false 是否给容器高权限,这意味着容器内应用将不受权限的限制,一般不推荐
--read-only=true|false 是否让容器内的文件系统只读
--security-opt= [] 指定一些安全参数,包括权限、安全能力、apparmor等
--stop-signal=SIGTERM 指定停止容器的系统信号
-- shm-size="" /dev/shm的大小
--sig-proxy=true| false 是否代理收到的信号给应用,默认为true,不能代理SIGCHLD、SIGSTOP和SIGKILL信号
--memory-swappiness="0~100" 调整容器的内存交换区参数
-U,--user="" 指定在容器内执行命令的用户信息
--userns="" 指定用户命名空间
--ulimit=[] 通过ulimit来限制最大文件数、最大进程数
4.2 启动容器
在4.1中创建了一个容器又删除了,所以重新创建一个。
方法1:先create创建,再start启动
[xxx@rocky9-docker ~]$ docker create -it --name xxxcentos centos:20240712
f93c9478e03aca813350fa2b22a5b66f620ff8ffa632b0a71d0adcad921a515d
[xxx@rocky9-docker ~]$ docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
f93c9478e03a centos:20240712 "/bin/bash" 7 seconds ago Created xxxcentos
2bae5889ca5f test:0.11 "bash" 4 hours ago Exited (0) 4 hours ago friendly_chaplygin
25dbd5a4fdb5 ea16f5beeaac "bash" 4 hours ago Exited (0) 4 hours ago ecstatic_engelbart
d914d1f8da7c centos "bash" 4 hours ago Exited (2) 4 hours ago hardcore_meninsky
02ac80889c7b centos "bash" 4 hours ago Exited (0) 4 hours ago xenodochial_ramanujan
dc1b238d67ab ubuntu "bash" 6 hours ago Exited (127) 5 hours ago beautiful_mcclintock
cbe058205e27 centos "bash" 6 hours ago Exited (0) 6 hours ago nifty_lalande
fe2a4243df90 centos "bash" 6 hours ago Exited (0) 6 hours ago musing_benz
f7f0c5dd4e7b centos:latest "bash" 7 hours ago Exited (0) 7 hours ago nice_torvalds
1a8281e75284 ubuntu:latest "bash" 7 hours ago Exited (127) 7 hours ago kind_nash
4d1e01af4f23 ubuntu:latest "bash" 7 hours ago Exited (0) 7 hours ago sad_boyd
[xxx@rocky9-docker ~]$ docker start xxxcentos
xxxcentos
[xxx@rocky9-docker ~]$ docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
f93c9478e03a centos:20240712 "/bin/bash" About a minute ago Up 3 seconds xxxcentos
2bae5889ca5f test:0.11 "bash" 4 hours ago Exited (0) 4 hours ago friendly_chaplygin
如上命令所示,这回出现了一个新的--name选项,是定义容器名字,如果没有此参数,docker将自动生成一个容器名。
方法2:创建并启动
[xxx@rocky9-docker ~]$ docker run -d -it --name x2centos centos:latest bash
c6fa52ccd323cdc42c6b1dd1551cc622f25effe0addb431bc68bc4dd9a6e7c60
[xxx@rocky9-docker ~]$ docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
c6fa52ccd323 centos:latest "bash" 6 seconds ago Up 5 seconds x2centos
f93c9478e03a centos:20240712 "/bin/bash" 6 minutes ago Up 5 minutes xxxcentos
如上命令所示,docker run -d选项是创建并运行,一条命令,它在后台的操作包含:
检查本地是否存在指定镜像,若不存在就去下载
利用镜像创建一个容器,并启动该容器
分配一个文件系统给容器,并在只读的镜像层外面挂载一层可读写层
从宿主机配置的网桥接口中桥接一个虚拟接口到容器中
从网桥的地址池配置一个IP地址给容器
执行用户指定的用户程序
执行完毕后容器被自动终止
4.3 暂停、停止容器
[xxx@rocky9-docker ~]$ docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
c6fa52ccd323 centos:latest "bash" 38 hours ago Up 38 hours x2centos
f93c9478e03a centos:20240712 "/bin/bash" 38 hours ago Up 38 hours xxxcentos
[xxx@rocky9-docker ~]$ docker pause x2centos
x2centos
[xxx@rocky9-docker ~]$ docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
c6fa52ccd323 centos:latest "bash" 38 hours ago Up 38 hours (Paused) x2centos
f93c9478e03a centos:20240712 "/bin/bash" 38 hours ago Up 38 hours xxxcentos
[xxx@rocky9-docker ~]$ docker stop xxxdentos
Error response from daemon: No such container: xxxdentos
[xxx@rocky9-docker ~]$ docker stop xxxcentos
xxxcentos
[xxx@rocky9-docker ~]$ docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
c6fa52ccd323 centos:latest "bash" 38 hours ago Up 38 hours (Paused) x2centos
命令:
docker pause 容器名或ID #暂停
docker unpause 容器名或ID #取消暂停
docker stop 容器名或ID #停止
docker start 容器名或ID #开启, 停止后只能重新开启
docker restart 容器名或ID #将一个处于运行状态的容器终止,再开启。
4.4进入容器
进入容器命令行有2个命令,1.attach 2.exec
由于1.attach非常不方便,所以抛弃吧,直接用exec
[xxx@rocky9-docker ~]$ docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
c6fa52ccd323 centos:latest "bash" 3 days ago Up 2 days x2centos
[xxx@rocky9-docker ~]$ docker exec -it x2centos /bin/bash
[root@c6fa52ccd323 /]# ls
bin etc lib lost+found mnt proc run srv tmp var
dev home lib64 media opt root sbin sys usr
[root@c6fa52ccd323 /]#
docker exec -it 容器名 /bin/bash 即可进入
4.5导入和导出容器
[xxx@rocky9-docker ~]$ sudo docker export -o /home/test3.tar f93c9478e03a
[xxx@rocky9-docker ~]$ ls -lh /home/test3.tar
-rw-------. 1 root root 228M Jul 16 16:04 /home/test3.tar
sudo docker export -o 指定容器路径和文件名 容器名或容器ID
[xxx@rocky9-docker ~]$ sudo docker import /home/test2.tar import-test2
[sudo] password for xxx:
sha256:0f48638957f08ae45694dc1bb54ce6bcb6e6288d21db4a65a7d81d0efcd6b513
[xxx@rocky9-docker ~]$ docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
import-test2 latest 0f48638957f0 6 seconds ago 231MB
sudo docker import 容器路径 导入后的镜像名
import导入后变成镜像而不是容器。
这里解释一下load import的区别,以及save export的区别。
docker load 会将整个镜像加载到 Docker 中,包括镜像的历史、标签、配置等元数据。
docker import 允许从文件系统快照创建一个新的 Docker 镜像。创建的镜像只包括文件系统快照和一些基本元数据,不包含原始镜像的完整元数据(如历史、标签等)。
如果你需要完整迁移整个镜像,备份所有元数据,那么 docker load 是更合适的选择。而如果你只有一个文件系统快照,并且想要创建一个简单的镜像,那么 docker import 可能更适合你。合理的选择取决于你的具体需求和项目背景。
docker save 保存的是完整的镜像,分层文件系统形式保存,export保存的是容器。转发某CS*DN的文章对比图片看看区别。
4.6查看容器
4.6.1查看详情:docker container inspect 容器名
以json格式返回包括容器ID\创建时间、路径形态、镜像配置等内容,如下代码。
[xxx@rocky9-docker ~]$ docker container inspect x2centos
[
{
"Id": "c6fa52ccd323cdc42c6b1dd1551cc622f25effe0addb431bc68bc4dd9a6e7c60",
"Created": "2024-07-12T14:02:12.797002744Z",
"Path": "bash",
"Args": [],
"State": {
"Status": "running",
"Running": true,
"Paused": false,
"Restarting": false,
"OOMKilled": false,
"Dead": false,
"Pid": 957647,
"ExitCode": 0,
"Error": "",
"StartedAt": "2024-07-14T03:50:41.720299027Z",
"FinishedAt": "2024-07-14T03:50:41.363533516Z"
},
"Image": "sha256:5d0da3dc976460b72c77d94c8a1ad043720b0416bfc16c52c45d4847e53fadb6",
"ResolvConfPath": "/docker/docker-data/containers/c6fa52ccd323cdc42c6b1dd1551cc622f25effe0addb431bc68bc4dd9a6e7c60/resolv.conf",
"HostnamePath": "/docker/docker-data/containers/c6fa52ccd323cdc42c6b1dd1551cc622f25effe0addb431bc68bc4dd9a6e7c60/hostname",
"HostsPath": "/docker/docker-data/containers/c6fa52ccd323cdc42c6b1dd1551cc622f25effe0addb431bc68bc4dd9a6e7c60/hosts",
"LogPath": "/docker/docker-data/containers/c6fa52ccd323cdc42c6b1dd1551cc622f25effe0addb431bc68bc4dd9a6e7c60/c6fa52ccd323cdc42c6b1dd1551cc622f25effe0addb431bc68bc4dd9a6e7c60-json.log",
"Name": "/x2centos",
"RestartCount": 0,
"Driver": "overlay2",
"Platform": "linux",
"MountLabel": "",
"ProcessLabel": "",
"AppArmorProfile": "",
"ExecIDs": [
"48f8456f315bcaf4b44108a5db7139d0790c1bc1729d33fe5323f235fc93d6e5"
],
"HostConfig": {
"Binds": null,
"ContainerIDFile": "",
"LogConfig": {
"Type": "json-file",
"Config": {}
},
"NetworkMode": "bridge",
"PortBindings": {},
"RestartPolicy": {
"Name": "no",
"MaximumRetryCount": 0
},
"AutoRemove": false,
"VolumeDriver": "",
"VolumesFrom": null,
"ConsoleSize": [
46,
146
],
"CapAdd": null,
"CapDrop": null,
"CgroupnsMode": "private",
"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": null,
"PidsLimit": null,
"Ulimits": [],
"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",
"/sys/devices/virtual/powercap"
],
"ReadonlyPaths": [
"/proc/bus",
"/proc/fs",
"/proc/irq",
"/proc/sys",
"/proc/sysrq-trigger"
]
},
"GraphDriver": {
"Data": {
"LowerDir": "/docker/docker-data/overlay2/79b25983fb0eab9b2fb8b5371d6465d8adf561d7ccf8473c516edf3404e538c7-init/diff:/docker/docker-data/overlay2/0d87995612142bb3d8b4c8434e6dddccde49ee39a51d7955e19eea15915bb696/diff",
"MergedDir": "/docker/docker-data/overlay2/79b25983fb0eab9b2fb8b5371d6465d8adf561d7ccf8473c516edf3404e538c7/merged",
"UpperDir": "/docker/docker-data/overlay2/79b25983fb0eab9b2fb8b5371d6465d8adf561d7ccf8473c516edf3404e538c7/diff",
"WorkDir": "/docker/docker-data/overlay2/79b25983fb0eab9b2fb8b5371d6465d8adf561d7ccf8473c516edf3404e538c7/work"
},
"Name": "overlay2"
},
"Mounts": [],
"Config": {
"Hostname": "c6fa52ccd323",
"Domainname": "",
"User": "",
"AttachStdin": false,
"AttachStdout": false,
"AttachStderr": false,
"Tty": true,
"OpenStdin": true,
"StdinOnce": false,
"Env": [
"PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"
],
"Cmd": [
"bash"
],
"Image": "centos:latest",
"Volumes": null,
"WorkingDir": "",
"Entrypoint": null,
"OnBuild": null,
"Labels": {
"org.label-schema.build-date": "20210915",
"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": "27e58949196d4a30f78c41dd86c52a8efd5d9021d91ff92aa26bb87b28cac642",
"SandboxKey": "/var/run/docker/netns/27e58949196d",
"Ports": {},
"HairpinMode": false,
"LinkLocalIPv6Address": "",
"LinkLocalIPv6PrefixLen": 0,
"SecondaryIPAddresses": null,
"SecondaryIPv6Addresses": null,
"EndpointID": "9a8e8ed32d7886856101261d94d7bc1d3e8f006277bb5187a7a593ea1e8cde1b",
"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,
"MacAddress": "02:42:ac:11:00:02",
"NetworkID": "64d986b97cdc8b1006f04246a652b046ad9430cb2012128deef024aee668b2b9",
"EndpointID": "9a8e8ed32d7886856101261d94d7bc1d3e8f006277bb5187a7a593ea1e8cde1b",
"Gateway": "172.17.0.1",
"IPAddress": "172.17.0.2",
"IPPrefixLen": 16,
"IPv6Gateway": "",
"GlobalIPv6Address": "",
"GlobalIPv6PrefixLen": 0,
"DriverOpts": null,
"DNSNames": null
}
}
}
}
]
[xxx@rocky9-docker ~]$
4.6.2查看容器内进程docker container top 容器名
[xxx@rocky9-docker ~]$ docker container top x2centos
UID PID PPID C STIME TTY TIME CMD
root 957647 957615 0 Jul14 pts/0 00:00:00 bash
root 1575253 957615 0 Jul15 pts/1 00:00:00 /bin/bash
4.6.3查看容器统计信息,显示CPU内存存储网络等使用情况
docker container stats 容器名
可用选项: -a 输出所有容器统计信息,--format string格式化输出信息,--no-stream 不持续输出。
[xxx@rocky9-docker ~]$ docker container stats -a x2centos
CONTAINER ID NAME CPU % MEM USAGE / LIMIT MEM % NET I/O BLOCK I/O PIDS
c6fa52ccd323 x2centos 0.00% 2.039MiB / 7.499GiB 0.03% 4.94kB / 0B 1.25MB / 8.19kB 2
CONTAINER ID NAME CPU % MEM USAGE / LIMIT MEM % NET I/O BLOCK I/O PIDS
c6fa52ccd323 x2centos 0.00% 2.039MiB / 7.499GiB 0.03% 4.94kB / 0B 1.25MB / 8.19kB 2
4.7其他容器命令cp,diff,port,update的使用
1.cp
docker cp命令是Docker提供的一个用于在主机和容器之间复制文件和目录的命令。它的语法如下:
docker cp [OPTIONS] CONTAINER:SRC_PATH DEST_PATH
docker cp [OPTIONS] SRC_PATH|- CONTAINER:DEST_PATH
CONTAINER,可以是正在运行或已停止的容器,名称或ID均可
SRC_PATH,源文件或目录在容器内的路径
DEST_PATH,目标路径在主机上的位置
[xxx@rocky9-docker ~]$ docker run -itd --name test1 test:0.11 /bin/bash
87f7aed860559af7c1390810638c77394037486108c2d0b23d6feb225dfa5803
[xxx@rocky9-docker ~]$ docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
87f7aed86055 test:0.11 "/bin/bash" 2 seconds ago Up 2 seconds test1
c6fa52ccd323 centos:latest "bash" 4 days ago Up 2 days x2centos
[xxx@rocky9-docker ~]$
先开启2个容器。
[xxx@rocky9-docker ~]$ docker exec -it test1 /bin/bash
[root@87f7aed86055 /]# ls
bin etc lib lost+found mnt proc run srv test usr
dev home lib64 media opt root sbin sys tmp var
[root@87f7aed86055 /]# touch /tmp/test.test #创建一个文件
[root@87f7aed86055 /]# ls -l /tmp/test.test
-rw-r--r--. 1 root root 0 Jul 17 01:34 /tmp/test.test
[root@87f7aed86055 /]# exit
exit
[xxx@rocky9-docker ~]$ sudo docker cp test1:/tmp/test.test /home/ #从容器复制文件到宿主机
[sudo] password for xxx:
Successfully copied 1.54kB to /home/
[xxx@rocky9-docker ~]$ docker cp test1:/tmp/ /tmp/www/ #从容器复制目录到宿主机
Successfully copied 8.7kB to /tmp/www/
[xxx@rocky9-docker ~]$ docker cp /etc/passwd test1:/tmp/ps.d #从宿主机复制文件到容器
Successfully copied 3.07kB to test1:/tmp/ps.d
从容器复制到宿主机:
sudo docker cp 容器名:绝对路径 目的地址
从容器复制目录到宿主机:
sudo docker cp 容器名:绝对路径 目的地址
注意:docker不支持从容器复制文件到容器,只能先复制到宿主机再从宿主机复制到另外一个容器。
2.diff命令查看容器内的数据修改:
[xxx@rocky9-docker ~]$ docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
87f7aed86055 test:0.11 "/bin/bash" 23 minutes ago Up 23 minutes test1
c6fa52ccd323 centos:latest "bash" 4 days ago Up 2 days x2centos
[xxx@rocky9-docker ~]$ docker container diff test1
C /tmp
A /tmp/test.test
A /tmp/ps.d
C /root
C /root/.bash_history
3.docker container port test1 查看容器的端口映射情况
4.docker update更新容器配置,包含限制CPU、内容使用等参数,这里不详解。
上一条:Docker安装以Ubuntu系统24.04为基础环境
下一条:容器化及Docker基础概念
品质保证
多年的生产力软件专家
专业实力
资深技术支持项目实施团队
安全无忧
多位认证安全工程师
多元服务
软件提供方案整合,项目咨询实施
购软平台-找企业级软件,上购软平台。平台提供更齐全的软件产品、更专业的技术服务,同时提供行业资讯、软件使用教程和技巧。购软平台打造企业级数字产品综合应用服务平台。用户体验和数字类产品的专业化服务是我们不断追求的目标。购软平台您身边的企业级数字产品优秀服务商。