docker是Docker.inc 公司开源的一个基于LXC技术之上构建Container容器引擎技术,Docker基于容器技术的轻量级虚拟化解决方案,实现一次交付到处运行。docker实现程序集装箱的概念,把我们需要交付的内容集装聚合成一个文件(镜像文件)直接交付。
docker 架构图:
从架构图中我们可以看出,docker有三大核心,包括容器,仓库,镜像
docker 具有如下特性:
docker 工作流程图:
docker 工作流程大体分为三步:
docker容器及镜像结构:
Docker 支持通过扩展现有镜像,创建新的镜像,新镜像是从 base 镜像一层一层叠加生成的,每新增一个应用,就会叠加一层镜像。镜像分层的好处就是共享资源,比如说有多个镜像都从相同的 base 镜像构建而来,那么 Docker 只需在磁盘上保存一份 base 镜像, 同时内存中也只需加载一份 base 镜像,就可以为所有容器服务了。
当容器启动时,一个新的可写层被加载到镜像的顶部,这一层通常被称作“容器层”,“容器层”之下的都叫“镜像层”。所有对容器的添加、删除、还是修改文件都只会发生在容器层中。只有容器层是可写的,容器层下面的所有镜像层都是只读的。
docker 原理我们基本普及了,接下来我们进入实战环节。接下来我们将在windows操作系统上安装docker desktop,需要注意的地方就是windows系统不能是家庭版的,需要开启虚拟化,需要安装WSL2。具体的流程我就不介绍了,网上能找到比较多的例子
docker 安装完成之后,我们可以运行一个hello world 镜像测试:
docker run hello-world
命令行窗口输出拉取镜像运行的日志,接下来对镜像和容器进行查看删除等操作:
## 查看正在运行的容器
docker ps
## 查看所有容器
docker ps -a
## 查看镜像
docker images
## 删除镜像
docker rm 容器id
## 删除镜像
docker rmi 镜像id
## 拉取远程仓库镜像
docker pull nginx
## 进入容器
docker exec -it 镜像id /bin/bash
接下来我们创建一个springboot应用并制作成镜像,maven依赖:
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>com.spotify</groupId>
<artifactId>dockerfile-maven-plugin</artifactId>
<version>1.3.6</version>
<configuration>
<repository>${project.artifactId}</repository>
<buildArgs>
<JAR_FILE>target/${project.build.finalName}.jar</JAR_FILE>
</buildArgs>
<tag>${project.version}</tag>
</configuration>
</plugin>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
然后在pom文件的同级目录下创建 Dockerfile:
FROM openjdk:8-jdk-alpine
ARG JAR_FILE
COPY ${JAR_FILE} app.jar
ENTRYPOINT ["java","-jar","/app.jar"]
dockerfile-maven-plugin
是制作镜像的maven插件,插件和build默认绑定,执行build阶段运行该插件,push绑定到deploy阶段。
而dockerfile是制作镜像的描述文件。Dockerfile是一个文本文件,其内包含了一条条的指令(Instruction),用于构建镜像。每一条指令构建一层镜像,因此每一条指令的内容,就是描述该层镜像应当如何构建。Dockerfile参数说明:
在我们执行 mvn package
指令时会在命令行输出整个docker镜像的制作过程,并在后续能在docker中通过docker images 查看该镜像。制作好的镜像只是存在我们的本地中,我们可以推到远程仓库到其他机器上运行,而几大云平台都提供了免费的远程私有仓库,比如阿里云效和腾讯云coding。后续如果有时间会出Jenkins+docker+springboot的详细教程介绍如何一键远程部署我们的应用。
扫码关注腾讯云开发者
领取腾讯云代金券
Copyright © 2013 - 2025 Tencent Cloud. All Rights Reserved. 腾讯云 版权所有
深圳市腾讯计算机系统有限公司 ICP备案/许可证号:粤B2-20090059 深公网安备号 44030502008569
腾讯云计算(北京)有限责任公司 京ICP证150476号 | 京ICP备11018762号 | 京公网安备号11010802020287
Copyright © 2013 - 2025 Tencent Cloud.
All Rights Reserved. 腾讯云 版权所有