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


目录
相关文章
|
1天前
|
存储 虚拟化 数据中心
|
1天前
|
运维 Prometheus 监控
构建高效稳定的Docker容器监控体系
【4月更文挑战第29天】在微服务架构日益普及的当下,Docker作为轻量级容器的代表,被广泛应用于服务部署与管理。然而,随之而来的是复杂化的服务监控问题。本文旨在探讨如何构建一个高效且稳定的Docker容器监控体系,确保服务的高可用性。我们将从监控工具的选择、关键监控指标的确定,以及告警机制的设计等方面进行详细阐述,并提供一系列优化实践,以期为运维人员提供参考和指导。
|
1天前
|
存储 运维 Linux
Docker详解(六)——Docker高级控制命令
Docker详解(六)——Docker高级控制命令
12 2
|
2天前
|
Java Maven Docker
基于docker容器化部署微服务
基于docker容器化部署微服务
5 0
|
2天前
|
网络协议 Java Docker
使用docker编排容器(下)
使用docker编排容器(下)
8 0
|
2天前
|
Java 应用服务中间件 nginx
使用docker编排容器(上)
使用docker编排容器
7 0
|
2天前
|
Prometheus 监控 Cloud Native
构建高效的Docker容器监控体系
【4月更文挑战第28天】 在微服务架构和容器化部署日益普及的今天,对容器进行有效的性能监控成为确保系统稳定性的关键。本文将深入探讨如何构建一个高效的Docker容器监控体系,覆盖从监控指标的选择、数据采集、存储到可视化展示的全流程。我们将分析现有监控工具的优势与局限,并提出一种综合使用Prometheus、Grafana和自定义监控脚本的解决方案,旨在为运维人员提供实时、准确的容器监控数据,帮助快速定位并解决潜在问题。
14 1
|
2天前
|
Linux 网络安全 Docker
【Linux】-docker配置容器并打包成镜像
【Linux】-docker配置容器并打包成镜像
|
3天前
|
存储 监控 安全
【专栏】Docker Compose:轻松实现容器编排的利器
【4月更文挑战第27天】Docker Compose是款轻量级容器编排工具,通过YAML文件统一管理多容器应用。本文分三部分深入讨论其核心概念(服务、网络、卷和配置)、使用方法及最佳实践。从快速入门到高级特性,包括环境隔离、CI/CD集成、资源管理和安全措施。通过案例分析展示如何构建多服务应用,助力高效容器编排与管理。
|
10天前
|
Kubernetes 调度 Docker
深入探讨容器编排技术:从Docker到Kubernetes
容器编排在现代IT中日益关键,从Docker到Kubernetes,助力应用的自动化部署和扩展。Docker提供容器技术,打包应用及环境为镜像,通过引擎、镜像、容器、网络和存储组件实现隔离运行。Kubernetes作为高级容器编排平台,管理Pod(多容器集合),其核心包括API服务器、控制器管理器、调度器和Kubelet。Kubernetes集群由Master和Worker节点构成,实现Pod的高效调度和运行。
36 6