SpringBoot与Docker:简介,核心概念,安装,使用

Docker简介

Docker是一个开源的应用容器引擎;是一个轻量级容器技术;
下面举个例子来说明它的用处:
	比如A需要使用电脑,在原生电脑里面从Windows官网里面下载了windows原生系统
	然后在电脑里面安装,他还需要安装电脑的驱动,还有需要常用的软件,比如桌面软件
	还需要安装一些其他的个人使用的个性化软件之类的,安装好之后A就可以使用了
	然后B又想使用电脑,需要重复A的步骤安装东西
	现在就有Windows镜像系统,这个镜像系统就是A将它安装好的所有东西整套进行
	打包,将它打包成一个镜像文件系统,然后如果其他人想安装Windows系统,
	就直接拿这个Windows镜像系统来进行安装就行,A配置好的东西都会有

Docker就是类似上面的镜像系统
	比如我们需要在Linux上面安装配置MySQL,如果没有Docker,
	就需要从官网上下载这个安装程序,安装好后还需要配置
	如果想在另外一台电脑安装配置MySQL,也需要上面的步骤
	如果使用Docker就不一样了,在一台电脑安装了MySQL,将它打包
	成MySQL-Docker镜像,如果另外一台电脑想安装MySQL,
	只需要它安装了Docker然后运行MySQL-Docker镜像,就会产生MySQL容器
	如果需要Redis或者Tomcat,都只需要运行镜像文件就产生对应的容器
	而且容器之间是完全使用沙箱机制,相互之间不会有任何接口,
	更重要的是容器性能开销极低。

Docker是一个开源的应用容器引擎,基于 Go 语言 并遵从Apache2.0协议开源。
	支持将软件编译成一个镜像;然后在镜像中各种软件做好配置,
	将镜像发布出去,其他使用者可以直接使用这个镜像;
	运行中的这个镜像称为容器,容器启动是非常快速的。

在这里插入图片描述

Docker核心概念

docker主机(Host):安装了Docker程序的机器(Docker直接安装在操作系统之上);
docker客户端(Client):连接docker主机进行操作;
docker仓库(Registry):用来保存各种打包好的软件镜像;
docker镜像(Images):软件打包好的镜像;放在docker仓库中;
docker容器(Container):镜像启动后的实例称为一个容器;容器是独立运行的一个或一组应用

使用Docker的步骤:
1)、安装Docker
2)、去Docker仓库找到这个软件对应的镜像;
3)、使用Docker运行这个镜像,这个镜像就会生成一个Docker容器;
4)、对容器的启动停止就是对软件的启动停止;

安装docker

如果需要使用Linux虚拟机,使用VirtualBox
使用客户端连接Linux
	使用ip addr查看Linux的ip地址然后进行连接
安装之前先检查
1.使用uname ‐r 检查,查看centos版本,Docker 要求 CentOS 系统的内核版本高于 3.10
2.如果版本不够,就使用yum update进行升级软件包及内核
3.安装docker,使用yum install docker
4.安装完成后启动docker,使用systemctl start docker
	还可以使用docker -v来查看docker的版本,查看是否启动成功
5.开机启动docker,使用systemctl enable docker
6.停止docker,使用systemctl stop docker

我出现这样的错误

使用docker

镜像操作

就是想要安装打包的软件
检索命令:docker search 关键字 eg:docker search mysql
这就是我们经常去docker hub上检索镜像的详细信息

在这里插入图片描述
类似这样
在这里插入图片描述

镜像的拉取:
docker pull 镜像名:tag
	:tag是可选的,tag表示标签,多为软件的版本,默认是latest

在这里插入图片描述

查看所有本地镜像:
	docker images
删除指定的本地镜像
	docker rmi 镜像id

容器操作

有了软件镜像后,然后运行镜像,然后产生一个容器
对应的操作有:
	搜索镜像:docker search tomcat
	拉取镜像:docker pull tomcat
	根据镜像启动容器:docker run ‐‐name mytomcat ‐d tomcat:latest
					--name是运行的容器的名称,-d是后台运行,后面的镜像的名称和版本号或者id
	查看运行中的容器:docker ps
	停止运行中的容器:docker stop 容器的id
	查看所有的容器:docker ps ‐a
	启动容器:docker start 容器id
	删除一个容器:docker rm 容器id
	启动一个做了端口映射的容器:docker run ‐d ‐p 8888:8080 tomcat
		‐d:后台运行
		‐p: 将主机的端口映射到容器的一个端口 主机端口:容器内部的端口
	查看容器的日志:docker logs container‐name/container‐id
	
	上面的做端口映射的容器需要关闭防火墙或者设置好防火墙
		service firewalld status ;查看防火墙状态
		service firewalld stop:关闭防火墙

其他的操作参考官网文档

MySQL安装示例

