初识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服务的部署。

相关推荐
前端小小王19 分钟前
React Hooks
前端·javascript·react.js
迷途小码农零零发29 分钟前
react中使用ResizeObserver来观察元素的size变化
前端·javascript·react.js
娃哈哈哈哈呀1 小时前
vue中的css深度选择器v-deep 配合!important
前端·css·vue.js
旭东怪1 小时前
EasyPoi 使用$fe:模板语法生成Word动态行
java·前端·word
ekskef_sef3 小时前
32岁前端干了8年,是继续做前端开发,还是转其它工作
前端
sunshine6413 小时前
【CSS】实现tag选中对钩样式
前端·css·css3
真滴book理喻4 小时前
Vue(四)
前端·javascript·vue.js
蜜獾云4 小时前
npm淘宝镜像
前端·npm·node.js
dz88i84 小时前
修改npm镜像源
前端·npm·node.js
Jiaberrr4 小时前
解锁 GitBook 的奥秘:从入门到精通之旅
前端·gitbook