前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >专栏 >k8s系列教程-docker基础知识

k8s系列教程-docker基础知识

作者头像
六个核弹
发布于 2022-12-23 13:20:38
发布于 2022-12-23 13:20:38
44300
代码可运行
举报
运行总次数:0
代码可运行

认识docker

docker是Docker.inc 公司开源的一个基于LXC技术之上构建Container容器引擎技术,Docker基于容器技术的轻量级虚拟化解决方案,实现一次交付到处运行。docker实现程序集装箱的概念,把我们需要交付的内容集装聚合成一个文件(镜像文件)直接交付。

docker 基本原理

docker 架构图:

从架构图中我们可以看出,docker有三大核心,包括容器,仓库,镜像

  • 镜像(image):文件的层次结构,以及包含如何运行容器的元数据
  • 容器(container):容器是镜像创建的运行实例,它可以被启动、开始、停止、删除。每个容器都是相互隔离的、保证安全的平台。可以把容器看作是一个简易版的linux环境,Docker利用容器来运行应用
  • 仓库(repository):仓库是集中存放镜像文件的场所,仓库注册服务器上往往存放着多个仓库,每个仓库中又保存了很多镜像文件,每个镜像文件有着不同的标签。

docker 具有如下特性:

  • 文件系统隔离:每个进程容器运行在完全独立的根文件系统中
  • 资源限制:每个进程容器运行在自己的网络命名空间中,拥有自己的虚拟接口和ip地址等
  • 写时复制:由于镜像采用层式文件系统,所以采用写时复制方式创建镜像的根文件系统,这让部署变得极其快捷,并且节省内存和硬盘空间
  • 日志记录:docker会收集和记录每个进程容器的标准流,用于实时检索或批量检索。不消耗本地io
  • 变更管理:容器文件系统的变更可以提交到新的镜像中,并可以重复使用以创建更多容器。
  • 交互式shell:docker可以分配一个虚拟终端并关联到任何容器的标准输入上。
  • namespace隔离:每个进程容器运行在自己的网络命名空间里,拥有自己的虚拟接口和ip地址等

docker 工作流程图:

docker 工作流程大体分为三步:

  • build:制作镜像,镜像如同一个集装箱,封装了包括文件,运行环境等资源
  • Ship: 运输镜像,将制作好的镜像上传到仓库中,以便拉取
  • Run: 运行镜像,通过镜像创建一个容器

docker容器及镜像结构:

Docker 支持通过扩展现有镜像,创建新的镜像,新镜像是从 base 镜像一层一层叠加生成的,每新增一个应用,就会叠加一层镜像。镜像分层的好处就是共享资源,比如说有多个镜像都从相同的 base 镜像构建而来,那么 Docker 只需在磁盘上保存一份 base 镜像, 同时内存中也只需加载一份 base 镜像,就可以为所有容器服务了。

当容器启动时,一个新的可写层被加载到镜像的顶部,这一层通常被称作“容器层”,“容器层”之下的都叫“镜像层”。所有对容器的添加、删除、还是修改文件都只会发生在容器层中。只有容器层是可写的,容器层下面的所有镜像层都是只读的。

dockers基础操作

docker 原理我们基本普及了,接下来我们进入实战环节。接下来我们将在windows操作系统上安装docker desktop,需要注意的地方就是windows系统不能是家庭版的,需要开启虚拟化,需要安装WSL2。具体的流程我就不介绍了,网上能找到比较多的例子

docker 安装完成之后,我们可以运行一个hello world 镜像测试:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
docker run hello-world

命令行窗口输出拉取镜像运行的日志,接下来对镜像和容器进行查看删除等操作:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
## 查看正在运行的容器
docker ps

## 查看所有容器
docker ps -a 

## 查看镜像
docker images

## 删除镜像

docker rm 容器id

## 删除镜像
docker rmi 镜像id

## 拉取远程仓库镜像
docker pull nginx

## 进入容器
docker exec -it 镜像id /bin/bash

docker 实战

