Docker入门教程:本地打包docker镜像

article/2025/3/12 13:40:49

什么是Docker?

Dockers是基于Go语言开发的虚拟容器技术。以前我们部署应用通常是将源代码打包成一个jar包运行,这样就会受到运行环境、配置环境的限制,而且程序也不能跨服务器运行。Docker基于Linux容器技术,将Java源代码、运行环境像MySQL、redis、jdk等通通打包成一个镜像,实现“一次镜像,处处运行”。极大的提高的应用的移植性以及部署的效率。

 简单来说,docker是一个解决了运行环境和配置问题的软件容器,方便做持续集成并有助于整体发布的容器虚拟化技术。

容器与虚拟机的区别

  • 传统虚拟机技术是虚拟出一套硬件后,在其上运行的一个完整的操作系统,在该系统上在运行所需应用进程。而Docker不需要捆绑一整套的操作系统,它只需要软件工作所需的库资源和设置。

  • Docker容器是在操作系统层面上实现虚拟化,直接复用本地主机的操作系统,而传统虚拟机则是在硬件层面实现虚拟化;Docker依赖于Linux内核环境,其实本质上是在已经运行的Linux下制造一个隔离的文件环境。

优点:

  •  更轻量:基于容器的虚拟化,仅包含业务运行所需的runtime环境。
  •  更高效:无操作系统虚拟化开销。
  •  更灵活:容器隔离,devoops理念。

Docker的组成

         docker中有三个基本概念:

  • 镜像(image):一个只读的模板,可以用来创建Docker容器。类似于Student类

  • 容器(Container):容器是镜像创建的运行实例。容器是镜像运行时的实体,为镜像提供了一个标准的和隔离的运行环境。它可以被启动、停止、删除,每个容器之间都是隔离的。类似于stu实例对象

  • 仓库(repository):存放镜像文件的地方。比如maven仓库是存放jar包的地方。

类比于--》Student stu = new Student();

docker安装

Linux上安装:

# 首先安装 Docker
yum -y install docker# 然后启动 Docker 服务
service docker start# 测试安装是否成功
docker -v# 配置阿里云镜像加速
sudo mkdir -p /etc/docker
sudo tee /etc/docker/daemon.json <<-'EOF'
{"registry-mirrors": ["https://******.mirror.aliyuncs.com"]
}
EOF
sudo systemctl daemon-reload
sudo systemctl restart docker

Windows上安装:下载Docker Desktop,配置WSL 

docker run 的执行流程及原理

执行流程:

docker是一个client-server结构的系统,docker的守护进程运行在主机上。dockerServer接收到docker-client的命令,就会执行这个命令。

容器基本操作

docker 中的容器就是一个轻量级的虚拟机,是镜像运行起来的一个状态,本文就先来看看容器的基本操作。

镜像就像是一个安装程序,而容器则是程序运行时的一个状态。

  • 查看容器
#查看正在运行容器
docker ps#查看所有容器
docker ps -a#查看最新创建的容器
docker ps -l
  • 创建容器
#创建容器
docker create 镜像--创建一个 nginx 容器:docker create nginx--指定容器的name为nginx:docker create --name=nginx nginx
#创建并启动一个容器
docker run 镜像--docker run --name nginx1 -d -p 8080:80 nginx--name 含义和上文一样,表示创建的容器的名字,-d 表示容器在后台运行,-p 表示将容器的 80 端口映射到宿主机的 8080 端口
  • 启动关闭容器
#启动容器
docker start id|name
#重启容器
docker restart id|name
#关闭容器
docker stop id|name
  • 删除容器
#单个删除
docker rm id|name
#批量删除
docker rm $(docker ps -a -q)
  • 查看容器信息、日记
#容器详情
docker inspect id|name#查看容器进程
docker top #查看你容器日记
docker logs id|name-f :实时日记-t : 显示时间-tail: 控制输出行数
  • 容器导入导出
#导出一个已经创建的容器导到一个文件
docker export -o 文件名.tar 容器id
#将文件导入为镜像
docker import 文件名.tar 镜像名:镜像标签

        docker export -o image-test.tar 1ffcd3e4a201

镜像的基本操作

        镜像是容器运行的基础,容器是镜像运行后的形态。镜像是一个包含程序运行必要以来环境和代码的只读文件,它采用分层的文件系统,将每一层的改变以读写层的形式增加到原来的只读文件上。

  • 查看所有镜像
