前端学一点Docker

虽然前端很少跟docker打交道,但随着工作流程的自动化现代化,docker正变得越来越重要。无论你是希望扩展技能到全栈领域,还是想要炫技,掌握Docker基本知识都是前端小伙伴重要的一步。

什么是Docker

Docker 是一个开源的应用容器引擎,可以让开发者打包他们的应用以及依赖包到一个轻量级、可移植的容器中,然后发布到任何流行的 Linux 机器上,也可以实现虚拟化。

我们知道,软件的安装是要区分系统环境的;即使是运行环境相同,依赖的版本一旦有所出入,也容易出现"我这里明明好使,你那里为啥不行"的问题。容器技术解决了环境一致性依赖管理的问题。

因此,容器是我们的项目的运行环境,而docker是容器的运行环境与管理平台。

关键词

镜像 (Image)

镜像是构建容器的模板,可以简单理解为类似Js中的class类或构造函数。

镜像中详细记录了应用所需的运行环境、应用代码、如何操作系统文件等等信息;

容器 (Container)

容器是镜像的运行实例。可以简单理解为"new 镜像()"的实例,通过docker命令可以任意创建容器。

当前操作系统(宿主机)与容器之间的关系,可以参考浏览器页面与iframe之间的关系。容器可以拥有独立的IP地址,网络,文件系统以及指令等;容器与容器、容器与"宿主机"之间以隔离的方式运行,每个容器中通常运行着一个(或多个)应用。

仓库 (Registry)

仓库是集中管理镜像的地方。类似于npm平台与npm包之间的关系。

如果我们将搭建项目环境的详细过程以及具体的依赖记录进镜像中,每当需要部署新服务时,就可以很容易的通过镜像,创建出一个个完整的项目运行环境,完成部署。

示例------启动Mysql

1. 安装Docker

具体过程可参考菜鸟教程,下面以macOS系统作为例子进行演示。

启动docker客户端如下:

这里完成了第一步。打开终端,输入命令:

docker -v

效果如下:

2. 下载Mysql镜像

下载镜像有点类似于:npm install <包名>,这里输入docker的安装命令:docker pull mysql来下载安装mysql的镜像:

安装结束后,输入镜像列表的查看命令:docker images

当然,通过docker的客户端也可以看到:

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,如果要通过宿主机网络访问容器子网络中的服务,就需要进行端口映射(不熟悉网络的可以看下《如何跟小白解释网络》)。
    • 宿主机的端口在前(左边),容器的端口在后(右边)。
  • -e MYSQL_ROOT_PASSWORD=123456: 设置环境变量 MYSQL_ROOT_PASSWORD=123456;也就是设置root用户的密码为123456
  • mysql: 这是上面刚刚pull的镜像的名称。

通过上面的命令,我们启动了一个mysql镜像的容器,并将主机的3308端口映射到了容器在子网中地址的3306端口,这样我们就可以通过访问主机的localhost:3308来访问容器中的mysql服务了。

4.访问Mysql服务

下面写一段nodeJs代码:

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('------------------------------------------------------------');
});

这里调用了nodeJs的mysql包,访问localhost:3308,用户名为root,密码为123456,运行结果下:

ini 复制代码
$ node mysql.js;
[SELECT ERROR] - ER_NOT_SUPPORTED_AUTH_MODE: Client does not support authentication
protocol requested by server; consider upgrading MySQL client

这里报错了,原因是mysql服务的认证协议与我们代码中的不同导致的。这里我们需要对mysql服务进行一些修改。

为此,我们需要进入mysql容器,对mysql进行一些直接的命令行操作。

5.进入容器

首先,我们需要知道容器的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>命令提示符下输入:ALTER USER 'root'@'%' IDENTIFIED WITH mysql_native_password By '123456';

这条命令用来修改'root'用户的认证方式为mysql_native_password ,将密码设置为123456,并允许来自任何主机('%')的连接。

输入exit;命令退出mysql>命令提示符:

再按下:ctl+D退出容器终端,回到系统终端下。再次运行上面的js代码,效果如下:

这样我们就完成了本地mysql服务的部署。

结束

通过上面的简介以及安装部署mysql服务的例子,相信不了解docker的前端小伙伴已经有了一些概念;感兴趣的小伙伴可以继续深入,学习相关的知识。

相关推荐
IT女孩儿18 分钟前
CSS查缺补漏(补充上一条)
前端·css
吃杠碰小鸡1 小时前
commitlint校验git提交信息
前端
虾球xz2 小时前
游戏引擎学习第20天
前端·学习·游戏引擎
我爱李星璇2 小时前
HTML常用表格与标签
前端·html
疯狂的沙粒2 小时前
如何在Vue项目中应用TypeScript?应该注意那些点?
前端·vue.js·typescript
小镇程序员2 小时前
vue2 src_Todolist全局总线事件版本
前端·javascript·vue.js
野槐2 小时前
前端图像处理(一)
前端
程序猿阿伟2 小时前
《智能指针频繁创建销毁:程序性能的“隐形杀手”》
java·开发语言·前端
疯狂的沙粒2 小时前
对 TypeScript 中函数如何更好的理解及使用?与 JavaScript 函数有哪些区别?
前端·javascript·typescript
瑞雨溪3 小时前
AJAX的基本使用
前端·javascript·ajax