Docker 架构&命令

Docker 架构

Docker 使用客户端-服务器 (C/S) 架构模式,使用远程 API 来管理和创建 Docker 容器。Docker 容器通过 Docker镜像来创建

  • Docker Client 客户端

  • Docker Daemon 守护进程(服务端)

  • Docker Registry 镜像仓库

  • 容器与镜像

Docker Client(客户端)

接收你输入的终端命令(如 docker rundocker builddocker pull),然后通过 REST API 把这些指令发送给幕后的守护进程

Docker Host(本地主机/Docker Daemon(守护进程)

  • 这是Docker的核心部分,负责docker的开启与关闭

  • 它是一个常驻在后台的进程,专门负责监听来自 Client 的请求,并管理、创建和运行你的 Containers(容器)、Images(镜像)以及 Volumes(数据卷)和 Networks(网络)

  • Images和Containers的关系就像类和对象的关系,通过一个静态的images ,可以创建出多个动态的实例对象container ,镜像images来源于镜像仓库

  • 容器是镜像运行的实体,容器可以被创建、启动、暂停、删除

Docker Registry(镜像仓库):

  • 用来集中存储和分发 Docker 镜像(Images)

  • 一般来讲,Docker 会去官方的 Docker Hub 寻找镜像;但是官方服务器在国外速度很慢,我们可以搭建自己的镜像仓库。

Docker服务命令

Docker服务命令作用于Docker Daemon守护进程, 也就是作用于docker整体。Docker 服务通过 systemd 来管理,因此使用systemctl命令是标准方法

启动docker服务

复制代码
systemctl start docker

查看docker服务状态

复制代码
systemctl status docker

停止docker服务

复制代码
systemctl stop docker 

重启docker服务

复制代码
systemctl restart docker

注意事项

systemctl是 Linux 系统的服务管理工具 :它用于管理 Linux 下的systemd服务,比如启动、停止、查看状态等。在Windows系统中没有systemctl这个命令,简单来说,就像你无法在 Android 手机上直接运行 iPhone 的 App 一样

事实上,在 Windows 上,你不需要也不应该使用systemctl。Docker 不是以 Linux 服务的形式运行的,而是以一个桌面应用程序 (Docker Desktop) 的形式运行的,

只要你桌面上双击打开了 Docker Desktop 软件,Docker 服务就已经在后台默默启动了

使用 Docker Desktop 图形界面也可以完成docker的启动、停止、重启操作

Docker镜像命令

Docker 的镜像命令主要用于管理镜像文件本身(比如查看、下载、删除、构建)

在docker中,软件和软件的运行环境被打包成一个镜像文件,再通过镜像文件创建出对应的容器

查看镜像

复制代码
docker images

搜索镜像

复制代码
docker search redis

这里举例搜索redis镜像

拉取镜像

复制代码
docker pull redis

如果不在redis后面写版本号就默认是latest版本

删除镜像

rmi=remove images

复制代码
docker rmi redis

删除所有镜像

复制代码
docker rmi `docker images -q`

Docker容器命令

Docker 的容器(container )命令用于管理运行中的容器(比如启动、停止、进入、查看日志等),这是日常使用最频繁也是最重要的命令。

容器是镜像运行出来的实例,那么容器命令主要是如何创建容器和操作容器

创建并启动一个新容器

复制代码
docker run [参数] <镜像名>
#举例:
docker run -it  --name my-redis redis /bin/bash是什么意思
  • docker run:容器启动命令

  • -it:-i表示实时交互(你在终端写的命令会传递给容器进程),-t表示创建终端;也就是开启一个实时交互的终端窗口,如果不加这两个参数,容器启动完输出两行日志就直接退出了

  • --name:给容器起名字

  • redis:创建容器所需要的镜像

  • /bin/bash:覆盖镜像默认的启动命令,改为运行容器内部的 **Bash Shell,**相当于打开容器的powershell

其他常用参数:

  • -d:后台运行;创建完容器后不会立即进入容器而是让容器在后台独立默默地运行,输入exit也不会退出容器

  • -p:端口映射 宿主机端口:容器端口

输入exit可以退出容器

查看容器

查看现在正在运行的容器

复制代码
docker ps

显示所有容器(包括已停止的)

复制代码
docker ps -a

进入正在运行的容器(-d创建的容器)

name就是容器名称

复制代码
docker exec -it name /bin/bash

停止容器

对于-d创建的容器,输入exit并不能让它停止运行,我们需要用stop语句

复制代码
docker stop name

注意:关闭容器可能需要一段时间,可以通过docker ps -a查看容器是否关闭

重启容器

复制代码
docker restart container_id
# 等待 5 秒后重启
docker restart -t 5  container_id   

删除容器

复制代码
docker rm container_id                # 删除已停止的容器
docker rm -f container_id             # 强制删除(即使正在运行)

删除镜像的语句是docker rmi;删除容器的语句是docker rm

查看容器详情

**获取一个 Docker 对象(容器、镜像、网络、数据卷等)最完整、最底层的元数据,**这些数据以一个巨大的JSON格式文本呈现

复制代码
docker inspect

查看容器日志

复制代码
docker logs container_id
相关推荐
乘云数字DATABUFF2 天前
5分钟部署开源APM Databuff:OpenTelemetry全链路追踪入门实战
运维·后端
Patrick_Wilson3 天前
从「改个端口」到 502:Next.js on k8s 的容器端口、Service 映射与 env 覆盖
docker·kubernetes·next.js
Suroy3 天前
DockerView-Go:用 Go 写一个终端 Docker 监控工具,顺便做了个 Web 仪表盘
docker
云恒要逆袭3 天前
运行你的第一个Docker容器
后端·docker·容器
荣--4 天前
一键部署不是为了省时间 —— 它是把"买来的 PaaS"变成"自己的平台"的拐点
运维·zabbix·工程化·一键部署·平台化·边界设计
江华森4 天前
动手实战学 Docker — 从零到集群编排完全指南
运维
宋均浩4 天前
# Docker 镜像瘦身实战:从 1.2G 到 80MB 的五个优化步骤
ci/cd·docker
Avan_菜菜5 天前
FRP 内网穿透完整实战:从 HTTP 映射到 HTTPS 自签代理
运维·nginx·https
程序员老赵5 天前
10 分钟部署 OpenCode:Docker 一键安装,浏览器打开就能用 AI 写代码(附完整命令与排错)
docker·容器·ai编程
WangMingHua1115 天前
LM Studio Docker 部署——本地大模型一键启动
docker