docker容器常用命令
docker容器常用命令
查看容器
CONTAINER ID :容器 ID
IMAGE :所属镜像
COMMAND :
CREATED :创建时间
STATUS :容器状态
PORTS :端口
NAMES :容器名称
查看正在运行的容器
docker ps
查看停止的容器
docker ps -f status=exited
查看所有容器(包括运行和停止)
docker ps -a
查看最后一次运行的容器
docker ps -l
列出最近创建的 n 个容器
docker ps -n 5
查看容器详细信息
docker inspect 容器名称|容器ID
[root@centos8 _data]# docker inspect nginx03
Source是目录挂载的Linux目录
Destination是目录挂载的容器目录
"Mounts": [
{
"Type": "volume",
"Name": "068db5be074269223601decf6480553ff789ab3463fd688d38eed37d6e5a2949",
"Source": "/var/lib/docker/volumes/068db5be074269223601decf6480553ff789ab3463fd688d38eed37d6e5a2949/_data",
"Destination": "/usr/local/date",
"Driver": "local",
"Mode": "",
"RW": true,
"Propagation": ""
}
],
查看所有某种网络连接下的容器
docker network inspect none|container|bridge|host
[root@centos8 ~]# docker network inspect none
[
{
"Name": "none",
"Id": "725d3522df53092cc71afc1127c9d6134fcdbc369c407cb2afa0553176105e29",
"Created": "2021-10-14T10:58:20.782070343-04:00",
"Scope": "local",
"Driver": "null",
"EnableIPv6": false,
"IPAM": {
"Driver": "default",
"Options": null,
"Config": []
},
"Internal": false,
"Attachable": false,
"Ingress": false,
"ConfigFrom": {
"Network": ""
},
"ConfigOnly": false,
"Containers": {
"c541c5c2fab770661970ed81bd3287edad19279eadf0a26683d083c3e95aaf91": {
"Name": "bbox03",
"EndpointID": "b39939f1b9cc010224a8e28ad5ccb9726735c003a722ae8667874f2bfdb950f3",
"MacAddress": "",
"IPv4Address": "",
"IPv6Address": ""
}
},
"Options": {},
"Labels": {}
}
]
[root@centos8 ~]#
查看volume数据卷信息
[root@centos8 _data]# docker volume ls
DRIVER VOLUME NAME
local 068db5be074269223601decf6480553ff789ab3463fd688d38eed37d6e5a2949
local docker_nginx_data
[root@centos8 _data]#
查看目录挂载关系
[root@centos8 _data]# docker volume inspect docker_nginx_data
[
{
"CreatedAt": "2021-10-17T07:13:20-04:00",
"Driver": "local",
"Labels": null,
"Mountpoint": "/var/lib/docker/volumes/docker_nginx_data/_data",
"Name": "docker_nginx_data",
"Options": null,
"Scope": "local"
}
]
[root@centos8 _data]#
创建与启动容器
docker run [OPTIONS] IMAGE [COMMAND] [ARG...]
[root@centos8 docker_nginx]# docker inspect nginx02
-i :表示运行容器;
-t :表示容器启动后会进入其命令行。加入这两个参数后,容器创建就能登录进去。即分配一个
伪终端;
–name :为创建的容器命名;
-v :表示目录映射关系(前者是宿主机目录,后者是映射到宿主机上的目录),可以使用多个 -v
做多个目录或文件映射。注意:最好做目录映射,在宿主机上做修改,然后共享到容器上;
-d :在 run 后面加上 -d 参数,则会创建一个守护式容器在后台运行(这样创建容器后不会自动登
录容器,如果只加 -i -t 两个参数,创建容器后就会自动进容器里);
-p(小写) :表示端口映射,前者是宿主机端口,后者是容器内的映射端口。可以使用多个 -p 做多个端口
映射。
-P(大写) :随机使用宿主机的可用端口与容器内暴露的端口映射。
创建并进入容器
docker run -it --name 容器名称 镜像名称:标签 /bin/bash
[root@centos8 etc]# docker run -it --name mynginx -P nginx /bin/bash
root@f6f675b87613:/#
退出当前容器
exit
[root@centos8 etc]# docker run -it --name mynginx -P nginx /bin/bash
root@f6f675b87613:/# exit
exit
[root@centos8 etc]#
守护式方式创建容器
docker run -id --name 容器名称 镜像名称:标签
[root@centos8 etc]# docker run -id --name mynginx -p 6872:80 nginx
bc12f7a947a7e11d9c3e1d12416a205e25d6446eb8c24cca0f3a5322b5a26240
[root@centos8 etc]#
登录后台运行的容器
运行并进入 容器名称|容器ID 的== /bin/bash ==
docker exec -it 容器名称|容器ID /bin/bash
[root@centos8 etc]# docker exec -it mynginx /bin/bash
root@bc12f7a947a7:/#
停止与启动容器
# 停止容器
docker stop 容器名称|容器ID
# 启动容器
docker start 容器名称|容器ID
[root@centos8 etc]# docker stop mynginx
mynginx
[root@centos8 etc]# docker start mynginx
mynginx
[root@centos8 etc]#
文件拷贝
将文件拷贝到容器内
docker cp 需要拷贝的文件或目录 容器名称:容器目录
[root@centos8 etc]# vim test_for_copy.txt
[root@centos8 etc]# docker cp test_for_copy.txt mynginx:/etc
[root@centos8 etc]# docker exec -it mynginx /bin/bash
root@bc12f7a947a7:/# cd /etc
root@bc12f7a947a7:/etc# ls
...
rc2.d selinux test_for_copy.txt
...
root@bc12f7a947a7:/etc# ls |grep test
test_for_copy.txt
root@bc12f7a947a7:/etc#
以将文件从容器内拷贝出来
docker cp 容器名称:容器目录 需要拷贝的文件或目录
root@bc12f7a947a7:/etc# touch abc.txt
root@bc12f7a947a7:/etc# exit
exit
[root@centos8 etc]# docker cp mynginx:/etc/abc.txt /root/etc
目录挂载(容器数据卷操作)
我们可以在创建容器的时候,将宿主机的目录与容器内的目录进行映射,这样我们就可以通过修改宿主机某个目录的文件从而去影响容器,而且这个操作是双向绑定的,也就是说容器内的操作也会影响到宿主机,实现备份功能。
但是容器被删除的时候,宿主机的内容并不会被删除。如果多个容器挂载同一个目录,其中一个容器被删除,其他容器的内容也不会受到影响。
容器与宿主机之间的数据卷属于引用的关系,数据卷是从外界挂载到容器内部中的,所以可以脱离容器的生命周期而独立存在,正是由于数据卷的生命周期并不等同于容器的生命周期,在容器退出或者删除以后,数据卷仍然不会受到影响,数据卷的生命周期会一直持续到没有容器使用它为止。
创建容器添加 -v 参数,格式为 宿主机目录:容器目录
容器目录的路径不一定要存在才能写,会自动生成
指定目录挂载
这种方式的挂载不会在/var/lib/docker/volume 目录生成内容。
# 多目录挂载
docker run -di -v /宿主机目录:/容器目录 -v /宿主机目录2:/容器目录2 镜像名
现在Linux上的/root/mydate/docker_nginx目录 与容器的/abc/123目录挂载成功,同步成功
[root@centos8 docker_nginx]# vim config.conf
[root@centos8 docker_nginx]# docker run -id --name nginx02 -p 81:80 -v /root/mydate/docker_nginx:/abc/123 nginx
54914fc4d0b03a74bf27d89acb0f0d461083ed3468c33766238d4b3610d1ec81
[root@centos8 docker_nginx]# vim config.conf
[root@centos8 docker_nginx]# ls
config.conf
[root@centos8 docker_nginx]#
[wxf@centos8 ~]$ docker exec -it nginx02 /bin/bash
root@54914fc4d0b0:/# cd abc/123
root@54914fc4d0b0:/abc/123# ls
config.conf
root@54914fc4d0b0:/abc/123#
匿名挂载
匿名挂载只需要写容器目录即可,容器外对应的目录会在/var/lib/docker/volumes 中生成。
匿名挂载对应的名字会随机生成
# 匿名挂载
docker run -id -v /usr/local/date --name nginx03 nginx
[root@centos8 docker_nginx]# docker run -id -v /usr/local/date --name nginx03 nginx
02541d6c539afb0edbdec1b017f6dccc01dd4af0952f93e5909fbc24b0d402da
[root@centos8 docker_nginx]# cd /var/lib/docker/volumes/
[root@centos8 volumes]# ls
068db5be074269223601decf6480553ff789ab3463fd688d38eed37d6e5a2949 backingFsBlockDev metadata.db
[root@centos8 volumes]# cd ./068db5be074269223601decf6480553ff789ab3463fd688d38eed37d6e5a2949/_data/
[root@centos8 _data]# ls
test.txt
[root@centos8 _data]#
[wxf@centos8 ~]$ docker exec -it nginx03 /bin/bash
root@02541d6c539a:/# cd /usr/local/date/
root@02541d6c539a:/usr/local/date# ls
root@02541d6c539a:/usr/local/date# touch test.txt
root@02541d6c539a:/usr/local/date#
具名挂载
具名挂载就是给数据卷起了个名字,容器外对应的目录会在/var/lib/docker/volume 中生成
docker run -id -v 具体的名字:容器挂载目录 --name nginx04 nginx
[root@centos8 _data]# docker run -id -v docker_nginx_data:/usr/local/date --name nginx04 nginx
63487115dffcec4bfa6f44a69e5b7aa179e6119e479ea1e91d1bd4c2fce4fa1b
[root@centos8 _data]# docker volume ls
DRIVER VOLUME NAME
local 068db5be074269223601decf6480553ff789ab3463fd688d38eed37d6e5a2949
local docker_nginx_data
[root@centos8 _data]#
设置目录卷只读/读写
# 只读。只能通过修改宿主机内容实现对容器的数据管理。
docker run -it -v /宿主机目录:/容器目录:ro 镜像名
# 读写,默认。宿主机和容器可以双向操作数据。
docker run -it -v /宿主机目录:/容器目录:rw 镜像名
ro
[root@centos8 _data]# docker run -id --name nginx05 -P -v /appoint:/usr/local:ro nginx
a8d5991ddb5034bf9cd90dd03481694f6618c1737aa74ec4c516fd664229e8d2
[root@centos8 _data]# cd /appoint/
[root@centos8 appoint]# ls
[root@centos8 appoint]# touch 111.txt
[root@centos8 appoint]# ls
111.txt
[root@centos8 appoint]#
[wxf@centos8 ~]$ docker exec -it nginx05 /bin/bash
root@a8d5991ddb50:/# cd /usr/local/
root@a8d5991ddb50:/usr/local# ls
111.txt
root@a8d5991ddb50:/usr/local# rm 111.txt
rm: cannot remove '111.txt': Read-only file system
root@a8d5991ddb50:/usr/local#
默认是rw,就不测试了
volumes-from(继承)
如果被继承的权限是ro,那么继承者即使输入“centos7-01:rw”,其权限还是ro
# 容器 centos7-01 指定目录挂载
docker run -di -v /mydata/docker_centos/data:/usr/local/data --name centos7-01
centos:7
# 容器 centos7-04 和 centos7-05 相当于继承 centos7-01 容器的挂载目录
docker run -di --volumes-from centos7-01:ro --name centos7-04 centos:7
docker run -di --volumes-from centos7-01:rw --name centos7-05 centos:7
[root@centos8 appoint]# docker run -id --name nginx06 --volumes-from nginx05:ro nginx
5f98be40854cbca528f3ecffc97686a46ceb851bd2eabbd7ca7ec7e2a4de66f1
[root@centos8 appoint]# docker run -id --name nginx07 --volumes-from nginx05:rw nginx
fdc04cc84e800b5ad7ce01619ec00df7948add3052c875fc525097d5b05aea78
[wxf@centos8 ~]$ docker exec -it nginx07 /bin/bash
root@fdc04cc84e80:/# cd /usr/local/
root@fdc04cc84e80:/usr/local# ls
111.txt
root@fdc04cc84e80:/usr/local# touch 222.txt
touch: cannot touch '222.txt': Read-only file system
root@fdc04cc84e80:/usr/local# exit
exit
[wxf@centos8 ~]$ docker exec -it nginx06 /bin/bash
root@5f98be40854c:/# cd /usr/local/
root@5f98be40854c:/usr/local# touch 222.txt
touch: cannot touch '222.txt': Read-only file system
root@5f98be40854c:/usr/local#
容器的创建,运行,停止,删除
[root@centos8 appoint]# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
fdc04cc84e80 nginx "/docker-entrypoint.…" 9 minutes ago Up 9 minutes 80/tcp nginx07
5f98be40854c nginx "/docker-entrypoint.…" 9 minutes ago Up 9 minutes 80/tcp nginx06
a8d5991ddb50 nginx "/docker-entrypoint.…" 15 minutes ago Up 15 minutes 0.0.0.0:49158->80/tcp, :::49158->80/tcp nginx05
63487115dffc nginx "/docker-entrypoint.…" 27 minutes ago Up 27 minutes 80/tcp nginx04
02541d6c539a nginx "/docker-entrypoint.…" 39 minutes ago Up 39 minutes 80/tcp nginx03
54914fc4d0b0 nginx "/docker-entrypoint.…" 53 minutes ago Up 53 minutes 0.0.0.0:81->80/tcp, :::81->80/tcp nginx02
bc12f7a947a7 nginx "/docker-entrypoint.…" About an hour ago Up About an hour 0.0.0.0:6872->80/tcp, :::6872->80/tcp mynginx
6f43653b758d hello-world "/hello" 2 days ago Exited (0) 2 days ago gifted_brattain
创建===》docker run …见《创建与启动容器》
运行
将停止的容器启动
[root@centos8 appoint]# docker start gifted_brattain
gifted_brattain
[root@centos8 appoint]#
停止
将运行的容器停止
可以多个连续停止,中间以空格分隔
[root@centos8 appoint]# docker stop mynginx
mynginx
[root@centos8 appoint]#
[root@centos8 appoint]# docker stop nginx02 nginx03 nginx04 nginx05 nginx06 nginx07
nginx02
nginx03
nginx04
nginx05
nginx06
nginx07
删除
将创建的容器删除,如果正在运行,需要先stop再删除
可以多个连续删除,中间以空格分隔
[root@centos8 appoint]# docker rm mynginx
mynginx
[root@centos8 appoint]#
[root@centos8 appoint]# docker rm nginx02 nginx03 nginx04 nginx05 nginx06 nginx07
nginx02
nginx03
nginx04
nginx05
nginx06
nginx07