docker 常用命令

安装 Docker

1.下载 Docker Desktop :

  • 访问Docker 官网
  • 下载适用于 macOS 的 Docker Desktop 安装包

2.安装 Docker

bash 复制代码
# 1. 打开下载的 .dmg 文件
# 2. 将 Docker 图标拖到 Applications 文件夹

3.启动 Docker

perl 复制代码
# 从 Applications 文件夹双击 Docker 图标启动
# 或通过命令行启动
open /Applications/Docker.app
  1. 验证安装
css 复制代码
docker --version
docker-compose --version

5.云镜像加速

  • 登录 阿里云容器镜像服务控制台
  • 进入"镜像工具" → "镜像加速器"
  • 复制专属加速器地址(形如 xxxxxx.mirror.aliyuncs.com

方法一:通过 Docker Desktop 界面配置

  1. 打开 Docker Desktop
  2. 点击顶部菜单栏 Docker 图标 → Preferences → Docker Engine
  3. 在配置文件中添加 registry-mirrors 项:
  4. 点击 Apply & Restart 按钮

方法二:通过配置文件修改

bash 复制代码
# 编辑 Docker 配置文件
nano ~/.docker/daemon.json

添加以下内容(如果文件已存在,只需添加 registry-mirrors 项):

json 复制代码
{
  "registry-mirrors": ["https://xxxxxx.mirror.aliyuncs.com"]
}

docker常见命令

帮助命令

bash 复制代码
docker version # 显示docker的版本信息
docker info # 显示docker的系统信息,包括镜像和容器的数量
docker 命令 --help # 帮助命令

镜像命令

docker images: 查看所有本地的主机上的镜像

css 复制代码
REPOSITORY    TAG       IMAGE ID       CREATED        SIZE
nginx         latest    124b44bfc9cc   7 weeks ago    279MB
hello-world   latest    7e1a4e2d11e2   2 months ago   20.4kB
centos        8         a27fd8080b51   3 years ago    340MB

# 解释
REPOSITORY 镜像的仓库源
TAG 镜像的标签
IMAGE ID 镜像的id
CREATED 镜像的创建时间
SIZE 镜像的大小

# 命令参数可选项
-a, --all # 显示所有镜像 (docker images -a)
-q, --quiet # 仅显示镜像id (docker images -q)

docker search: 搜索镜像

python 复制代码
docker search mysql

# info
NAME                   DESCRIPTION                                      STARS     OFFICIAL
mysql                  MySQL is a widely used, open-source relation...   15709     [OK]
bitnami/mysql          Bitnami container image for MySQL                133
circleci/mysql         MySQL is a widely used, open-source relation...   31

# 解释
NAME 匹配结果
DESCRIPTION 相关介绍
STARS star数量
OFFICIAL 官方认证

# 命令参数可选项
--filter=STARS=3000 # 搜索出来的镜像就是stars大于3000的

docker pull: 下载镜像

yaml 复制代码
Using default tag: latest # 如果不写tag,默认就是latest,最新的版本
latest: Pulling from library/mysql
72a69066d2fe: Pull complete # 分层下载,docker image的核心,联合文件下载
93619dbc5b36: Pull complete
99da31dd6142: Pull complete
626033c43d70: Pull complete
37d5d7efb64e: Pull complete
ac563158d721: Pull complete
d2ba16033dad: Pull complete
688ba7d5c01a: Pull complete
00e060b6d11d: Pull complete
1c04857f594f: Pull complete
4d7cfa90e6ea: Pull complete
e0431212d27d: Pull complete
Digest: sha256:e9027fe4d91c0153429607251656806cc784e914937271037f7738bd5b8e7709 #签名
Status: Downloaded newer image for mysql:latest
docker.io/library/mysql:latest # 真实地址

# 两个命令是等价的
docker pull mysql
docker pull docker.io/library/mysql:latest

# 指定版本下载
docker pull mysql:5.7

5.7: Pulling from library/mysql
72a69066d2fe: Already exists # 联合文件下载,已经存在的资源可以共用
93619dbc5b36: Already exists
99da31dd6142: Already exists
626033c43d70: Already exists
37d5d7efb64e: Already exists
ac563158d721: Already exists
d2ba16033dad: Already exists
0ceb82207cd7: Pull complete
37f2405cae96: Pull complete
e2482e017e53: Pull complete
70deed891d42: Pull complete
Digest: sha256:f2ad209efe9c67104167fc609cca6973c8422939491c9345270175a300419f94
Status: Downloaded newer image for mysql:5.7
docker.io/library/mysql:5.7

docker rmi: 删除镜像

bash 复制代码
docker rmi -f 镜像id # 删除指定的镜像
docker rmi -f 镜像id 镜像id 镜像id # 删除多个镜像(空格分隔)
docker rmi -f $(docker images -aq) # 删除全部的镜像

容器命令

有了镜像才可以创建容器,下载一个centos 镜像来测试学习。

复制代码
docker pull centos

新建容器并启动

diff 复制代码
docker run [可选参数] image
# 参数说明
--name="name" 容器名字:用来区分容器
-d 后台方式运行:相当于nohup  
-it 使用交互式运行:进入容器查看内容
-p 指定容器的端口(四种方式)小写字母p
-p ip:主机端口:容器端口
-p 主机端口:容器端口
-p 容器端口
容器端口
-P 随机指定端口(大写字母P)
exit 从容器中退回到主机

-d(detached 模式,后台运行)
作用:将容器放在后台运行(类似 Linux 的 `&` 符号),终端不绑定容器的输入输出。
使用场景:运行不需要交互的后台服务(如 Nginx、MySQL 等)。

-it(交互式终端,前台运行)
作用
 -i(--interactive):保持标准输入(STDIN)打开,允许向容器发送命令。
 -t(--tty):分配一个伪终端(pseudo-TTY),提供类似本地 Shell 的交互体验。
使用场景:需要与容器交互时(如调试、运行 Shell)

为什么要指定端口?
容器运行在独立的网络命名空间中,**外部无法直接访问容器内的服务**(如 Web 服务器的 80 端口)。需要通过端口映射(port mapping)将宿主机的端口与容器的端口绑定。

列出所有运行的容器

ini 复制代码
docker ps # 列出当前正在运行的容器
# 命令参数可选项
-a # 列出当前正在运行的容器+历史运行过的容器
-n=? # 显示最近创建的容器(可以指定显示几条,比如-n=1)
-q # 只显示容器的编号

退出容器

bash 复制代码
exit # 容器直接停止,并退出
ctrl+P+Q # 容器不停止,退出

删除容器

bash 复制代码
docker rm 容器id # 删除容器(不能删除正在运行的容器)如果要强制删除:docker rm -f 容器id
docker rm -f $(docker ps -aq) # 删除全部容器
docker ps -a -q|xargs docker rm # 删除所有容器

启动和停止容器的操作

bash 复制代码
docker start 容器id # 启动容器`
docker restart 容器id # 重启容器`
docker stop 容器id # 停止当前正在运行的容器`
docker kill 容器id # 强制停止当前容器`

常用其他命令

后台启动容器

arduino 复制代码
命令docker run -d 镜像名
docker run -d centos

问题:docker ps发现centos停止了
常见的坑:docker容器使用后台运行,就必须要有要一个前台进程,docker发现没有应用,就会自动停止。
比如:nginx,容器启动后,发现自己没有提供服务,就会立刻停止,就是没有程序了

查看日志

bash 复制代码
docker logs -tf --tail 容器id

# 自己编写一段shell脚本
docker run -d centos /bin/sh -c "while true;do echo kuangshen;sleep 1;done"
docker logs -tf 容器id
docker logs -tf --tail 10 容器id
# 显示日志
-tf # 显示日志
--tail number # 要显示的日志条数

查看容器中进程的信息

css 复制代码
# 命令 docker top 容器id
docker top 88d23bcbe1f2

UID PID PPID C STIME TTY TIME CMD
root 21212 21193 0 16:23 ? 00:00:00
root 21600 21212 0 16:29 ? 00:00:00

查看镜像的元数据

bash 复制代码
命令docker inspect 容器id`

进入当前正在运行的容器

bash 复制代码
# 我们通常容器都是使用后台方式运行的,需要进入容器,修改一些配置`
# docker exec -it 容器id /bin/bash`

# 方式二
docker attach 容器id

`# docker exec # 进入容器后开启一个新的终端,可以再里面操作(常用)`
`# docker attach # 进入容器正在执行的终端,不会启动新的进程。`

从容器内拷贝文件到主机上

bash 复制代码
docker cp 容器id:容器内路径 目的主机的路径
相关推荐
知识分享小能手8 分钟前
CSS3学习教程,从入门到精通, 学院网站完整项目 - HTML5 + CSS3 实现(25)
前端·javascript·css·学习·css3·html5·前端项目
Moment28 分钟前
终于搞懂了!Source Map 是如何让你定位打包后代码的?💥 💥 💥
前端·javascript·webpack
yang_love10111 小时前
Webpack vs Vite:深度对比与实战示例,如何选择最佳构建工具?
前端·webpack·node.js
好_快1 小时前
Lodash源码阅读-keysIn
前端·javascript·源码阅读
好_快1 小时前
Lodash源码阅读-nativeKeysIn
前端·javascript·源码阅读
好_快1 小时前
Lodash源码阅读-baseKeysIn
前端·javascript·源码阅读
Good luck—dys1 小时前
VUE如何后端控制及动态路由详细讲解
前端·javascript·vue.js
好_快1 小时前
Lodash源码阅读-baseGetAllKeys
前端·javascript·源码阅读
裁二尺秋风2 小时前
Nginx — Nginx处理Web请求机制解析
前端·nginx