docker容器化部署springboot项目

前言

docker安装

下载官网

选择自己的系统

然后安装文档内给的命令按顺序执行即可。设置仓库,安装docker.

一、更换镜像源

一般情况下,docker原本自带的镜像网站不一定连的上,就很容易导致下载镜像失败,因此需要换源.

创建/etc/docker/daemon.json并填入数据

bash 复制代码
{
"registry-mirrors" : [
"https://hub-mirror.c.163.com",
"http://f1361db2.m.daocloud.io",
"https://docker.mirrors.ustc.edu.cn",
"https://mirror.ccs.tencentyun.com",
"https://registry.docker-cn.com",
"http://hub-mirror.c.163.com",
"https://docker.mirrors.ustc.edu.cn",
    "https://jkfdsf2u.mirror.aliyuncs.com",
    "https://registry.docker-cn.com"
  ],
  "insecure-registries" : [
    "docker-registry.zjq.com"
  ],
  "log-driver": "json-file",
  "log-opts": {
    "max-size": "10m",
    "max-file": "10"
  },
  "data-root": "/data/docker"
}

二、通过镜像安装软件基本步骤

2.1、搜索镜像

官网搜索

镜像搜索官网

在官网输入要搜索的关键字,搜索之后可以选择不同的镜像版本,然后复制命令

第一个就是要找的软件,点击进去,里面有很多版本,右边就有拉取镜像的命令

特定版本的会在软件后方加上冒号和版本

命令行搜索

bash 复制代码
docker search xxx

2.2、拉取镜像

上一步获取到镜像名或者复制到命令之后,需要进行镜像拉取,命令格式如下:

bash 复制代码
docker pull xxx

加入需要拉取aaa版本的tomcat,则命令如下:(不指定版本则把:aaa去掉)

bash 复制代码
docker pull tomcat:aaa

2.3、查看镜像

查看全部镜像

bash 复制代码
docker images

查看xxx镜像

bash 复制代码
docker images xxx

2.4、启动镜像生成容器(执行完这一步已经可以用了)

启动xxx镜像生成容器,容器名为mytomcat,并将容器内的8080端口映射到当前服务器的8082端口,启动之后生成终端

bash 复制代码
docker run -it -p 8082:8080 --name mytomcat xxx

-p,主机端口号:docker容器端口号

-P,随机分配端口

-i,交互

-t,终端

-d,后台运行

--name,给容器起名

2.5、停止容器

停止名为xxx的容器,xxx也可以传ID

bash 复制代码
docker stop xxx

停止所以容器,下方是两个命令的组合,一个命令查询并返回所有正在运行容器的简短ID

bash 复制代码
docker stop $(docker ps -q)

2.6、移除容器

移除名为xxx的容器,xxx也可以传ID(需要先停止容器)

bash 复制代码
docker rm xxx

-f,强制删除

-v,同时删除容器关联的存储卷

2.7、移除镜像

移除名为xxx的容器,xxx也可以传ID(需要先停止容器)

bash 复制代码
docker image rm xxx

-f,强制移除,有时候不同镜像之间有链接关系,需要强制移除

三、构建自定义镜像-编写Dockerfile

Dockerfile是用来构建docker镜像的文本文件,是一个由一条条构建镜像所需的指令和参数构成的脚本文件。

3.1、基础知识

每条关键字指令必须全部大写字母

指令从上往下顺序执行

#代表注释

每条指令都会在原镜像基础上创建一个新的镜像层并对镜像进行提交

Dockerfile中定义了进程所需要的一切东西,包括运行环境、依赖...

3.2、Dockerfile执行流程

  1. docker从基础镜像运行一个容器(也就是最前面的FROM)
  2. 往下执行一条指令,并对容器做出修改
  3. 执行类似docker commit的操作提交一个新的镜像层
  4. docker再基于刚提交的镜像运行一个容器
  5. 执行dockerfile的下一条指令直到全部指令都执行完毕

3.3、Dockerfile文件语法

最基础的Dockerfile大概包含:FROM,RUN,an,CMD

FROM

基本在Dockerfile第一行,指定基础镜像模板

RUN

