初识Docker,揭开Docker的神秘面纱

前言

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,如果要通过宿主机所在网络访问容器所处的子网络中的服务,就需要进行端口映射
    • 宿主机的端口在前(左边),容器的端口在后(右边)。
  • -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服务的部署。

相关推荐
编程零零七3 小时前
Python数据分析工具(三):pymssql的用法
开发语言·前端·数据库·python·oracle·数据分析·pymssql
(⊙o⊙)~哦5 小时前
JavaScript substring() 方法
前端
无心使然云中漫步5 小时前
GIS OGC之WMTS地图服务,通过Capabilities XML描述文档,获取matrixIds,origin,计算resolutions
前端·javascript
Bug缔造者5 小时前
Element-ui el-table 全局表格排序
前端·javascript·vue.js
xnian_6 小时前
解决ruoyi-vue-pro-master框架引入报错,启动报错问题
前端·javascript·vue.js
麒麟而非淇淋7 小时前
AJAX 入门 day1
前端·javascript·ajax
2401_858120537 小时前
深入理解MATLAB中的事件处理机制
前端·javascript·matlab
阿树梢7 小时前
【Vue】VueRouter路由
前端·javascript·vue.js
随笔写8 小时前
vue使用关于speak-tss插件的详细介绍
前端·javascript·vue.js
史努比.8 小时前
redis群集三种模式:主从复制、哨兵、集群
前端·bootstrap·html