1、Docker介绍
假如一台物理机器有128核,多个服务可以同时部署在该机器上,每个服务分配不同的核数,比如电商搞活动的时候,下单服务流量会变大,则可以把用户服务的核数临时抽一部分给下单服务,不用去买机器解决这个事;
Docker是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的 Linux 机器上,也可以实现虚拟化。容器是完全使用沙箱机制,相互之间不会有任何接口;
简单来说就是:
1、可以快速部署启动应用
2、实现虚拟化,完整资源隔离
3、一次编写,四处运行(有一定的限制,比如Docker是基于Linux 64bit的,无法在32bit的linux/Windows/unix环境下使用)
2、为什么用Docker
- 提供一次性的环境,假如需要安装Mysql,则需要安装很多依赖库、版本等,如果使用Docker则通过镜像就可以直接启动运行
- 快速动态扩容,使用docker部署了一个应用,可以制作成镜像,然后通过Dokcer快速启动
- 组建微服务架构,可以在一个机器上模拟出多个微服务,启动多个应用
- 更好的资源隔离和共享
一句话:开箱即用,快速部署,可移植性强,环境隔离
3、Centos7安装Docker
阿里云(centos7)安装Docker手册:
https://help.aliyun.com/document_detail/51853.html?spm=a2c4g.11186623.6.820.RaToNY 安装yum源:
# yum install epel-release –y
# yum clean all
# yum list
安装并运行Docker:
# yum install docker-io –y
# systemctl start docker
检查安装结果:
# docker info
出现Docker信息
Docker守护进程(后台进程)管理
# systemctl start docker #运行Docker守护进程
# systemctl stop docker #停止Docker守护进程
# systemctl restart docker #重启Docker守护进程
其他centos安装Docker时的一些错误解决方式
4、Docker镜像、仓库、容器
镜像Docker images:
容器运行时的只读模板,操作系统+软件运行环境+用户程序
容器Docker containers:
通过镜像生成容器
容器包含了某个应用运行所需要的全部环境
仓库Docker registeries:
用来保存镜像,有公有和私有仓库,好比Maven的中央仓库和本地私服;
Docker中央仓库:https://hub.docker.com/
三者关系:
对比面向对象的方式
Dokcer 里面的镜像 : Java里面的类 Class User.class
Docker 里面的容器 : Java里面的对象 Object new出来的user对象
通过类创建对象,通过镜像创建容器
5、Docker容器常用命令实战
常用命令(安装部署好Dokcer后,执行的命令是docker开头),下边的xxx指的是镜像名称
5.1、搜索、下载(拉取)、删除镜像:
docker search xxx
eg:搜索RabbitMQ镜像
docker search rabbitmq:management
列出当前系统存在的镜像
docker images
删除镜像
#rmi后加 -f 可以强制删除
docker rmi IMAGE_NAME
也可以根据ID删除
拉取镜像:
# xxx是具体某个镜像名称(格式 REPOSITORY:TAG)
docker pull xxx
eg:拉取RabbitMQ镜像
docker pull rabbitmq:management
这是因为默认仓库在国外,我们可以改为国内仓库源
vi /etc/docker/daemon.json
{
"registry-mirrors": ["http://hub-mirror.c.163.com"]
}
国内仓库地址:
Docker中国区官方镜像
https://registry.docker-cn.com
网易
http://hub-mirror.c.163.com
中国科技大学
https://docker.mirrors.ustc.edu.cn
阿里云容器 服务
https://cr.console.aliyun.com/
改了之后重启docker,重新拉取
下载完成后:
5.2、运行容器
# 运行一个容器:下边两种方式都可以
docker run -d -p 5672:5672 -p 15672:15672 rabbitmq:management
docker run -d --name "maltose" -p 5672:5672 -p 15672:15672 rabbitmq:management
# docker run - 运行一个容器
# -d 后台运行
# -p 端口映射
# rabbitmq:management (格式 REPOSITORY:TAG),如果不指定tag,默认使用最新的
# --name "xxx"
返回一个id值,即容器ID
查看当前运行的容器
docker ps
在浏览器直接访问RabbitMQ
http://192.168.237.130:15672/
用户名密码默认都是guest
检查容器内部信息:
docker inspect 容器名称(就是--name后的值,也可以是id值)
停止某个容器:
docker stop 容器名称
启动某个容器:
docker start 容器名称
移除某个容器:
docker rm 容器名称 (容器必须是停止状态)
由于屏幕的问题,name的值一定要找对
5.3、使用Docker部署Nginx服务器
获取镜像
docker search nginx
拉取镜像
docker pull nginx
启动nginx(这里启动多个nginx)
docker run -d --name "maltose1" -p 8088:80 nginx
docker run -d --name "maltose2" -p 8089:80 nginx
docker run -d --name "maltose3" -p 8090:80 nginx
访问:
如果是阿里云服务,记得配置安全组,腾讯云也需要配置,这个就是一个防火墙
linux下访问URL地址:
curl "http://127.0.0.1:8088"
浏览器也可以访问到:
http://192.168.237.130:8088/
5.4、公司Docker镜像仓库使用
公共镜像仓库:
官方:https://hub.docker.com/,基于各个软件开发或者有软件提供商开发的
非官方:其他组织或者公司开发的镜像,供大家免费试用(前边提到过:网易、阿里等)
私有镜像仓库:
用于存放公司内部的镜像,不提供给外部试用;
eg:公司内部使用SpringCloud 开发了一个支付系统后,做成一个镜像 (操作系统+软件运行环境+用户程序)
5.5、docker下安装mysql8
# 拉取镜像
docker pull mysql
创建一个文件夹,来存放mysql相关文件
# 我自己创建的的文件夹路径
/usr/local/mysqldata
执行如下命令启动mysql容器
docker run --name mysql -p 3306:3306 -e MYSQL_ROOT_PASSWORD=123456 -d mysql
上边命令参数的解释:
-d:表示后台运行,不加-d执行上面的命令你就会看到mysql启动的日志信息了;
-p:表示端口映射,冒号左面的是我们的宿主机的端口,也就是我们虚拟机的端口,而右侧则表示的是mysql容器内的端口;
--name:是我们给mysql容器取的名字;
-v:表示挂载路径,$PWD表示当前目录下,冒号左面的表示我们宿主机的挂载目录,也就是我们虚拟机所在的文件路径,冒号右边则表是的是mysql容器在容器内部的路径,上面的命令我分别挂载了my.cnf(mysql的配置文件),如需使用配置文件的方式启动mysql,这里则需要加上,mysql的日志,还有mysql存放数据所在的目录;
配置远程登录
进入docker里的mysql配置目录里
docker exec -it mysql bash
登录mysql:
mysql -u root -p
选择当前数据库
use mysql;
依次执行如下命令:
GRANT ALL ON *.* TO 'root'@'%';
ALTER USER 'root'@'%' IDENTIFIED WITH mysql_native_password BY '123456';
也可以参考linux安装完mysql后配置远程登录:
mysql8.**配置远程登录
全部安装配置好之后,以后开机启动mysql的步骤:
# 启动docker
systemctl start docker
# 查看所有容器(-a:包括未启动的容器)
docker ps -a
# 找到mysql容器的id,并启动
docker start 5edb251d3cfe
6、构建自己的私有镜像仓库
了解:
jenkins自动构建————自动将自己的私有镜像部署到服务器里;
阿里云Docker镜像地址
点击"管理控制台"后进入如下界面,先开通一下仓库服务
开通后:
创建镜像仓库
完成创建:
可以在这里看到操作步骤:
操作指南:
这里将本地的RabbitMQ作为我们的私有镜像推送到阿里云私有仓库,关于如何将自己的镜像打包,下次总结
本地镜像:
1、登录
docker login --username=东风麦芽糖 registry.cn-shenzhen.aliyuncs.com
#会提示输入密码
2、推送
#先打一个TAG: docker tag [ImageId] registry.cn-shenzhen.aliyuncs.com/maltose/maltose_images:[镜像版本号]
docker tag 2f415b0e9a6e registry.cn-shenzhen.aliyuncs.com/maltose/maltose_images:ma_rabbitmq-v1.0.2
#推送
docker push registry.cn-shenzhen.aliyuncs.com/maltose/maltose_images:ma_rabbitmq-v1.0.2
3、拉取镜像
线上服务器拉取镜像:
docker login --username=东风麦芽糖 registry.cn-shenzhen.aliyuncs.com
docker pull registry.cn-shenzhen.aliyuncs.com/maltose/maltose_images:ma_rabbitmq-v1.0.2
启动容器:
docker run -d --name "maltose" -p 5672:5672 -p 15672:15672 2f415b0e9a6e