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


目录
相关文章
|
12天前
|
数据库 Docker 容器
docker容器为啥会开机自启动
通过配置适当的重启策略,Docker容器可以在主机系统重启后自动启动。这对于保持关键服务的高可用性和自动恢复能力非常有用。选择适合的重启策略(如 `always`或 `unless-stopped`),可以确保应用程序在各种情况下保持运行。理解并配置这些策略是确保Docker容器化应用可靠性的关键。
158 93
|
15天前
|
Ubuntu NoSQL Linux
《docker基础篇:3.Docker常用命令》包括帮助启动类命令、镜像命令、有镜像才能创建容器,这是根本前提(下载一个CentOS或者ubuntu镜像演示)、容器命令、小总结
《docker基础篇:3.Docker常用命令》包括帮助启动类命令、镜像命令、有镜像才能创建容器,这是根本前提(下载一个CentOS或者ubuntu镜像演示)、容器命令、小总结
93 6
《docker基础篇:3.Docker常用命令》包括帮助启动类命令、镜像命令、有镜像才能创建容器,这是根本前提(下载一个CentOS或者ubuntu镜像演示)、容器命令、小总结
|
26天前
|
搜索推荐 安全 数据安全/隐私保护
7 个最能提高生产力的 Docker 容器
7 个最能提高生产力的 Docker 容器
115 35
|
13天前
|
数据库 Docker 容器
docker容器为啥会开机自启动
通过配置适当的重启策略,Docker容器可以在主机系统重启后自动启动。这对于保持关键服务的高可用性和自动恢复能力非常有用。选择适合的重启策略(如 `always`或 `unless-stopped`),可以确保应用程序在各种情况下保持运行。理解并配置这些策略是确保Docker容器化应用可靠性的关键。
41 17
|
25天前
|
Ubuntu Linux 开发工具
docker 是什么?docker初认识之如何部署docker-优雅草后续将会把产品发布部署至docker容器中-因此会出相关系列文章-优雅草央千澈
Docker 是一个开源的容器化平台,允许开发者将应用程序及其依赖项打包成标准化单元(容器),确保在任何支持 Docker 的操作系统上一致运行。容器共享主机内核,提供轻量级、高效的执行环境。本文介绍如何在 Ubuntu 上安装 Docker,并通过简单步骤验证安装成功。后续文章将探讨使用 Docker 部署开源项目。优雅草央千澈 源、安装 Docker 包、验证安装 - 适用场景:开发、测试、生产环境 通过以上步骤,您可以在 Ubuntu 系统上成功安装并运行 Docker,为后续的应用部署打下基础。
docker 是什么?docker初认识之如何部署docker-优雅草后续将会把产品发布部署至docker容器中-因此会出相关系列文章-优雅草央千澈
|
13天前
|
运维 Java 虚拟化
《docker基础篇:1.Docker简介》,包括Docker是什么、容器与虚拟机比较、能干嘛、去哪下
《docker基础篇:1.Docker简介》,包括Docker是什么、容器与虚拟机比较、能干嘛、去哪下
82 12
|
15天前
|
Kubernetes Linux 虚拟化
入门级容器技术解析:Docker和K8s的区别与关系
本文介绍了容器技术的发展历程及其重要组成部分Docker和Kubernetes。从传统物理机到虚拟机,再到容器化,每一步都旨在更高效地利用服务器资源并简化应用部署。容器技术通过隔离环境、减少依赖冲突和提高可移植性,解决了传统部署方式中的诸多问题。Docker作为容器化平台,专注于创建和管理容器;而Kubernetes则是一个强大的容器编排系统,用于自动化部署、扩展和管理容器化应用。两者相辅相成,共同推动了现代云原生应用的快速发展。
82 11
|
1月前
|
Unix Linux Docker
CentOS停更沉寂,RHEL巨变限制源代:Docker容器化技术的兴起助力操作系统新格局
操作系统是计算机系统的核心软件,管理和控制硬件与软件资源,为用户和应用程序提供高效、安全的运行环境。Linux作为开源、跨平台的操作系统,具有高度可定制性、稳定性和安全性,广泛应用于服务器、云计算、物联网等领域。其发展得益于庞大的社区支持,多种发行版如Ubuntu、Debian、Fedora等满足不同需求。
63 4
|
1月前
|
监控 NoSQL 时序数据库
《docker高级篇(大厂进阶):7.Docker容器监控之CAdvisor+InfluxDB+Granfana》包括:原生命令、是什么、compose容器编排,一套带走
《docker高级篇(大厂进阶):7.Docker容器监控之CAdvisor+InfluxDB+Granfana》包括:原生命令、是什么、compose容器编排,一套带走
270 77
|
1月前
|
监控 Docker 容器
在Docker容器中运行打包好的应用程序
在Docker容器中运行打包好的应用程序

热门文章

最新文章