前端学一点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的前端小伙伴已经有了一些概念;感兴趣的小伙伴可以继续深入,学习相关的知识。

相关推荐
我要洋人死1 小时前
导航栏及下拉菜单的实现
前端·css·css3
科技探秘人1 小时前
Chrome与火狐哪个浏览器的隐私追踪功能更好
前端·chrome
科技探秘人1 小时前
Chrome与傲游浏览器性能与功能的深度对比
前端·chrome
JerryXZR1 小时前
前端开发中ES6的技术细节二
前端·javascript·es6
七星静香1 小时前
laravel chunkById 分块查询 使用时的问题
java·前端·laravel
q2498596931 小时前
前端预览word、excel、ppt
前端·word·excel
小华同学ai2 小时前
wflow-web:开源啦 ,高仿钉钉、飞书、企业微信的审批流程设计器,轻松打造属于你的工作流设计器
前端·钉钉·飞书
Gavin_9152 小时前
【JavaScript】模块化开发
前端·javascript·vue.js
懒大王爱吃狼3 小时前
Python教程:python枚举类定义和使用
开发语言·前端·javascript·python·python基础·python编程·python书籍
逐·風7 小时前
unity关于自定义渲染、内存管理、性能调优、复杂物理模拟、并行计算以及插件开发
前端·unity·c#