chapter6:SpringBoot与Docker

1. 简介

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

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

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

windows镜像系统原理图:
chapter6:SpringBoot与Docker_第1张图片

Docker镜像系统原理图:
chapter6:SpringBoot与Docker_第2张图片

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):镜像启动后的实例(软件应用)称为一个容器。
chapter6:SpringBoot与Docker_第3张图片
使用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 keywords docker 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

chapter6:SpringBoot与Docker_第4张图片

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

docker pull mysql:latest

查看所有镜像

docker images

在这里插入图片描述

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

删除错误的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的服务。
chapter6:SpringBoot与Docker_第7张图片
使用mysql客户端连接失败,因为没有建立主机3306到docker的mysql容器3306端口的映射关系。
在这里插入图片描述
删除mysql01,重新启动一个建立端口映射关系的mysql容器后,连接成功。

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

在这里插入图片描述

使用客户端连接成功。
chapter6:SpringBoot与Docker_第8张图片
可以使用下面的命令进入容器内部

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容器报错:
chapter6:SpringBoot与Docker_第9张图片
解决方案:

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

解决步骤:

进入tomcat容器的目录

docker exec -it tomcat01 /bin/bash

在这里插入图片描述

进入tomcat/webapps目录, 清除webapps目录下的所有内容.
chapter6:SpringBoot与Docker_第10张图片
将webapps.dist里面的内容复制到webapps目录下面
chapter6:SpringBoot与Docker_第11张图片
再次访问tomcat,成功。
chapter6:SpringBoot与Docker_第12张图片

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

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

在这里插入图片描述
chapter6:SpringBoot与Docker_第13张图片

# 查看防火墙状态 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

在操作过程中还发现一个问题, 启动tomcat容器后, 使用docker ps -a查看到tomcat容器状态是Exited, 说明启动失败了。使用docker logs tomcat01查看启动日志,日志报错:

Cannot find /usr/local/tomcat/bin/setclasspath.sh
This file is needed to run this program

经过查找资料docker运行tomcat报错Cannot find /usr/local/tomcat/bin/setclasspath.sh,可以添加--privileged启动:

docker run --privileged -it --name tomcat01 -d -p 8888:8080 tomcat:latest

你可能感兴趣的:(docker,spring,boot,容器)