docker images

  1. TAG: TAG用于区分同一仓库中的不同镜像,默认为latest。

  2. IMAGE ID: IMAGE ID是镜像的一个唯一标识符。

  3. CREATED: CREATED表示镜像的创建时间。

  4. SIZE: SIZE表示镜像的大小。

  5. REPOSITORY:仓库名称,仓库一般用来存放同一类型的镜像。仓库的名称由其创建者指定。如果没有指定则为 <none>

  •  搜索镜像
docker search name
  • 下载镜像
docker pull name:版本

  版本可以在Docker hub上查看 

  • 删除镜像
docker rmi id|name

Dockerfile

Dockerfile是用来构建docker镜像的构建文件。

其实Dockerfile就是一个普通的文本文件,其中包含了一条条的指令,每一条指令都会构建一层。

 dockerfile指令

FROM 		#基础镜像,一切从这里开始构建
MAINTAINER	#镜像是谁写的,姓名+邮箱
RUN			#镜像构建时需要运行的命令
ADD			#步骤,tomcat镜像,这个tomcat压缩包;添加内容
WORKDIR		#镜像工作目录
VOLUME		#挂载的目录
EXPOSE		#暴露端口配置
CMD			#指定这个容器启动的时候要运行的命令,只有最后一个会生效,可被替代
ENTRYPOINT	#指定这个容器启动的时候要运行的命令,可以追加命令
ONBUILD		#当构建一个被继承DockerFile 这个时候就会运行 ONBUILD 的指令,触发指令
COPY		#类似ADD,将我们的文件拷贝至镜像中
ENV			#构建的时候设置环境变量

  1. FROM nginx 表示该镜像的构建,以已有的 nginx 镜像为基础,在该镜像的基础上构建。

  2. MAINTAINER 指令用来声明创建镜像的作者信息以及邮箱信息,这个命令不是必须的。

  3. RUN 指令用来修改镜像,算是使用比较频繁的一个指令了,该指令可以用来安装程序、安装库以及配置应用程序等,一个 RUN 指令执行会在当前镜像的基础上创建一个新的镜像层,接下来的指令将在这个新的镜像层上执行,RUN 语句有两种不同的形式:shell 格式和 exec 格式。本案例采用的 shell 格式,shell 格式就像 linux 命令一样,exec 格式则是一个 JSON 数组,将命令放到数组中即可。在使用 RUN 命令时,适当的时候可以将多个 RUN 命令合并成一个,这样可以避免在创建镜像时创建过多的层。

  4. COPY 语句则是将镜像上下文中的 hello.html 文件拷贝到镜像中。

命令解释:

  1. -t 参数用来指定镜像的命名空间,仓库名以及 TAG 等信息。

  2. 最后面的 . 是指镜像构建上下文。

本地打包docker镜像

下载安装Docker Desktop,配置完成后即可在windows CMD上操作docker命令

编写一个简单的springboot项目,提供一个helloworld接口

@RestController
public class HelloWorld {@GetMapping("/hello")public String helloImages() {return "hello images!";}}

使用maven插件打包--install--,在target包下可以看得到生成的jar包。

 

 编写Dockerfile文件

# 基础镜像使用java
FROM java:8#作者
MAINTAINER CJC#将jar包添加到容器中并更名为: hello-docker-image.jar
ADD docker-image-test-0.0.1-SNAPSHOT.jar hello-docker-image.jar#运行jar包
RUN bash -c 'touch hello-docker-image.jar'
ENTRYPOINT ["java","-jar","hello-docker-image.jar"]#暴露端口
EXPOSE 8080

 将jar包和dockerfile文件置于同一目录下执行命令,构建镜像:

docker build -t Name:TagName .> build -t hello-docker-image:V1.0 .-t参数指定构建成后,镜像的仓库、标签等,
Name 给镜像取的名字
TagName 给镜像取的标签
最后的 .  表示 Dockerfile 文件在当前目录下 

 查看镜像:docker images

 创建并启动容器:docker run -d -p 8080:8080 6e7772b68332

 docker desktop上可以看到容器正在运行:

docker数据卷操作

一般情况下,当我们需要将数据从宿主机拷贝到容器中使用的都是docker的拷贝命令。数据卷可以避免这种麻烦的操作。

