Docker之镜像与容器的相关操作

目录

一、Docker镜像

搜索镜像

下载镜像

查看宿主机上的镜像

删除镜像

二、Docker容器

创建容器

查看容器

启停容器

删除容器

进入容器

创建/启动/进入容器

退出容器

查看容器内部信息


一、Docker镜像

Docker 运行容器前需要本地存在对应的镜像, 如果镜像不存在, Docker 会尝试先从默认镜像仓库下载(默认使用 Docker Hub公共注册服务器中的仓库), 用户也可以通过配置,使用自定义的镜像仓库。

搜索镜像

复制代码
docker search 镜像名称

例如:

复制代码
docker search centos

下载镜像

复制代码
docker pull 镜像

例如, 获取一个 centos 系统的基础镜像可以使用如下的命令:

复制代码
# 未指定版本一般会使用latest(最新的)版本
docker pull centos
# 或者直接指定版本
docker pull centos:版本号

查看宿主机上的镜像

复制代码
docker images

/var/lib/docker 为 docker 默认安装目录

复制代码
# 切换目录
cd /var/lib/docker/containers 
# 查看目录下的文件
ls

删除镜像

复制代码
docker rmi 镜像ID/标签

例如:

复制代码
# 根据镜像ID删除
docker rmi feb5d9fea6a5
# 根据镜像标签(版本)
docker rmi hello-world:latest 或 docker rmi hello-world:版本号

如果提示镜像被使用,需要先停止某个ID的容器,然后先删除容器再删除镜像。或者强制删除镜像。

强制删除镜像:

复制代码
docker rmi -f centos:版本号 

-f, -force: 强制删除镜像, 即使有容器依赖它。

总之, 通常并不推荐使用-f参数来强制删除一个存在容器依赖的镜像。 正确的做法是,先删除依赖该镜像的所有容器, 再来删除镜像。

二、Docker容器

容器是Docker的另一个核心概念。简单来说,容器是镜像的一个运行实例。所不同的是,镜像是静态的只读文件,而容器带有运行时需要的可写文件层;同时,容器中的应用进程处于运行状态。

通俗理解:类 -> 实例,镜像 -> 容器

创建容器

复制代码
# 方式一:创建容器不指定容器名,由Docker容器随机生成
docker create -it centos:latest
# 方式二:创建容器并指定容器名
docker create -it --name tomcat01 centos:latest

命令说明:

命令 说明
create 创建docker容器关键字
-it 是两个参数,-i:interactive容器具有交互功能,-t:容器将提供伪终端
--name 指定生成的容器的名字,允许空,如果不指定会自动生成
centos:latest 即镜像名字:版本(或镜像ID),将使用指定镜像创建容器。另外,Docker会检查本地是否存在指定的镜像,不存在就从公有仓库下载。

查看容器

查看当前运行的容器:

复制代码
docker ps

查看所有容器:

复制代码
docker ps -a

启停容器

复制代码
# 启动容器
docker start 容器ID或name
# 停止容器
docker stop 容器ID或name
# 重启容器
docker restart 容器ID或name 

删除容器

复制代码
docker rm 容器ID

主要支持的选项包括:

选项 说明
-f, --force=false 是否强行终止并删除一个运行中的容器
-l, --link=false 删除容器的连接 ,但保留容器
-v, --volumes=false 删除容器挂载的数据卷

删除所有未运行的容器(已经运行的删除不了,未运行的就一起被删除了)

复制代码
docker rm $(docker ps -aq)

停止所有容器并删除容器:

复制代码
docker stop $(docker ps -aq) && docker rm $(docker ps -aq)

还可以根据容器的状态删除,删除Exited状态的容器:

复制代码
docker rm $(docker ps -qf status=exited)

Docker 1.13版本以后,可以使用 docker containers prune 命令,删除孤立的容器:

复制代码
docker container prune

进入容器

复制代码
docker exec -it 容器ID/容器NAME /bin/bash
# 简写方式:
docker exec -it 容器ID/容器NAME bash

注意:只有在容器启动的时候即UP状态才能进入容器终端

创建/启动/进入容器

run 命令等于 create + start。

  • 创建+启动+进入容器:

    复制代码
    docker run -it centos:latest /bin/bash
  • 创建容器,通过 -p 标记指定端口映射规则,可以指定多个:(注意:此处p是小写)

    复制代码
    docker run -it -p 7001:8001 centos:latest /bin/bash
  • 使用 -P 标记时, Docker 会随机映射一个 49000~49900 的端口:(注意:此处P是大写)

    复制代码
    docker run -it -P --name tomcat03 centos:latest /bin/bash

更多的时候,需要让 Docker 容器在后台以守护态( Daemonized )形式运行 此时,可以通过添加 -d 参数来实现:

复制代码
# 创建容器指定后台运行模式(后台守护态)
docker run -it -d --name webapp centos:latest 
# 进入容器
docker exec -it webapp /bin/bash

部分参数说明:

参数 说明
-p 端口映射,格式为:主机(宿主)端口:容器端口
-P 注意是大写P,使用 -P 标记时,Docker 会随机映射一个 49000~49900 的端口
-d 后台运行模式

退出容器

退出时如果想继续运行容器:按顺序按【ctrl+p】,【ctrl+q】

如果不想继续运行:按【ctrl+d】或输入exit

查看容器内部信息

  • 进入容器内部获取信息

首先,请先进入容器:

复制代码
docker exec -it 容器ID/容器NAME /bin/bash

如果此时已进入容器内部,可分别执行hostname、ip addr、env这三个命令可以获取相关信息:

复制代码
# 查看主机名
hostname
# 查看IP地址
ip addr
# 查看环境变量
env
  • 在宿主机,执行docker exec命令

    获取容器的hostname

    docker exec 容器ID/容器NAME hostname

    获取容器ip地址

    docker exec 容器ID/容器NAME ip addr

    获取容器环境变量

    docker exec 容器ID/容器NAME env

  • 在宿主机,使用 docker inspect 命令

推荐使用 docker inspect 来获取信息,这个命令会返回一个 json 字符串,里面以 key-value 的格式准备了该容器相关的信息,内容十分丰富,可以一次性取得全部内容,也可以返回指定 key 对应的信息。

复制代码
docker inspect 容器ID/容器NAME
相关推荐
容器魔方17 小时前
华为云亮相 KubeCon China 2025,开源生态引领 AI 时代技术跃迁
云原生·容器·云计算
K·Herbert21 小时前
最新CentOS 7 yum源失效的解决方案(2025年6月)
linux·运维·centos
老兵发新帖21 小时前
Kubernetes架构解析
容器·架构·kubernetes
别骂我h1 天前
部署KVM虚拟化平台
linux·运维·服务器
showmethetime1 天前
优化nginx参数(基本通用参数)
运维·nginx
老六ip加速器1 天前
获取ip地址安全吗?如何获取静态ip地址隔离ip
运维·网络·智能路由器
净心净意1 天前
浅谈DaemonSet
运维·jenkins
Apex Predator2 天前
jenkins流水线打包vue无权限
运维·jenkins
容器魔方2 天前
Volcano v1.12 正式发布!驱动云原生AI与批量计算向智能高效新阶段演进
云原生·容器·云计算
Johny_Zhao2 天前
CentOS Stream 8 高可用 Kuboard 部署方案
linux·网络·python·网络安全·docker·信息安全·kubernetes·云计算·shell·yum源·系统运维·kuboard