一.为什么要用Docker
Docker 可以把开发环境直接封装转移给运维,运维直接部署封装后的环境就可以,而且docker 可以实现虚拟隔离应用环境的功能,并且开销比虚拟机小
1.什么是Docker
Docker 是一个开源的应用容器引擎,开发者可以打包自己的应用到容器里,然后迁移到其他机器的docker应用中,可以实现快速部署。如果出现的故障,可以通过镜像,快速恢复服务
2.docker的思想
Docker采用集装箱思想
意思是将需要的内容和环境打包成一个个集装箱,所有的集装箱都可以上传到码头,当有人需要某个环境时,就从码头上拉取这个集装箱就可以 。码头的概念类似Maven仓库
Docker的隔离性
docker在运行集装箱中的内容时,会在linux内核中,单独的开辟一个单元,不会影响到其他程序
Docker的标准化
docker 提供了一系列的命令,帮助我们去创建,拉取集装箱
二.Docker的安装和配置
1.环境准备
操作系统:CentOs
软件源: 阿里云镜像
2.安装docker
可以参考: https://binghe.blog.csdn.net/article/details/105480007
-
安装依赖
yum -y install yum-utils device-mapper-persistent-data lvm2
-
安装软件源
yum-config-manager --add-repp http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
-
安装docker-ce
yum clean all
清除缓存yum makecache fast
本地缓存yum -y install docker-ce
安装docker -
检测是否安装成功
systemctl start docker
docker version
-
查看当前所有镜像
docker images
-
查找镜像
docker run 镜像名称
3.仓库,镜像,容器的关系和区别
docker的整个生命周期有3部分组成:仓库(repository)+镜像(image)+容器(container)
**仓库:**包含多个镜像的仓库,可以从仓库中拉取镜像,也可以将镜像推送到仓库
镜像:从仓库中拉取镜像,镜像是文件。这里的文件包含可执行文件,依赖软件,库文件,配置文件等等,也就是一个镜像可以包含一个完整的linux操作系统环境,里面仅安装了mysql或用户需要的其他应用程序
**容器:**由镜像创建容器,类似于给类实例化对象。docker容器类似于虚拟机,可以执行包含启动,停止,删除等。每个容器间是相互隔离的。容器中会运行特定的运用,包含特定应用的代码及所需要的依赖文件。可以把容器看作是一个linux环境(包含root用户权限,进程空间,用户空间和网络代码)和运行在其中的应用程序
4.拉取镜像
国内网址: https://hub.daocloud.io/repos/47f127d0-8f1d-4f91-9647-739cf3146a04 选择对应的镜像地址
命令:> docker pull 镜像名
5.镜像的使用
-
运行容器
docker run [options] 镜像名称 | 镜像标记
其中: options 可以为
-d :后台运行容器,并返回ID
-p : 指定端口映射 格式: 主机端口:容器端口
–name: 为容器指定一个名称
–volumn,-v:绑定一个卷
例如: docker run -d -p 8081:8080 --name tomcat 镜像名称(或者ID)
-
查看容器
docker ps
-
启动容器
docker start 容器名称
-
停止容器
指定 :docker stop 容器ID
所有:docker stop $(docker ps -qa)
-
查看所有容器
docker ps -a
-
查看运行的容器ID
docker ps -qa
-
删除容器
指定: docker rm 容器ID
所有:docker rm $(docker ps -qa)
-
删除镜像
指定: docker rmi 镜像ID
所有: docker rmi $(docker ps -qa)
三.部署springboot项目
SpringBoot项目运行时需要用到Mysql,Tomcat,jdk或jre
1.拉取Mysql容器
拉取并创建容器: docker run -d -p 3307:3306 --name mysql -e MYSQL_ROOT_PASSWORD=root daocloud.io/library/mysql:8.0.21
MYSQL_ROOT_PASSWORD=root 设置 root 用户的密码
2.修改pom文件
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
<!-- 从依赖信息里移除 Tomcat配置 -->
<exclusions>
<exclusion>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-tomcat</artifactId>
</exclusion>
</exclusions>
</dependency>
3.修改启动类
继承 SpringBootServiceInitializer
重写 configure 方法: return builder.sources(启动类名.class)
4.修改springboot 中 mysql的配置信息
5.然后将项目重新达成war包,上传到服务器
6.配置到tomcat中
docker cp 项目.war tomcat的容器ID:/user/local/tomcat/webapps 下
然后 就可以访问咯
四.数据卷的使用
1.数据卷是干什么的?
现在的问题:
我们在部署项目的的时候会将war包复制到容器内,运行中产生的数据都在容器中,一旦容器删除,数据就会丢失,如果部署很多容器,每次都需要进入容器中进行配置?能不能外部进行配置,并实现数据共享?
我们的需求是:
我们希望数据可以持久化,即使删除掉容器,我们的数据还在,Docker容器产生的数据,能同步到本地,容器之间可以直接以数据数据共享
解决方案:
数据卷,也就是卷技术
卷技术就是为了实现数据的持久化和同步操作,容器间也是可以是数据共享的
2.数据卷的使用
-
创建数据卷
docker volume create 数据卷名称 # 默认存放目录 /var/lib/docker/volumes
-
查看数据卷的详细信息
docker volume inspect 数据卷名
-
查看全部数据卷
docker volume ls
-
使用数据卷管理容器
关联数据卷和容器:卷下的数据会与容器中的进行同步
方法一:
数据卷存放在默认目录下 : /var/lib/docker/volumes
docker run -d -p 8081:8080 --name tomcat -v tomcat_vol:/usr/local/tomcat/webapps b2
# 创建tomcat 容器和数据卷关联
方法二:
docker run -d -p 8081:8080 --name tomcat -v 指定目录下:/usr/local/tomcat/webapps b2
-
删除卷
docker volume rm 数据卷名称