安装 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
- 验证安装
css
docker --version
docker-compose --version
5.云镜像加速
- 登录 阿里云容器镜像服务控制台
- 进入"镜像工具" → "镜像加速器"
- 复制专属加速器地址(形如 xxxxxx.mirror.aliyuncs.com )
方法一:通过 Docker Desktop 界面配置
- 打开 Docker Desktop
- 点击顶部菜单栏 Docker 图标 → Preferences → Docker Engine
- 在配置文件中添加 registry-mirrors 项:
- 点击 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:容器内路径 目的主机的路径