数据卷可以实现容器和宿主机之间的数据共享,简单来说数据卷就是在宿主机和容器之间搭建的一个映射的工作区,两者可以同步修改。

docker run -itd --name nginx -v /Users/sang/blog/docker/docker/:/usr/share/nginx/html/ -p 80:80 bc26f1ed35cf

 这样便是将宿主机中的 /Users/sang/blog/docker/docker/ 目录挂载到容器的 /usr/share/nginx/html/ 目录下。接下来读者只需要在 /Users/sang/blog/docker/docker/ 目录下添加 html 文件,或者修改 html 文件,都能在 nginx 访问中立马看到效果。

查看所有的数据卷:

docker volume ls

查看数据卷详情

docker volume inspect

删除数据卷

docker volume rm

http://chatgpt.dhexx.cn/article/4QKDfREC.shtml

相关文章

Docker 镜像

&#xff08;一&#xff09;下载实例 &#xff08;二&#xff09;镜像基本操作 备注&#xff1a; 相同名称的镜像可以存在多个&#xff0c;即需要不同的tags版本 &#xff08;三&#xff09;使用 Dockerfile 定制镜像 &#xff08;1&#xff09;介绍 镜像的定制实际上就是定…

Docker (一)之docker镜像库地址

一、关于docker的镜像问题&#xff1a; 当我们想要去拉取一个镜像的时候&#xff0c;初始的时候会去从国外的镜像库里面拉取&#xff0c;速度可想而知&#xff1b;这时我们需要给docker配置一个国内的镜像库&#xff1a; 目前发现docker有2个地方可以配置镜像库的地址&#x…

Docker镜像发布到阿里云和私有库

目录 一、Docker镜像 &#xff08;一&#xff09;概述 &#xff08;二&#xff09;Docker镜像加载原理 &#xff08;三&#xff09;镜像分层结构优势 &#xff08;四&#xff09;重点理解 &#xff08;五&#xff09;docker commit操作实例 &#xff08;六&#xff09;总…

【云原生|Docker】Docker镜像操作

作者&#xff1a;柒号华仔 个人主页&#xff1a;欢迎访问我的主页 个人信条&#xff1a;星光不问赶路人,岁月不负有心人。 个人方向&#xff1a;主要方向为5G&#xff0c;同时兼顾其他网络协议&#xff0c;编解码协议&#xff0c;C/C&#xff0c;linux&#xff0c;云原生等&…

Docker私有镜像仓库是什么?

Docker镜像仓库概述 镜像仓库作为Docker技术的核心组件之一&#xff0c;其主要作用就是负责镜像内容的存储和分发。Docker镜像仓库从使用范围来说分为“公有镜像仓库”和“私有镜像仓库”&#xff0c;公有镜像仓库是可以被任何人使用的&#xff0c;例如Docker公司维护的在线存储…

了解和使用 Docker 镜像仓库

前言 在上文 《了解和使用 Docker》 之后&#xff0c;反响不错&#xff0c;也上了热榜。本来是想直接整理一下容器编排工具 Docker Swarm 和 K8s 博文的&#xff0c;但是半路杀出了这个活动&#x1f602;&#xff0c;为表敬意&#xff0c;先参与一波吧。 本文主要介绍一下容…

Docker容器之镜像仓库详解

Docker容器之镜像仓库详解 文章目录 Docker容器之镜像仓库详解1. 什么是Docker Image&#xff1f;2. 什么是Docker Registry?3. 镜像相关的操作 本文将集中对镜像、仓库、容器的概念与三者之间的联系进行详细介绍&#xff0c;以及基本的镜像管理操作。 1. 什么是Docker Image&…

docker镜像仓库

一、docker镜像仓库 docker镜像仓库&#xff08;repository&#xff09;是集中存放镜像的地方。方便与后续的镜像拉取与上传&#xff0c;便于对镜像的集中管理。镜像仓库一般可分为Docker Hub公共中央仓库和个人或者公司使用的私有仓库&#xff0c;私有仓库如果是个人使用则可…

Docker -- 镜像仓库(搭建私有镜像仓库、向镜像仓库推送镜像、从镜像仓库拉取镜像)