接下来我们创建一个springboot应用并制作成镜像,maven依赖:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<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:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
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的详细教程介绍如何一键远程部署我们的应用。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2022-04-28,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 六个核弹 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
Spring Boot 和 Docker 实现微服务部署
掌握 docker 的安装以及基本的操作,熟悉 Dockerfile 文件创建镜像的方法。
古时的风筝
2019/05/25
6180
IDEA-SpringBoot项目利用docker实现一键打包部署运行
1. 开启docker远程访问 cd /lib/systemd/system sudo vim docker.service
devi
2021/08/19
1.1K0
IDEA-SpringBoot项目利用docker实现一键打包部署运行
使用Maven插件构建Spring Boot应用程序Docker镜像
从构建日志中可以很清晰地看到,一开始下载Maven的依赖配置,随后就开始使用Dockerfile中的构建指令定制镜像,并且将项目根路径作为构建上下文。 另外,在项目的target目录下将会生成一个名为docker的目录:
编程随笔
2019/09/11
1.7K0
使用Maven插件构建Spring Boot应用程序Docker镜像
【玩转腾讯云】TSF使用指南
TSF 全称是腾讯微服务平台 (Tencent Service Framework),它在我的理解中就是整合了微服务组件的各个功能的一站式部署与管理平台,这个平台本身也是免费的,你需要付费的是云服务器的费用。如果你的应用想上云,而且是微服务,不妨考虑TSF,不仅可以减少你的代码开发量而且提供了运维界面。
六个核弹
2021/04/07
9.1K5
使用 Docker 部署 Spring Boot 项目,带劲!!
Docker 一次构建、处处运行及快速启停的特性,在微服务架构中有着举足轻重的地位,具体的概念性的东西就不介绍了,不懂的点击这里阅读 Docker 基础教程。
Java技术栈
2020/12/08
2.1K0
使用 Docker 部署 Spring Boot 项目,带劲!!
怎么把一个Java应用打包成Docker镜像
怎么把Java应用打包成Docker镜像?对熟悉Docker的同学这应该是一个很简单的问题,把项目打包成JAR包然后在Dockerfile里用ADD命令把JAR文件放到镜像里,启动命令设置执行这个JAR文件即可。
KevinYan
2021/09/02
2K0
Jenkins+Docker+SpringCloud微服务持续集成(中)
如果有common公共子工程,那么需要将spring-boot-maven-plugin插件从总工程移动到各个微服务工程,否则common公共子工程继承了总工程之后,spring-boot-maven-plugin插件会报错,因为找不到启动类。
大忽悠爱学习
2022/09/29
5650
Jenkins+Docker+SpringCloud微服务持续集成(中)
Maven插件构建Docker镜像并推送到镜像仓库
Spotify官方已经不再推荐使用docker-maven-plugin,不在进行维护,转而推荐了另外一款由该公司开发的Maven插件dockerfile-maven-plugin。
jwangkun
2021/12/23
2.8K0
7. 死磕 k8s系列之maven安装docker插件
本章我们将学习如何在maven中集成docker插件,通过maven直接打包docker镜像并将之推送到docker仓库中。
彤哥
2020/02/11
1.7K0
教你使用k8s来部署springboot服务
在看到此文章之前,想必你已经知道如何启动一个spring boot应用,知道如何通过docker运行你的spring boot服务。
每周聚焦
2023/03/20
2.8K1
教你使用k8s来部署springboot服务
springboot版本helloworld发布到k8s示例
操作步骤 windows上编写代码 远程linux的docker引擎把代码打成镜像 编写k8s的yaml文件 应用yaml文件,启动服务 前置任务 安装好k8s集群,可参考另一篇文章:Centos7安
kinnylee
2020/10/15
7260
springboot版本helloworld发布到k8s示例
「走进k8s」Docker 的多阶段构建-JavaSpringboot演示(11)
PS:也可以在springboot目录里面放置一个settings.xml文件,在mvn编译的时候连接指定的maven私服,这样就节省效率。
IT架构圈
2019/08/08
1.3K0
「走进k8s」Docker 的多阶段构建-JavaSpringboot演示(11)
08 . Jenkins之SpringCloud微服务+Vue+Docker持续集成
https://www.cnblogs.com/you-men/category/1789332.html
iginkgo18
2020/10/10
9790
08 . Jenkins之SpringCloud微服务+Vue+Docker持续集成
Kubernetes微服务自动化发布系统
实施微服务架构后,原先单一的系统结构统变成了数量众多的微服务应用,开发、测试、运维部署等都会面临不少挑战。在微服务架构下如何提高工程研发效率,确保开发、测试、运维部署等流程上的顺畅,是微服务技术体系能够真正落地产生效益的关键。
用户5927304
2020/09/03
1.8K0
Kubernetes微服务自动化发布系统
k8s微服务接入SkyWalking,怎么玩?
大家好!我是"无敌码农"!前两天我在《分布式链路追踪,要怎么玩下?》这篇文章中给大家分享了关于分布式链路追踪的基本原理和SkyWalking的k8s部署玩法,如果还没来得及看的朋友可以点击上面链接回顾
用户5927304
2021/03/10
1.9K2
k8s微服务接入SkyWalking,怎么玩?
【docker系列】docker之部署springboot项目
本篇主题主要实战如何使用Docker部署springboot项目,那么首先保证服务器上已经安装完docker容器,如果尚未安装请移步《详解阿里云服务器安装docker》文章完成docker安装操作;以下直接搭建springboot项目;以下也是springboot项目中最基本的依赖项;因为我们想测试接口访问,故搭建的是一个web项目,那么我们提供一个controller层
沁溪源
2022/05/06
3.1K0
【docker系列】docker之部署springboot项目
Spring Boot的 Docker打包插件哪个好用
在Spring Boot应用中,我们可以约定不同的标识来定义不同的环境。例如 dev 表示开发环境、test表示测试环境,对应的配置文件为application-dev.yaml、application-test.yaml。我们通过声明spring.profiles.active来激活对应的环境配置,例如激活dev环境时spring.profiles.active=dev。完整的启动命令为:
码农小胖哥
2021/05/14
1.4K0
基于Docker构建安装Git/GitLab,以及制作springboot工程镜像
本地离线存储:绝大多数操作都只需要访问本地文件和资源,不用连网,在本地磁盘上就保存着所有当前项目的历史更新,所以处理起来速度飞快。
艾编程
2020/06/10
4.5K0
SpringBoot-Mysql应用Docker打包部署
直接安装 docker desktop for windows即可,其中还会包含了docker compose。可通过 docker-compose version来验证结果,一般会输出如下信息:
技术路漫漫
2020/06/21
2.3K0
SpringBoot-Mysql应用Docker打包部署
Docker核心概念与使用
Docker(Moby)诞生于2013年,是一款基于 Linux LXC 容器化技术的开源的容器引擎。需要注意的是,2013版原始的开源版本 "Docker" 现在其实不叫 "Docker" 了,而是 "Moby"。这一改变发生在 2017 年的 Docker Con 大会上,因此我们现在常说的 "Docker" 实际上代表的是 Docker 公司,现在市面上所能看到的 Docker 版本通常为 Docker EE(企业版)和 Docker CE(社区版),也就是收费版和免费版本的区别,而现在的 Docker CE 实际上就可以理解为 "Moby"。
CodeZX合一
2024/07/01
2610
推荐阅读
相关推荐
Spring Boot 和 Docker 实现微服务部署
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文