目录
[1. Mysql 容器化安装](#1. Mysql 容器化安装)
[2. Redis 容器化安装](#2. Redis 容器化安装)
[3. C++ 容器制作](#3. C++ 容器制作)
[3.1 知识点补充](#3.1 知识点补充)
[3.2 制作C++容器](#3.2 制作C++容器)
[4. 容器资源更新](#4. 容器资源更新)
[5. 常见问题](#5. 常见问题)
正文开始:
1. Mysql 容器化安装
进入 mysql 的镜像网站,查找 mysql 的镜像,我们选择 5.7 版本,拉取镜像
bash
docker pull mysql:5.7
我们知道 msyql 的默认端口是 3306,而且有密码,查看官网的启动用例 docker run --name some-mysql -e MYSQL_ROOT_PASSWORD=my-secret-pw -d mysql:tag 指定了 mysql 的密码信息
bash
#启动一个 msyql,并指定密码和端口开放
docker run --name mysql -e MYSQL_ROOT_PASSWORD=maxhouroot -p 8021:3306 -d mysql:5.7
我们进入容器登录,可以看到我们已经可以正常登录 msyql 了
bash
docker exec -it mysql bash
如果我们对外开放了 8021 端口,没有防火墙的话,我们可以通过 GUI 工具远程登录到界面上。以 mysql workbench 为例。

我们亦可一步启动MySQL容器:


总结: 借助docker,我们便可通过一条命令就可以完成 mysql实例的初始化。那以上操作部署的mysql可不可以用于生产呢?其实我们这样启动的一个mysql实例是一个单点的一个实例,如果我们要用于生产,我们至少要做成一个高可用的实例,就是要有主有从,可能一主一从,也可能一主多从这样。
2. Redis 容器化安装
拉取 redis 镜像,启动redis 容器

进行交互:


如果开通了防火墙,我们可以通过可视化工具连接上,可视化工具下载地址:
AnotherRedisDesktopManager

配置链接:

查看 key:

退出容器,然后释放空间:
bash
docker stop redis
docker rm redis
3. C++ 容器制作
3.1 知识点补充
源是什么?:
源就是来源。就是你安装软件时,程序从哪里获取软件包(安装程序在你的机器上,但需要安装的
东西却在软件源服务器上)。源,在 Ubuntu 下,它相当于软件库,需要什么软件,只要记得正确的软件名就可以用命令抄安装。其实你可以把他称为软件仓库。安装软件时,就是从仓库里面调取数据放在你的机器上。
sudo apt-get install 软件名
例如:你要安装 gcc 软件,那么你就可以再终端中输入 sudo apt-get install gcc,这样就能帮你装好 gcc 软件,如果源里没有这个软件时,此命令就没法完成。
什么是镜像?:
镜像(Mirroring)是一种文件存储形式,是冗余的一种类型,一个磁盘上的数据在另一个磁盘上存在一个完全相同的副本即为镜像。
常见的镜像文件格式有 ISO、BIN、IMG、TAO、DAO、CIF、FCD。
所谓镜像文件其实和 ZIP 压缩包类似,它将特定的一系列文件按照一定的格式制作成单一的文件,以方便用户下载和使用,例如一个测试版的操作系统、游戏等。(安装过操作系统的人应该对 xxx.iso 不陌生)
镜像文件不仅具有 ZIP 压缩包的"合成"功能,它最重要的特点是可以被特定的软件识别并可直接刻录到光盘上。
镜像源:
镜像源就是把官方的源做一个镜像,你可以在这下载软件。
比如 ubuntu 官方源在国外,下载软件可能会很慢,这时候就需要换成国内的镜像源。
我们基于 ubuntu 来制作 C++容器,运行输出 HelloWorld
可以把镜像源当做一个代理商,比如买车本来要去车厂,但是设置了一个个 4s 店以后,我去 4s 店就好了,不用跑到车厂。
3.2 制作C++容器
下载 CentOS 镜像,启动容器:

配置国内镜像源加速:

现在就可安装 gcc vim:
bash
yum install gcc vim

bash
#vi/vim 输入以下内容
#include <stdio.h>
int main()
{
printf("hello docker!\n");
return 0;
}
4. 容器资源更新
运行一个 nginx:
bash
docker run -d --name mynginx5 -p 80:80 ngxin:1.22.1
我们可以通过 docker top 查看容器中有哪些进程,添加 aux,可以看到占用的内存和 CPU 信息
bash
docker top mynginx5 aux
通过 docker stats 可以看到资源的动态变化
bash
docker stats
通过 docker update 更新 docker 的最大内存
bash
docker update -m 300m --memory-swap 600m mynginx5
通过 docker stats 再次查看可以看到内存会被限制到 300m 了
我们在容器中执行一个命令,打满 cpu
bash
for i in `seq 1 $(cat /proc/cpuinfo |grep "physical id" |wc -l)`
do
dd if=/dev/zero of=/dev/null &
done
#说明:
#cat /proc/cpuinfo |grep "physical id" | wc -l 可以获得 CPU 的个数,我们将其表示为 N
#seq 1 N 用来生成1到N之间的数字
#for i in seq 1 N; 就是循环执行命令,从1到N
#dd if=/dev/zero of=/dev/null 执行 dd 命令, 输出到/dev/null, 实际上只占用 CPU, 没有 IO 操作
#由于连续执行N个(N是 CPU 个数)的 dd 命令, 且使用率为 100%, 这时调度器会调度每个 dd 命令在不同的 CPU 上处理,最终就实现所有CPU占用率 100%
执行命令配置只能使用 10%的 cpu:
bash
docker update --cpu-period=100000 --cpu-quota=10000 mynginx5
停止容器,释放资源:
bash
docker stop mynginx5
docker rm mynginx5
5. 常见问题
docker create**、docker start和docker run有什么区别?:**
docker create 命令从 Docker 映像创建一个全新的容器。但是,它不会立即运行它。
docker start 命令将启动任何已停止的容器。如果使用 docker create 命令创建容器, 则可以使用此命令启动它。
docker run 命令是创建和启动的组合,因为它创建了一个新容器并立即启动它。实际上,如果 docker run 命令在您的系统上找不到上述映像,它可以从 Docker Hub 中提取映像。
docker import和docker load****有什么区别?:
想要了解 docker load 与 docker import 命令的区别,还必须知道 docker save 与 docker export 命令:
- docker save images_name: 将一个镜像导出为文件,再使用 docker load 命令将文件导入为一个镜像,会保存该镜像的的所有历史记录。比 docker export 命令导出的文件大,很好理解,因为会保存镜像的所有历史记录。
- docker export container_id: 将一个容器导出为文件,再使用 docker import 命令将容器导入成为一个新的镜像,但是相比 docker save 命令,容器文件会丢失所有元数据和历史记录,仅保存容器当时的状态,相当于虚拟机快照。
既可以使用 docker load 命令来导入镜像库存储文件到本地镜像库,也可以使用 docker import 命令来导入一个容器快照到本地镜像库。
两者的区别在于容器快照将会丢弃所有的历史记录和元数据信息,而镜像存储文件将保存完整记录,体积也会更大。
docker rm & docker rmi & docker prune****的差异?:
- docker rm : 删除一个或多个容器
- docker rmi : 删除一个或多个镜像
- docker prune: 用来删除不再使用的 docker 对象