您现在的位置是:首页 >学无止境 >chapter6:SpringBoot与Docker网站首页学无止境

chapter6:SpringBoot与Docker

crysw 2024-07-01 11:59:50
简介chapter6:SpringBoot与Docker

1. 简介

Docker是一个开源的轻量级应用容器引擎, 可以让开发者打包他们的应用以及依赖包到一个轻量级、可移植的容器中,然后发布到Linux机器中实现虚拟化。(沙箱机制)

Docker支持将软件编译成一个镜像;然后在镜像中各种软件做好配置,将镜像发布出去,其他使用者可以直接使用这个镜像。运行中的这个镜像称为“容器”,容器启动非常快速。

类似windows系统里面的ghost镜像操作系统,安装好后什么都有了。

windows镜像系统原理图:
在这里插入图片描述

Docker镜像系统原理图:
在这里插入图片描述

2. 核心概念

docker主机(Host): 安装了Docker程序的机器(Docker直接安装在操作系统上)

docker客户端(Client):连接docker主机进行命令或其他操作。

docker api: https://docs.docker.com/engine/api/

docker仓库(Registry):保存各种打包好的软件镜像。

Docker Hub(https://hub.docker.com) 提供了丰富的镜像集合给我们使用。

docker镜像(Images):软件打包好的镜像,放在docker仓库中。

docker容器(Container):镜像启动后的实例(软件应用)称为一个容器。
在这里插入图片描述
使用Docker的步骤:
1)安装Docker
2)去Docker仓库查找软件镜像
3)使用Docker运行软件镜像,这个镜像会产生一个Docker容器。
4)对容器的启动停止就是对软件的启动停止。

3. docker安装

1)安装linux虚拟机

VMWare安装CentOs7系统及使用

VMWare、VirtualBox安装;
导入虚拟机文件 CentOS-7.ova;
双击启动Linux虚拟机;
使用客户端连接Linux服务器;(secureCRT、Xshell、smarTTY、mobaXterm…)
设置虚拟机网络,桥接网络=》选好网卡=》接入网线;
设置好网络后使用命令重启虚拟机的网络 service network restart;
查看Linux的IP地址 ifconfig;ip addr;

2)在linux虚拟机上安装Docker

查看centos版本, docker要求centos系统的内核版本高于3.10

uname -r
#输出结果 3.10.0-1127.el7.x86_64

升级软件包及内核(选做)

yum update

安装docker, 启动docker

# 安装docker
yum install docker
# 启动docker
systemctl start docker
# 查看docker版本
docker -v
# 将docker服务设为开启启动
systemctl enable docker
# 停止docker
systemctl stop docker

4. docker操作

搜索软件镜像 ➡ 下载软件镜像 ➡ 运行软件镜像(产生一个运行的容器);

操作命令说明
检索镜像docker search keywordsdocker search mysql ;去docker hub上检索镜像的详细信息;
拉取镜像docker pull 镜像名:tag:tag是可选项,表示标签,多为软件的版本,默认是latest;
查看本地镜像列表docker images
删除镜像docker rmi image-id删除指定的本地镜像
运行镜像docker run --name container-name -d image-name–name: 自定义容器名称;
-d: 后台运行;
image-name: 指定镜像模板
比如:docker run --name mysql -d mysql
查看运行的镜像列表docker ps加上参数-a可以查看所有容器
停止docker stop container-name/id停止当前运行的容器,可以根据指定容器名称或容器ID停止;
启动docker start container-name/id启动容器;
删除docker rm container-name/id删除指定容器;
端口映射-p 6379:6379-p:主机端口映射到容器内部的端口;
比如:docker run --name myredis -p 6379:6379 -d docker.io/redis
容器日志docker logs container-name/id

更多操作命令查看 : https://docs.docker.com/engine/reference/commandline/docker/

5. 安装mysql镜像

查找mysql镜像, 同docker hub官网搜索一样

docker search mysql

在这里插入图片描述

下载mysql镜像 , tag指定版本, 默认latest

docker pull mysql:latest

查看所有镜像

docker images

在这里插入图片描述

启动mysql容器 docker run --name mysql01 -d mysql:latest发现没有成功启动,这种启动方式不对。
在这里插入图片描述
查看mysql容器启动的错误日志 docker logs **e5e1e3f963085fa113330af344需要配置密码参数。
在这里插入图片描述
查看docker官方文档有正确的启动方式
在这里插入图片描述

删除错误的mysql容器,重启启动一个新的mysql容器.

# 删除mysql01
docker rm 04675268478f5e110e01d6ad7eaf1403893d74e5e1e3f963085fa113330af344
# 启动mysql
docker run --name mysql01 -e MYSQL_ROOT_PASSWORD=123456 -d mysql:latest
# 查看本地的容器
docker ps -a

在这里插入图片描述
用mysql客户端连接docker启动的mysql容器, 因为我的虚拟机系统之前安装过mysql,我先关闭原生mysql的服务。
在这里插入图片描述
使用mysql客户端连接失败,因为没有建立主机3306到docker的mysql容器3306端口的映射关系。
在这里插入图片描述
删除mysql01,重新启动一个建立端口映射关系的mysql容器后,连接成功。

docker run --name mysql01 -e MYSQL_ROOT_PASSWORD=123456 -d -p 3306:3306 mysql:latest

在这里插入图片描述

使用客户端连接成功。
在这里插入图片描述
可以使用下面的命令进入容器内部

docker exec -it mysql01 /bin/bash

6. 安装tomcat镜像

搜索tomcat镜像

docker search tomcat

拉取tomcat镜像

docker pull tomcat
docker images

根据tomcat镜像启动容器

docker run --name tomcat01 -d tomcat:latest
docker ps -a
docker stop tomcat01
docker start tomcat01
docker stop tomcat01
# 必须是已经停止运行的容器才允许删除
docker rm tomcat01
# 将主机8888端口映射到容器的8080端口
docker run --name tomcat01 -d -p 8888:8080 tomcat:latest

在虚拟机外面主机浏览器访问 http://192.168.1.103:8888/ , 发现访问tomcat容器报错:
在这里插入图片描述
解决方案:

https://blog.csdn.net/qq_45589050/article/details/104559125

解决步骤:

进入tomcat容器的目录

docker exec -it tomcat01 /bin/bash

在这里插入图片描述

进入tomcat/webapps目录, 清除webapps目录下的所有内容.
在这里插入图片描述
将webapps.dist里面的内容复制到webapps目录下面
在这里插入图片描述
再次访问tomcat,成功。
在这里插入图片描述

一个镜像可以启动多个容器

docker run --name tomcat02 -d -p 8889:8080 tomcat:latest

在这里插入图片描述
在这里插入图片描述

# 查看防火墙状态 s
ervice firewalld status
# 关闭防火墙  
service firewalld stop
# 查看容器日志 
docker logs container-name/container-id

# 关闭防火墙
systemctl stop firewalld.service
# 禁止防火墙开机启动
systemctl disable firewalld.service
# 启动docker
systemctl start docker
# 重启docker
systemctl restart docker
风语者!平时喜欢研究各种技术,目前在从事后端开发工作,热爱生活、热爱工作。