Docker 用法详解
文章目录
- 一、Docker 快速入门
-
- 1.1 部署 MYSQL
- 1.2 命令解读:
- 二、Docker 基础
-
- 2.1 常见命令:
-
- 2.1.1 命令介绍:
- 2.1.2 演示:
- 2.1.3 命令别名:
- 2.2 数据卷:
-
- 2.2.1 数据卷简介:
- 2.2.2 数据卷命令:
- 2.2.3 挂载本地目录或文件:
- 2.3 镜像:
-
- 2.3.1 镜像结构:
- 2.3.2 Dockerfile:
- 2.3.3 构建镜像:
- 2.4 网络:
- 2.5 DockerCompose:
-
- 2.5.1 基础语法:
- 2.5.2 基础命令:
Docker 可以使项目的部署变得简单,大大减少了运维工作量。
即便你对 Linux 不熟悉,你也能轻松部署各种常见软件、Java项目。
linux 上安装 docker 这里就不进行讲解,我使用的 linux 是 ubuntu。如果一样的友友,可以参考下面这个视频,进行安装,或者自己网上找资料,只要能装上就行。
Ubuntu安装docker并运行测试【docker默认最新,虚拟机版本22.04】_哔哩哔哩_bilibili
一、Docker 快速入门
1.1 部署 MYSQL
首先,我们利用 Docker 来安装一个 MySQL 软件,大家可以对比一下之前传统的安装方式,看看哪个效率更高一些。
如果是利用传统方式部署 MySQL,大概的步骤有:
- 搜索并下载MySQL安装包
- 上传至Linux环境
- 编译和配置环境
- 安装
而使用 Docker 安装,仅仅需要一步即可,在命令行输入下面的命令(建议采用 CV 大法):
docker run -d
--name mysql
-p 3306:3306
-e TZ=Asia/Shanghai
-e MYSQL_ROOT_PASSWORD=123
mysql
运行效果如图:(大家安装的时候,在红色的地方可能会卡住,请耐心等待)

MySQL 安装完毕!通过任意客户端工具即可连接到 MySQL,大家可以使用自己的 Mysql 客户端工具,进行连接,如果连接上,说明 mysql 就安装成功了。(注意:这里安装的 Mysql 的密码为:123,上面安装时指定的)。

大家可以发现,当我们执行命令后,Docker 做的第一件事情,是去自动搜索并下载了 MySQL,然后会自动运行 MySQL,我们完全不用插手,是不是非常方便。
而且,这种安装方式你完全不用考虑运行的操作系统环境,它不仅仅在 Ubuntu 系统是这样,在 CentOS 系统、macOS 系统、甚至是装了 WSL 的 Windows 下,都可以使用这条命令来安装 MySQL。
要知道,不同操作系统下其安装包、运行环境是都不相同的!如果是手动安装,必须手动解决安装包不同、环境不同的、配置不同的问题!(已经头大了)
而使用 Docker,这些完全不用考虑。就是因为 Docker 会自动搜索并下载 MySQL。注意:这里下载的不是安装包,而是镜像。镜像中不仅包含了 MySQL 本身,还包含了其运行所需要的环境、配置、系统级函数库。因此它在运行时就有自己独立的环境,就可以跨系统运行,也不需要手动再次配置环境了。这套独立运行的隔离环境我们称为容器。
说明:
- 镜像:英文是image
- 容器:英文是container
因此,Docker安装软件的过程,就是自动搜索下载镜像,然后创建并运行容器的过程。
Docker 官方提供了一个专门管理、存储镜像的网站,并对外开放了镜像上传、下载的权利。Docker 官方提供了一些基础镜像,然后各大软件公司又在基础镜像基础上,制作了自家软件的镜像,全部都存放在这个网站。这个网站就成了 Docker 镜像交流的社区:
hub.docker.com
这个网站是在海外,访问起来会比较慢。
像这种提供存储、管理 Docker 镜像的服务器,被称为 DockerRegistry,可以翻译为镜像仓库。DockerHub 网站是官方仓库,阿里云、华为云会提供一些第三方仓库,我们也可以自己搭建私有的镜像仓库。
官方仓库在国外,下载速度较慢,一般我们都会使用第三方仓库提供的镜像加速功能,提高下载速度。而企业内部的机密项目,往往会采用私有镜像仓库。
总结:
Docker 本身包含一个后台服务,我们可以利用 Docker 命令告诉 Docker 服务,帮助我们快速部署指定的应用。Docker 服务部署应用时,首先要去搜索并下载应用对应的镜像,然后根据镜像创建并允许容器,应用就部署完成了。
用一幅图标示如下:

