前言
Docker是一个开放平台,用于开发、交付和运行应用程序。它可以让您隔离应用程序和其所依赖的库,使其可以在各种不同的环境中运行。通过使用Docker,我们可以更快速地部署应用程序,更容易地维护它们,同时也可以节省服务器资源。
Docker主要分为三个部分:镜像(Image)、容器(Container)和仓库(Registry)。
镜像(Image)
让我们来看看镜像(Image)。镜像是一个只读的模板,它包含了所有需要运行应用程序所需的代码、库和文件。通过使用镜像,我们可以确保应用程序在不同的环境中具有相同的配置和依赖项。镜像可以通过Dockerfile文件构建,Dockerfile文件定义了如何构建镜像,以及应用程序所需的其他设置。
容器(Container)
容器(Container)是从镜像创建的运行实例。容器是一个独立的、可执行的软件包,包含了应用程序、库和所有其他依赖项。容器可以快速启动、停止和删除,而且与其他容器隔离,这意味着它们不会相互干扰。
和仓库(Registry)
仓库(Registry)用于存储和分发镜像。通过使用仓库,我们可以轻松地共享应用程序和它们的依赖项,并在需要时快速下载它们。Docker Hub是最大的公共仓库,其中包含了数千个镜像。
下面,我们来看一个实际的例子,如何使用Docker来运行Mysql。
示例------安装启动Mysql
1. 安装Docker
具体过程可参考菜鸟教程,下面以macOS系统作为例子进行演示。
启动docker客户端如下:
打开系统终端
(下面是在vscode的终端中演示),输入命令:
复制代码
docker -v
效果如下:
说明docker已经安装并启动。
2. 下载Mysql镜像
下载镜像有点类似于安装npm包:npm install <包名>
,这里输入docker镜像的安装命令:docker pull mysql
来下载安装mysql
的镜像:
安装结束后,输入镜像列表的查看命令:docker images
当然,通过docker的客户端App也可以看到:
3. 创建mysql镜像的容器,启动Mysql
输入启动容器命令:
ini
docker run -d -p 3308:3306 -e MYSQL_ROOT_PASSWORD=123456 mysql
先来看下启动结果,下面的一堆数字是完整的容器id:
输入的这一串命令是什么意思?
-
docker run
: 这是启动新容器的命令。 -
-d
或--detach
是使mysql服务在后台运行,而不是占用当前终端界面。 -
-p 3308:3306
: 这是端口映射参数:- 创建容器会默认创建一个子网,与宿主机所处的网络互相隔离;mysql服务默认端口
3306
,如果要通过宿主机所在网络访问容器所处的子网络中的服务,就需要进行端口映射 - 宿主机的端口在前(左边),容器的端口在后(右边)。
- 创建容器会默认创建一个子网,与宿主机所处的网络互相隔离;mysql服务默认端口
-
-e MYSQL_ROOT_PASSWORD=123456
: 设置环境变量MYSQL_ROOT_PASSWORD=123456
;也就是将mysql服务的root
用户的密码为123456
。 -
mysql
: 这是上面刚刚pull
的镜像的名称。
通过上面的命令,我们启动了一个mysql
镜像的容器,并将主机的3308
端口映射到了容器所在子网中ip的3306
端口,这样我们就可以通过访问主机的localhost:3308
来访问容器中的mysql
服务了。
4.进入容器
现在,我们已经成功地创建了一个名为"my-mysql"的Mysql容器,并将其启动。让我们进一步探索一下。
使用以下命令,我们可以查看正在运行的容器列表。
首先,我们需要知道容器的id ,输入容器查看命令:docker ps
,展示容器列表如下:
其中55cbcc600353
就是我们需要的容器的短id
,然后执行命令:docker exec -it 55cbcc600353 bash
,以下是命令的解析:
docker exec
:用于向运行中的容器发布命令。-it
:分配一个终端(伪终端),允许用shell
命令进行交互。也就是将容器中的终端界面映射到宿主机终端界面下,从而对容器进行直接的命令行操作。55cbcc600353
:容器ID或容器名称。bash
:这是要在容器内执行的命令。这里是启动了容器的Bash shell程序。
运行结果如下:
我们看到bash-4.4#
后闪烁的光标。这就是容器的bash shell
命令提示符,这里输入的shell命令将会在容器环境中执行。
我们输入mysql
登录命令,以root
用户身份登录:mysql -uroot -p123456
现在,您应该已经成功登录到Mysql数据库。您可以执行标准的Mysql命令来创建新用户、创建新数据库,或者操作已有的数据库。
例如,我们可以创建一个名为"mydatabase"的新数据库:
ini
CREATE DATABASE mydatabase;
5、修改认证方式
成功登录mysql
后,在mysql>
命令提示符下输入:ALTER USER 'root'@'%' IDENTIFIED WITH mysql_native_password By '123456';
这条命令用来修改'root
'用户的认证方式为mysql_native_password ,
将密码设置为123456
,并允许来自任何主机('%
')的连接。
输入exit;
命令退出mysql>
命令提示符:
6.访问Mysql服务
下面写一段nodeJs代码:
javascript
javascript
复制代码
// mysql.js
const mysql = require('mysql');
const connection = mysql.createConnection({
host: 'localhost',
port: '3308',
user: 'root',
password: '123456',
database: '',
});
connection.connect();
// 显示全部数据库
connection.query('show databases;', function (err, rows, fields) {
if (err) {
console.log('[SELECT ERROR] - ', err.message);
return;
}
console.log('--------------------------SELECT----------------------------');
console.log(rows);
console.log('------------------------------------------------------------');
});
回到终端上,运行上面的js代码,效果如下:
这样我们就完成了本地mysql
服务的部署。