查看容器
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