1.2 命令解读:
利用 Docker 快速的安装了 MySQL,非常的方便,下面我们来学习一下上面安装 Mysql 执行的指令。
docker run -d
--name mysql
-p 3306:3306
-e TZ=Asia/Shanghai
-e MYSQL_ROOT_PASSWORD=123
mysql
解读:
-
最后面的
是换行,我们可以将上面这些指令放在一行内执行。
-
docker run -d
:创建并运行一个容器,-d
则是让容器以后台进程运行。 -
--name mysql
: 给容器起个名字叫mysql
,可以叫别的。 -
-p 3306:3306
: 设置端口映射。- 容器是隔离环境,外界不可访问。但是可以将宿主机端口映射到容器内的端口,当访问宿主机指定端口时,就是在访问容器内的端口了。
- 容器内端口往往是由容器内的进程决定,例如 MySQL 进程默认端口是 3306,因此容器内端口一定是 3306;而宿主机端口则可以任意指定,一般与容器内保持一致。
- 格式:
-p 宿主机端口:容器内端口
,示例中就是将宿主机的 3306 映射到容器内的 3306 端口。
-
-e TZ=Asia/Shanghai
: 配置容器内进程运行时的一些参数。- 格式:
-e KEY=VALUE
,KEY 和 VALUE 都由容器内进程决定。 - 案例中,
TZ=Asia/Shanghai
是设置时区;MYSQL_ROOT_PASSWORD=123
是设置 MySQL 默认密码。
- 格式:
-
mysql
: 设置镜像名称,Docker 会根据这个名字搜索并下载镜像。- 格式:
REPOSITORY:TAG
,例如mysql:8.0
,其中REPOSITORY
可以理解为镜像名,TAG
是版本号。 - 在未指定
TAG
的情况下,默认是最新版本,也就是mysql:latest
。
- 格式:
镜像的名称不是随意的,而是要到 DockerRegistry 中寻找,镜像运行时的配置也不是随意的,要参考镜像的帮助文档,这些在DockerHub 网站或者软件的官方网站中都能找到。
如果我们要安装其它软件,也可以到 DockerRegistry 中寻找对应的镜像名称和版本,阅读相关配置即可。
二、Docker 基础
接下来,我们一起来学习 Docker 使用的一些基础知识,为将来部署项目打下基础。具体用法可以参考 Docker 官方文档:
https://docs.docker.com/
2.1 常见命令:
首先我们来学习 Docker 中的常见命令,可以参考官方文档:
https://docs.docker.com/reference/cli/docker/
2.1.1 命令介绍:
其中,比较常见的命令有:
命令 | 说明 | 文档地址 |
---|---|---|
docker pull | 拉取镜像 | docker pull |
docker push | 推送镜像到DockerRegistry | docker push |
docker images | 查看本地镜像 | docker images |
docker rmi | 删除本地镜像 | docker rmi |
docker run | 创建并运行容器(不能重复创建) | docker run |
docker stop | 停止指定容器 | docker stop |
docker start | 启动指定容器 | docker start |
docker restart | 重新启动容器 | docker restart |
docker rm | 删除指定容器 | docs.docker.com |
docker ps | 查看容器 | docker ps |
docker logs | 查看容器运行日志 | docker logs |
docker exec | 进入容器 | docker exec |
docker save | 保存镜像到本地压缩文件 | docker save |
docker load | 加载本地压缩文件到镜像 | docker load |
docker inspect | 查看容器详细信息 | docker inspect |
用一副图来表示这些命令的关系:
补充:
默认情况下,每次重启虚拟机我们都需要手动启动 Docker 和 Docker 中的容器。通过命令可以实现开机自启:
# Docker开机自启
systemctl enable docker
# Docker容器开机自启
docker update --restart=always [容器名/容器id]
2.1.2 演示:
我们以 Nginx 为例给大家演示上述命令。
# 第1步,去DockerHub查看nginx镜像仓库及相关信息
# 第2步,拉取Nginx镜像
docker pull nginx
# 第3步,查看镜像
docker images
# 结果如下:
REPOSITORY TAG IMAGE ID CREATED SIZE
nginx latest 605c77e624dd 16 months ago 141MB
mysql latest 3218b38490ce 17 months ago 516MB
# 第4步,创建并允许Nginx容器
docker run -d --