Docker 下载
前往官网下载 Docker https://www.docker.com/
安装
打开 Docker 后,我们需要登录账号,没有的话,注册一下就好
修改安装源
点击 设置 / Docker Engine
{
"builder": {
"gc": {
"defaultKeepStorage": "20GB",
"enabled": true
}
},
"debug": true,
"experimental": false,
"registry-mirrors": ["https://xxxxxx.mirror.aliyuncs.com"]
}
这里我室友的阿里云的个人源地址,这还是免费的,网上还有很多国内源,自己选择就好。
修改完需要点击右下角的重启就好。
安装 MySQL
使用的 Docker Hub Image: https://hub.docker.com/_/mysql
这里安装 8.0 的版本
- 打开终端
🤙 ~ docker --version
Docker version 20.10.20, build 9fdeb9c
两个概念
- images: 镜像
docker images -a
当前已创建的镜像
- container:容器
docker ps
dcpker ps -a
当前正在运行中的容器 当前全部的容器
docker run --name mysql -d -p 3306:3306 -e MYSQL_ROOT_PASSWORD=your-pwd -v mysql:/var/lib/mysql --restart unless-stopped mysql:8
Unable to find image 'mysql:8' locally 表示当前镜像再本地不存在,需要在 远程 hub 中查找,及下载
docker run
: 运行一个容器--name mysql
: 容器的名称是 mysql(可以自己定义,没有限制)-d
: 此命令将在后台运行容器-p 3306:3306
: 容器服务的3306
端口开放到宿主网络(你的系统)映射的端口是3306
(这个端口可以自己填写)-e MYSQL_ROOT_PASSWORD=your-pwd
: 为容器设置环境变量,名称为MYSQL_ROOT_PASSWORD
这里会被内部使用,作为root
用户的密码your-pwd
可以自定义--restart unless-stopped
: 指示 Docker 始终可以重新启动容器,若 Docker 守护进程发生重新启动或更新后,该容器自动重启。unless-stop
表示docker stop
停止容器时, Docker 守护进程的重启将不会影响容器
- 查看容器信息
看下容器运行日志
这里 mysql
是容器名称
ok,我们连接下数据库
docker exec -it mysql mysql -p
docker exec
:以执行的方式向容器传递 shell-it
: 以交互的方式mysql
: 容器名称mysql -p
: 在容器的 bash 下执行,以密码的方式登入 MySQL cli
- 使用持久化数据
此时我们已经可以连接使用数据库了,但还没有配置 Docker Volumes (容器持久化卷宗)。也就是当前 MySQL 的书就是被临时挂在容器默认使用的路径上(容器 <->
宿主路径),随着容器的删除,临时的路径也会被删除,所以我们需要持久化我们的数据。
docker stop mysql
docker rm mysql
这里的 mysql
均是容器名称
docker run --name mysql -d -p 3306:3306 -e MYSQL_ROOT_PASSWORD=your-pwd -v mysql:/var/lib/mysql --restart unless-stopped mysql:8
-v mysql:/var/lib/mysql
: 容器的关联到宿主的/var/lib/mysql
下,mysql
为 Volumes 名称
此时我们删除容器,该卷宗依然存在
docker stop mysql
docker rm mysql
如果要删除卷宗
docker volume rm mysql
其他
使用容器网络
在上面的示例中,端口转发用于在你的主机网络上公开 MySQL 服务器。如果你只从另一个 Docker 容器(例如您的 API 服务器)连接到 MySQL,更好的方法是创建一个专用的Docker 网络。这通过限制数据库的暴露来提高安全性。
首先为您的应用程序创建一个 Docker 网络:
docker network create example-app
启动 MySQL 容器时指定此网络:
docker run --name mysql -d -e MYSQL_ROOT_PASSWORD=your-pwd -v mysql:/var/lib/mysql --network example-app mysql:8
将另一个容器连接到同一个网络:
docker run --name api-server -d -p 80:80 --network example-app example-api-server:latest
API 和 MySQL 容器现在共享一个网络。可以通过引用 MySQL 容器的主机名从 API 容器连接到 MySQL。默认情况下,这与容器的名称匹配。在这里,应用程序应连接到mysql
主机上的端口 3306
。
MySQL 配置
官方 MySQL 镜像支持多个环境变量,您可以使用它们来配置容器的初始状态。例如,MYSQL_ROOT_PASSWORD
. 使用 -e
标志 docker run
设置这些变量。它们仅在容器第一次启动时配置,此时 MySQL 数据目录为空。
MYSQL_DATABASE
- 容器启动时要创建的数据库模式的名称。MYSQL_USER
-MYSQL_PASSWORD
容器启动时创建一个新的普通用户。MYSQL_RANDOM_ROOT_PASSWORD
-MYSQL_ROOT_PASSWORD
如果您希望 MySQLroot
为您生成安全密码,请设置此选项。如果启用此设置,密码将docker logs
在首次启动期间发送到容器的日志(可通过命令访问)。之后将无法找回密码。