文章目录 1. 镜像仓库1.1 镜像仓库概念 2. 搭建私有镜像仓库2.1.简化版镜像仓库&#xff08;不推荐&#xff09;2.2 带有图形化界面版本&#xff08;推荐&#xff09;2.2.1 配置Docker信任地址2.2.2 使用DockerCompose部署带有图象界面的DockerRegistry 3. 向镜像仓库推送镜像4…

最全经典 | 机器视觉基础知识汇总

人工智能的小白资源群&#xff0c;这里有最齐全的干货资源&#xff0c;可以和你一样的入门小白一同交流学习亦可以得到专业技术大神的指导。欢迎入群813416857&#xff08;AI人工智能学习交流&#xff09;&#xff0c;785685380&#xff08;机器学习技术交流群&#xff09;&…

机器视觉光源知识总结(二)

更多文章请关注微信公众号&#xff1a;机器视觉专业论坛

机器视觉系统的搭建

对于许多新人来说能成功搭建一套完善的视觉系统是比较困难的&#xff0c;机器视觉包括了许多需要掌握的知识点、比产品选型&#xff1a;视觉软件、相机、光源、镜头。比如安装高度、视野大小、系统要求的运行时间、工作环境等等&#xff0c;对于新人来说需要一套完善的知识体系…

OpenCV与机器视觉

最近在网易云课堂把南科大于仕琪团队的OpenCV教程完整看了一遍&#xff0c;对图像处理或者机器视觉又有了一个系统性的理解。OpenCV中文网站就是他创建的&#xff0c;他的研究团队及其相应成果可以在个人网站中查阅。回想过去在图像处理方面的点点滴滴&#xff0c;做了一个详细…

机器视觉——车牌识别实验汇总

文章目录 前言一、车牌识别背景资料简介二、实现车牌识别步骤1.图像采集&#xff08;Image Correction&#xff09;2.角度修正&#xff08;Angle Correction&#xff09;3.字符分割 第一次分割4.车牌定位&#xff08;License Plate Location&#xff09;5.字符分割 第二次分割6…

机器视觉源码分享

视觉方面的研究&#xff0c;但毕业后未能再此领域深耕&#xff0c;故预将研究阶段所做的工业视觉程序进行分享&#xff0c;作为兴趣爱好愿与有识之人一起交流。 有需要的请留言&#xff0c;以下介绍均有源码 0cHM6Ly9ibG9nLmNzZG4ubmV0L01CU0VwZWVr,size_16,color_FFFFFF,t_70)…

机器视觉基础应用知识详解

点击上方“小白学视觉”&#xff0c;选择加"星标"或“置顶” 重磅干货&#xff0c;第一时间送达随着工业4.0时代的到来&#xff0c;机器视觉在智能制造业领域的作用越来越重要&#xff0c;为了能让更多用户获取机器视觉的相关基础知识&#xff0c;包括机器视觉技术是…

机器视觉工程师必须了解的基础知识

点击上方“小白学视觉”&#xff0c;选择加"星标"或“置顶” 重磅干货&#xff0c;第一时间送达正文 CCD&#xff08;像素&#xff09;与视觉系统的基础知识 关于摄像元件 CCD 数码相机的构造与传统的胶片式相机&#xff08;模拟式&#xff09;基本相同。所不同的是数…

机器视觉与图像处理知识点总结

图像灰度均值是对平均灰度的一种度量&#xff0c;反映了图像的亮度&#xff0c;均值越大说明图像亮度越大&#xff0c;反之越小。图像灰度方差反映了图像像素值与均值的离散程度&#xff0c;标准差越大说明图像的质量越好。方差是对平均对比度的度量&#xff0c;每个像素点颜色…

机器视觉基础知识详解

什么是机器视觉 机器视觉是人工智能正在快速发展的一个分支。简单说来&#xff0c;机器视觉就是用机器代替人眼来做测量和判断。机器视觉系统是通过机器视觉产品&#xff08;即图像摄取装置&#xff0c;分CMOS和CCD两种&#xff09;将被摄取目标转换成图像信号&#xff0c;传送…

机器视觉需要学什么?学习机器视觉需要掌握哪些知识?

图像采集&#xff1a;需要对镜头、光源、相机(CCD)的选型有所了解&#xff0c;有经验的工程师说打光是图像采集的关键。图像采集是对我们后续工作的支撑&#xff0c;采集不到好的图像&#xff0c;对图像处理就会难上好几倍甚至几百倍。 图像处理&#xff1a;图像处理技术一般包…