Docker 是一种常用的容器化技术,它可以让我们把应用程序和运行环境一起打包,快速部署到不同机器上。学习 Docker 时,最重要的是先理解两个核心概念:镜像 和 容器。
简单来说,镜像是模板,容器是镜像运行后的实例。我们先从 Docker Hub 拉取镜像,再通过镜像启动容器,然后可以查看、进入、停止、删除容器。
一、镜像和容器是什么?
1. 镜像 Image
镜像可以理解为一个"安装包"或"系统模板"。
例如:
nginx
mysql:8.0
ubuntu
redis
这些都是常见镜像。
镜像本身不会运行,它只是用来创建容器。
2. 容器 Container
容器是镜像运行起来之后的实例。
比如我们用 nginx 镜像启动了一个服务,那么这个正在运行的 Nginx 环境就是一个容器。
一个镜像可以启动多个容器,就像一个安装包可以安装出多个独立应用一样。
二、拉取镜像:docker pull
命令格式:
docker pull <镜像名>
作用:从 Docker Hub 拉取镜像到本地。
示例:
docker pull nginx
这条命令会下载最新版的 Nginx 镜像。
如果想指定版本,可以加上标签:
docker pull mysql:8.0
这里的 8.0 表示 MySQL 的版本。
三、启动容器:docker run
命令格式:
docker run <镜像名>
作用:基于镜像启动一个容器。
简单示例:
docker run nginx
更常见的写法是后台运行:
docker run -d -p 8080:80 --name my-nginx nginx
这条命令的含义是:
-d 后台运行
-p 8080:80 把本机 8080 端口映射到容器 80 端口
--name my-nginx 给容器起名为 my-nginx
nginx 使用 nginx 镜像
启动成功后,可以在浏览器访问:
http://localhost:8080
如果看到 Nginx 欢迎页面,说明容器已经运行成功。
四、查看运行中的容器:docker ps
命令格式:
docker ps
作用:查看当前正在运行的容器。
如果想查看所有容器,包括已经停止的容器,可以使用:
docker ps -a
常见输出信息包括:
CONTAINER ID 容器 ID
IMAGE 使用的镜像
STATUS 当前状态
PORTS 端口映射
NAMES 容器名称
例如:
docker ps
可以看到 my-nginx 是否正在运行。
五、停止容器:docker stop
命令格式:
docker stop <容器ID或容器名>
作用:停止正在运行的容器。
示例:
docker stop my-nginx
也可以使用容器 ID:
docker stop 1a2b3c4d5e6f
停止容器后,容器不会被删除,只是变成停止状态。之后仍然可以重新启动:
docker start my-nginx
六、删除容器:docker rm
命令格式:
docker rm <容器ID或容器名>
作用:删除容器。
示例:
docker rm my-nginx
通常需要先停止容器,再删除容器:
docker stop my-nginx
docker rm my-nginx
如果要强制删除正在运行的容器,可以使用:
docker rm -f my-nginx
不过日常使用中,更推荐先停止再删除。
七、删除镜像:docker rmi
命令格式:
docker rmi <镜像ID或镜像名>
作用:删除本地镜像。
示例:
docker rmi nginx
如果镜像正在被某个容器使用,需要先删除相关容器,再删除镜像。
查看本地已有镜像:
docker images
删除指定版本镜像:
docker rmi mysql:8.0
需要注意:
docker rm 删除容器
docker rmi 删除镜像
这两个命令很容易混淆。
八、进入容器:docker exec
命令格式:
docker exec -it <容器ID或容器名> /bin/bash
作用:进入正在运行的容器,并打开 Bash 终端。
示例:
docker exec -it my-nginx /bin/bash
进入容器后,可以像操作 Linux 系统一样执行命令:
ls
cd /usr/share/nginx/html
cat index.html
退出容器:
exit
有些轻量级镜像没有 /bin/bash,可以使用 /bin/sh:
docker exec -it my-nginx /bin/sh
九、完整示例:运行一个 Nginx 容器
下面是一个完整的 Docker 使用流程。
1. 拉取镜像
docker pull nginx
2. 启动容器
docker run -d -p 8080:80 --name my-nginx nginx
3. 查看容器
docker ps
4. 进入容器
docker exec -it my-nginx /bin/bash
5. 停止容器
docker stop my-nginx
6. 删除容器
docker rm my-nginx
7. 删除镜像
docker rmi nginx
整个流程可以概括为:
拉取镜像 -> 启动容器 -> 查看容器 -> 进入容器 -> 停止容器 -> 删除容器 -> 删除镜像
十、扩展示例:运行 MySQL 容器
除了 Nginx,MySQL 也是 Docker 中非常常见的使用场景。
启动 MySQL 8.0:
docker run -d \
--name my-mysql \
-p 3306:3306 \
-e MYSQL_ROOT_PASSWORD=123456 \
mysql:8.0
参数解释:
-d 后台运行
--name my-mysql 容器名称
-p 3306:3306 映射 MySQL 端口
-e MYSQL_ROOT_PASSWORD=123456 设置 root 密码
mysql:8.0 使用 MySQL 8.0 镜像
进入 MySQL 容器:
docker exec -it my-mysql /bin/bash
登录 MySQL:
mysql -uroot -p
然后输入密码:
123456
查看日志:
docker logs my-mysql
停止并删除:
docker stop my-mysql
docker rm my-mysql
十一、常用命令速查表
| 命令 | 作用 |
|---|---|
docker pull <镜像名> |
拉取镜像 |
docker run <镜像名> |
启动容器 |
docker ps |
查看正在运行的容器 |
docker ps -a |
查看所有容器 |
docker stop <容器> |
停止容器 |
docker start <容器> |
启动已停止的容器 |
docker restart <容器> |
重启容器 |
docker rm <容器> |
删除容器 |
docker rmi <镜像> |
删除镜像 |
docker images |
查看本地镜像 |
docker logs <容器> |
查看容器日志 |
docker exec -it <容器> /bin/bash |
进入容器 |
十二、总结
Docker 的基础操作主要围绕 镜像 和 容器 展开。
可以这样记:
镜像:应用的模板
容器:镜像运行后的实例
常用流程是:
docker pull 拉取镜像
docker run 启动容器
docker ps 查看容器
docker exec 进入容器
docker stop 停止容器
docker rm 删除容器
docker rmi 删除镜像
掌握这些命令后,就可以完成大部分 Docker 入门操作。后续可以继续学习数据卷、网络、Dockerfile 和 Docker Compose,这些内容能帮助我们更方便地管理复杂项目和多容器应用。