1、Docker相对于虚拟机的优点以及定义
虚拟机指的是在宿主机上虚拟出一套硬件后再虚拟出一个操作系统
而docker是让容器里面的进程直接运行在宿主机上
优势:体积更轻、跑的更快
- 跨平台,镜像能提供除了系统内核之外的运行环境,所以在任何系统中都能提供一致的运行环境,没有不同系统兼容问题以及虚拟机在不同系统中的配置不同情况
- 借助跨平台的特性,能够大大降低配置成本,docker可以将很多配置复杂的服务端中间件打包成基础镜像提供给开发使用,只需要常规的docker相关命令/运行提供的容器编排脚本,就可以搭建出需要使用的服务端环境
- docker提供快速迁移,快速的伸缩副本,减少运维的工作成本和负担
何为镜像呢,又何为容器呢
【三个核心概念】
-
镜像(Image):和windows的iso镜像相比,docker镜像是分层的,可复用的,包含了一个完整功能的最小系统
-
容器(Container):是镜像运行时的一个载体,依托虚拟化技术,给容器创建了独立的端口、进程、文件等“空间”,通俗来说就是一个与宿机隔离的容器,容器可宿主机之间进行端口、网络等的通信
-
仓库(Registry):存储镜像的服务器,与git仓库相似,拥有仓库名、tag,在本地构建完镜像之后,即可通过仓库进行镜像的分发
2、Docker的安装
-安装地址:docs.docker.com/desktop/ins…
-验证是否安装成功,在终端输入docker回车,若有说明即证明安装成功
-命令运行的过程
- docker pull 从镜像服务器拉取镜像到本地
- docker run 将镜像实例化,放到容器列表列执行
- docker build 创建一个镜像
3、运行命令
【拉取基础镜像pull】
利用docker pull命令即可从相关hub网站上拉取镜像到本地。
查看镜像信息,运行 docker images
【创建容器create】
docker create --name xxxx centos:centos7 通过镜像去创建一个容器,同时输出容器id
【运行容器start】
docker start xxxx(创建容器的时候命的名字)
【进入容器exec】
docker exec -it xxxx(容器名字) /bin/bash
【也可以一步到位run】
docker run -itd --name centos-test centos:centos7 这一步包含了创建并运行一个容器,然后进入该容器
查看容器的运行信息:运行docker ps
【进入容器exec】
docker exec -it centos-test(容器名字) /bin/bash(COMMAND)
可以在docker页面看到
4、在容器里安装Node环境
【下载nodejs源】自行选择
#nodejs 8
curl --silent --location rpm.nodesource.com/setup_8.x | bash -
#nodejs 10
curl --silent --location rpm.nodesource.com/setup_10.x | bash -
【安装nodejs】
yum -y install nodejs
验证node是否安装成功
【保存并使用】
保存镜像:
docker commit -m "centos7 nodejs v8.17"(提交信息) centos-test(容器名字) nodejs (给仓库起名字)
查看新制作的镜像(安装了基础环境nodejs):
docker images
使用一下这个新制作的镜像:
docker run -it --name newWorkSpace(起名字) nodejs(保存过的仓库名字) /bin/bash(可通过docker ps 查看command)
5、安装MySQL8
【进入到centos容器】
docker exec -it centos-test /bin/bash
【安装ssh服务和网络基本工具】
yum install net-tools.x86_64 -y
yum install -y openssh-server
【重启SSH服务】
systemctl restart sshd
失败: Failed to get D-Bus connection: Operation not permitted
寻找解决办法但是尝试了始终不行
【安装passwd软件,用于设置用户密码】
yum install passwd -y
【设置root用户密码】
passwd root
【删除自带数据库】
先检查一下是否有自带的数据库
rpm -qa|grep mariadb
这里下载的centos7是没有自带mariadb数据库的,如果有则需删除
【下载mysql8安装包】
先安装wget
yum install wget
wget downloads.mysql.com/archives/ge…
安装完mysql8,进行解压
tar -xf mysql-8.0.22-1.el7.x86_64.rpm-bundle.tar
依次执行以下安装顺序:
- rpm -ivh mysql-community-common-8.0.22-1.el7.x86_64.rpm
- rpm -ivh mysql-community-client-plugins-8.0.22-1.el7.x86_64.rpm
- rpm -ivh mysql-community-libs-8.0.22-1.el7.x86_64.rpm
- rpm -ivh mysql-community-libs-compat-8.0.22-1.el7.x86_64.rpm
- rpm -ivh mysql-community-client-8.0.22-1.el7.x86_64.rpm
- rpm -ivh mysql-community-server-8.0.22-1.el7.x86_64.rpm
- rpm -ivh mysql-community-devel-8.0.22-1.el7.x86_64.rpm
- rpm -ivh mysql-community-embedded-compat-8.0.22-1.el7.x86_64.rpm
- rpm -ivh mysql-community-test-8.0.22-1.el7.x86_64.rpm
执行到rpm -ivh mysql-community-server-8.0.22-1.el7.x86_64.rpm报错了:
解决:
- yum install -y libaio
- yum install -y numactl
- yum install -y net-tools
- yum install -y perl
执行到rpm -ivh mysql-community-devel-8.0.22-1.el7.x86_64.rpm报错了
解决:
- yum install openssl-devel
执行到rpm -ivh mysql-community-test-8.0.22-1.el7.x86_64.rpm报错了
解决:
- yum install perl-JSON.noarch -y
- yum install perl-Test-Pod.noarch -y
【启动mysql】
systemctl start mysqld
6、实际应用
- 多环境的部署切换 :docker能原封不动的将开发环境中的代码与环境原封不动无污染的迁移到线上环境,配合一定的自动化流程即可实现自动的发布
- 前端云构建:因为node_module,同一个仓库下不同人开发会遇到使用不同的包版本,会导致发布后产生线上问题,用docker可以在云端新建容器,远程无污染、低层本构建代码,实现不同人用同一个版本
- 复杂环境一键配置:面对一些需要配超级复杂环境的场景,利用docker对环境配置做封装,直接生成镜像,便可低成本使用
- 同应用多版本隔离、文件隔离:比如一个项目依赖node6,一个项目依赖node8,比如同一台服务器上跑了100个程序,可以用docker建立隔离,防止互相污染