Docker入门到高级实战

1、Docker介绍

假如一台物理机器有128核,多个服务可以同时部署在该机器上,每个服务分配不同的核数,比如电商搞活动的时候,下单服务流量会变大,则可以把用户服务的核数临时抽一部分给下单服务,不用去买机器解决这个事;
Docker是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的 Linux 机器上,也可以实现虚拟化。容器是完全使用沙箱机制,相互之间不会有任何接口;
简单来说就是:

1、可以快速部署启动应用
2、实现虚拟化,完整资源隔离
3、一次编写,四处运行(有一定的限制,比如Docker是基于Linux 64bit的,无法在32bit的linux/Windows/unix环境下使用)

2、为什么用Docker

  1. 提供一次性的环境,假如需要安装Mysql,则需要安装很多依赖库、版本等,如果使用Docker则通过镜像就可以直接启动运行
  2. 快速动态扩容,使用docker部署了一个应用,可以制作成镜像,然后通过Dokcer快速启动
  3. 组建微服务架构,可以在一个机器上模拟出多个微服务,启动多个应用
  4. 更好的资源隔离和共享
    一句话:开箱即用,快速部署,可移植性强,环境隔离

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入门到高级实战_第1张图片
Docker守护进程(后台进程)管理

# systemctl start docker     #运行Docker守护进程
# systemctl stop docker      #停止Docker守护进程
# systemctl restart docker   #重启Docker守护进程

其他centos安装Docker时的一些错误解决方式

https://blog.csdn.net/daluguishou/article/details/52080250

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,重新拉取
Docker入门到高级实战_第2张图片
下载完成后:
Docker入门到高级实战_第3张图片

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/

Docker入门到高级实战_第4张图片
用户名密码默认都是guest

检查容器内部信息:

docker inspect 容器名称(就是--name后的值,也可以是id值)

Docker入门到高级实战_第5张图片
停止某个容器:

docker stop 容器名称

启动某个容器:

docker start 容器名称

移除某个容器:

 docker rm 容器名称 (容器必须是停止状态)

由于屏幕的问题,name的值一定要找对
在这里插入图片描述

5.3、使用Docker部署Nginx服务器

获取镜像

docker search nginx

Docker入门到高级实战_第6张图片
拉取镜像

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/

Docker入门到高级实战_第7张图片

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镜像地址
Docker入门到高级实战_第8张图片
点击"管理控制台"后进入如下界面,先开通一下仓库服务
Docker入门到高级实战_第9张图片
开通后:
Docker入门到高级实战_第10张图片
创建镜像仓库
Docker入门到高级实战_第11张图片
Docker入门到高级实战_第12张图片
完成创建:
Docker入门到高级实战_第13张图片
可以在这里看到操作步骤:
Docker入门到高级实战_第14张图片
操作指南:
Docker入门到高级实战_第15张图片
这里将本地的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

你可能感兴趣的:(技术,Spring,Cloud)