首先拉取MySQL镜像:docker pull mysql
然后想像之前那样启动
docker run ‐‐name mysql01 ‐d mysql
发现这样启动不了,容器无法启动,具体报错如下
报错无法运行的代码
想启动mysql
[root@MiWiFi-R4AC-srv ~]# docker run --name mysql01 -d mysql
98cba5e091e5cc7caea0f7b67676bf55ff98a390a351ab476613524b261fa624
查看容器状态,发现mysql退出了
[root@MiWiFi-R4AC-srv ~]# docker ps -a
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS                      PORTS               NAMES
98cba5e091e5        mysql               "docker-entrypoint..."   55 seconds ago      Exited (1) 54 seconds ago                       mysql01
然后查看MySQL的输出日志
说这三个参数必须指定一个
[root@MiWiFi-R4AC-srv ~]# docker logs 98cba5e091e5
2021-02-13 14:45:32+00:00 [Note] [Entrypoint]: Entrypoint script for MySQL Server 8.0.23-1debian10 started.
2021-02-13 14:45:32+00:00 [Note] [Entrypoint]: Switching to dedicated user 'mysql'
2021-02-13 14:45:32+00:00 [Note] [Entrypoint]: Entrypoint script for MySQL Server 8.0.23-1debian10 started.
2021-02-13 14:45:32+00:00 [ERROR] [Entrypoint]: Database is uninitialized and password option is not specified
        You need to specify one of MYSQL_ROOT_PASSWORD, MYSQL_ALLOW_EMPTY_PASSWORD and MYSQL_RANDOM_ROOT_PASSWORD
[root@MiWiFi-R4AC-srv ~]# 
然后参考了官网的说法
https://hub.docker.com/_/mysql

在这里插入图片描述

运行的代码
[root@MiWiFi-R4AC-srv ~]# docker run --name mysql02 -e MYSQL_ROOT_PASSWORD=123 -d mysql
d84a81a8d0dfd883daf1175049c16410442ee6254f1d0a9cdb22966140cb7190
[root@MiWiFi-R4AC-srv ~]# docker ps -a
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS                      PORTS                 NAMES
d84a81a8d0df        mysql               "docker-entrypoint..."   12 seconds ago      Up 11 seconds               3306/tcp, 33060/tcp   mysql02
98cba5e091e5        mysql               "docker-entrypoint..."   11 minutes ago      Exited (1) 11 minutes ago                         mysql01
[root@MiWiFi-R4AC-srv ~]# 
但是上面的运行方法没有讲端口暴露出来,所以在外面是无法访问的
下面将端口进行映射
做端口映射的代码
[root@MiWiFi-R4AC-srv ~]# docker run -p 3307:3306 --name mysql03 -e MYSQL_ROOT_PASSWORD=123 -d mysql
7cf6c4b1b5c1754b5ed6fb13cd18535ea53b721da61ef234e121916c2a3dea66
[root@MiWiFi-R4AC-srv ~]# docker ps -a
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS                      PORTS                               NAMES
7cf6c4b1b5c1        mysql               "docker-entrypoint..."   5 seconds ago       Up 5 seconds                33060/tcp, 0.0.0.0:3307->3306/tcp   mysql03
d84a81a8d0df        mysql               "docker-entrypoint..."   2 minutes ago       Up 2 minutes                3306/tcp, 33060/tcp                 mysql02
98cba5e091e5        mysql               "docker-entrypoint..."   14 minutes ago      Exited (1) 14 minutes ago  
我出现了一小点错误
1251-Client does not support authentication protocol 
requested by server;consider upgrading MySQL client
这个就是客户端不支持服务端的原因,
要么升级客户端,要么将容器镜像不要下载latest
网上说原因是:
	mysql8 之前的版本中加密规则是mysql_native_password,
	而在mysql8之后,加密规则是caching_sha2_password, 
要么:
	升级navicat驱动;
要么
	把mysql用户登录密码加密规则还原成mysql_native_password. 
	先进入mysql容器
		docker exec -it mysql01 bash
	进入mysql
		mysql -u root -p
	更改加密方式
		mysql> ALTER USER 'root'@'localhost' IDENTIFIED BY 'password' PASSWORD EXPIRE NEVER;
	更改密码
		mysql> ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY '123';
	刷新权限
		mysql> FLUSH PRIVILEGES;
一些其他的操作

在这里插入图片描述

docker run ‐‐name mysql1 ‐v /conf/mysql:/etc/mysql/conf.d 
‐e MYSQL_ROOT_PASSWORD=my‐secret‐pw
‐d mysql:tag
把主机的/conf/mysql文件夹挂载到 mysqldocker容器的/etc/mysql/conf.d文件夹里面
改mysql的配置文件就只需要把mysql配置文件放在自定义的文件夹下(/conf/mysql)

在这里插入图片描述

docker run ‐‐name some‐mysql ‐e MYSQL_ROOT_PASSWORD=my‐secret‐pw ‐d mysql:tag 
‐‐character‐set‐server=utf8mb4 
‐‐collation‐server=utf8mb4_unicode_ci
指定mysql的一些配置参数,现在是无配置文件的启动,将编码设置成utf-8
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

ReflectMirroring

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值