利用镜像构建容器的时候执行的命令行命令,支持两种写法。

  • RUN 终端命令,比如我需要构建一个包含vim的linux系统的容器,这个时候就可以用linux作为基础镜像,然后在RUN关键字后面加上下载vim的命令来下载vim,如RUN yum -y install vim
  • RUN ["文件","参数","参数"],命令较多的情况下可以通过脚本的方式传递命令

EXPOSE

当然容器对外暴露的默认端口,也可以后续通过镜像构建容器的时候通过参数修改

WORKDIR

指定进入容器之后的落脚点目录,也就是打开容器就打开到这个指定的目录

ENV

在构建镜像过程中设置环境变量,和window的环境变量差不多意义

ADD

将宿主机目录下的文件拷贝进镜像且自动处理URL和解压tar压缩包

COPY

类似ADD,拷贝文件和目录到镜像中。将从构建上下文目录中《源路径》的文件/目录复制到新的一层的镜像内的《目标路径》

VOLUME

CMD

指定容器启动后要干的事情

用法上和RUN相似

可以有多个,但只有最后一个生效,会被docker run后面的参数覆盖。

RUN是在build的时候运行,CMD是在run的时候运行。

如下,会在/app目录下执行ls命令,然后参数为-l,ls命令需要指定命令的全路径

bash 复制代码
CMD ["/usr/bin/ls", "-l", "/app"]

ENTRYPOINT

指定一个容器启动时要运行的命令

类似CMD,但是ENTRYPOINT不会被docker run后面的命令覆盖,而且这些命令行参数会被当做参数送给ENTRYPOINT指令指定的程序。

和CMD一起使用的时候,CMD变成传参给ENTRYPOINT
需要确保命令不被覆盖就使用这个命令,例如将项目打包的启动命令一般会带java -jar就用这个

bash 复制代码
ENTRYPOINT ["java", "-jar", "/xxx.jar"]

3.4、构建镜像

用当前目录下的Dockerfile文件构建镜像

bash 复制代码
docker build -t xxx .

-t选项为镜像指定一个标签(或名称),这里是xxx,.代表Dockerfile文件位于当前目录(也可指定路径)

四、Docker-compose容器编排

一个dockerfile生成一个镜像,一般情况下一个服务就需要生成一个镜像,而现在一个网站部署的时候大概率需要用到多个服务,这个时候就需要用到Docker-compose。

Docker-compose.yml文件(通常命名为 docker-compose.yml)的主要作用是定义和运行多容器 Docker 应用程序。可以通过一个Docker-compose文件一次性启动并管理这些服务。容器之间的先后启动关系等。

和spring容器管理bean差不多是同一个原理,Docker-compose管理容器。

4.1、安装Docker Compose

下载官网

三步即可完成安装,复制下载命令执行,建立软链接。

4.2、使用步骤

编写Dockerfile定义各个微服务应用并构建出相应的镜像文件。

使用docker-compost.yml定义一个完整业务单元,安排好整体应用中的各个容器服务。

最后,执行docker-compose up命令来启动并运行整个应用程序,完成一键部署上线。

待续

相关推荐
摇滚侠8 分钟前
Spring Boot 3零基础教程,WEB 开发 整合 Thymeleaf 笔记36
java·spring boot·笔记
optimistic_chen1 小时前
【Java EE进阶 --- SpringBoot】Mybatis - plus 操作数据库
数据库·spring boot·笔记·java-ee·mybatis·mybatis-plus
weixin_405023371 小时前
使用docker 安装部署easy-mock
运维·docker·容器
Asuncion0071 小时前
Docker核心揭秘:轻量级虚拟化的革命
服务器·开发语言·docker·云原生
ZLRRLZ1 小时前
【Docker】Docker Image(镜像)
运维·docker·容器
小熊h1 小时前
Kubernetes(K8s) —— 部署(保姆级教程)
云原生·容器·kubernetes
来旺1 小时前
互联网大厂Java面试全解析及三轮问答专项
java·数据库·spring boot·安全·缓存·微服务·面试
摇滚侠2 小时前
Spring Boot 3零基础教程,yml文件中配置和类的属性绑定,笔记15
spring boot·redis·笔记
thginWalker2 小时前
使用Spring Boot构建消息通信层
spring boot
lang201509282 小时前
Spring Boot 外部化配置最佳实践指南
java·spring boot