【Docker系列】Docker-核心概念/常用命令与项目部署实践

 

写在前面 

Docker是一种开源的容器化技术,它允许开发者将应用程序及其依赖项打包到一个轻量级、可移植的容器中,从而实现快速部署和高效运行。Docker的核心概念包括镜像、容器、仓库等。本文将详细介绍Docker的基本概念、安装方法以及常用命令。

一、Docker基本概念

介绍3个基础概念:

  • 镜像(Image)
  • 容器(Container)
  • 仓库(Registry)

1.1  镜像(Image)

Docker镜像是一个轻量级的、可执行的独立软件包,包含运行某个应用所需的所有内容,包括代码、运行时、系统工具、库和设置。

镜像不包含任何用户数据,它们只在docker run命令被调用时被创建。

Docker镜像是一个只读的模板,含有启动容器所需要的文件系统及其内容,因此,其用于创建并启动容器。比如,一个镜像可以包含一个运行在Apache上的Web应用和其使用的Ubuntu操作系统。

分层构建机制

Docker镜像采用分层构建机制,最底层为bootfs,其次为rootfs。bootfs:用于系统引导的文件系统,包括BootLoader和kernel,容器启动完成后会会被卸载以节约内存资源; rootfs:位于bootfs之上,表现为docker容器的根文件系统。

镜像类型

Docker镜像有三种类型:基础镜像、官方镜像和用户自定义镜像。

  1. 基础镜像是Docker官方提供的镜像,如ubuntu、centos等;
  2. 官方镜像是由Docker社区维护的镜像,如node、nginx等;
  3. 用户自定义镜像是由用户自己制作的镜像。

可以通过以下命令来查看本地已经存在的镜像:

docker images

1.2. 容器(Container)

容器是镜像的一个运行实例,可以在容器中运行一个应用或服务。容器与宿主机系统隔离,容器内的应用在主机操作系统上无法直接访问。

每个容器都有自己的文件系统、网络栈和进程空间。

Docker容器是镜像的一个运行实例,是Docker的核心概念之一。正如从虚拟机模板上启动 VM 一样,用户也同样可以从单个镜像上启动一个或多个容器。

Docker容器是完全使用沙箱机制,相互之间不会有任何接口,并且容器开销极其低。可以理解为在容器中运行一个应用或服务。

容器与宿主机系统隔离,容器内的应用在主机操作系统上无法直接访问。

可以通过以下命令来查看本地已经存在的容器:

docker ps

1.3. 仓库(Registry)

Docker仓库是Docker的核心组件之一,主要作用是负责存储和分发Docker镜像的地方。

仓库是用于存储和分发镜像的服务。Docker Hub是最受欢迎的公共仓库,用户可以在其中找到大量的镜像。

此外,用户还可以搭建私有仓库,用于内部团队共享和管理镜像。

Docker仓库分为官方仓库和用户自定义仓库两种类型。

  • 官方仓库:Docker Hub是Docker官方提供的公共仓库,用户可以在上面免费上传、下载、分享自己的Docker镜像。除此之外,还有Google Container Registry、Amazon Elastic Container Registry等官方仓库。
  • 用户自定义仓库:用户可以根据自己的需求搭建自己的私有仓库,比如使用Nexus Repository Manager、Harbor等开源软件。

二、Docker安装方法

Docker支持多种平台,包括Windows、macOS和Linux。以Ubuntu为例,介绍如何安装Docker:

1. 更新软件包列表:
```
sudo apt-get update
```

2. 安装Docker引擎:
```
sudo apt-get install docker-ce docker-ce-cli containerd.io
```

3. 启动Docker服务:
```
sudo systemctl start docker
```

4. 设置Docker开机自启:
```
sudo systemctl enable docker
```

三、Docker常用命令

 搜索镜像:`docker search <镜像名称>`

下载镜像:`docker pull <镜像名称>`

列出本地镜像:`docker images`

删除镜像:`docker rmi <镜像ID>`

 创建容器:`docker create --name <容器名称> --image <镜像名称>`

启动容器:`docker start <容器ID>`

停止容器:`docker stop <容器ID>`

进入容器:`docker exec -it <容器ID> /bin/bash`

查看容器日志:`docker logs <容器ID>`

导出容器:`docker export <容器ID> > <文件名>.tar`

导入容器:`docker import <文件名.tar> <新镜像名称>:<标签>`

 删除容器:`docker rm <容器ID>`

 删除镜像:`docker rmi <镜像ID>`

查看容器状态:docker top <容器ID>

进入正在运行的容器:docker attach <容器ID>

设置容器开机自启:docker update --restart=always <容器ID>

限制容器资源使用:docker run -it --cpu-period=50000 --memory=512m <镜像名称> /bin/bash

导出容器配置:docker export <容器ID> > <文件名>.yml

导入容器配置:docker import <文件名.yml> <新镜像名称>:<标签>

保存镜像:docker save <镜像名称> > <文件名>.tar

加载镜像:docker load <文件名.tar>

查看Docker版本:docker version

查看Docker系统信息:docker info

查看Docker网络信息:docker network ls

创建Docker数据卷:docker volume create <卷名>

使用Docker数据卷:docker run -v <卷名>:/data <镜像名称> /bin/bash

删除Docker数据卷:docker volume rm <卷名>

查看Docker日志:docker logs --tail=100 <容器ID>

监视Docker容器:docker ps --filter "status=running" --format "{{.ID}}:{{.Image}}" | xargs -n 1 -I {} docker top {}

连接到Docker Hub:docker login --username=<用户名> --password=<密码>(需要先在Docker Hub上注册账号)

发布镜像到Docker Hub:docker tag <本地镜像名称> <用户名>/<仓库名称>:<标签>,然后使用docker push <用户名>/<仓库名称>:<标签>将镜像推送到Docker Hub。

从Docker Hub拉取镜像:docker pull <用户名>/<仓库名称>:<标签>

管理Docker用户组和用户:sudo groupadd -r docker && usermod -aG docker $USER(需要root权限)

重启Docker服务:sudo systemctl restart docker

停止Docker服务:sudo systemctl stop docker

四、使用docker部署一个前端项目

使用Docker部署一个前端项目可以大大简化项目的部署和维护过程,下面是一个详细的步骤介绍:

4.1 创建一个Dockerfile文件 

创建一个Dockerfile文件,该文件描述了如何构建一个包含前端项目的Docker镜像。在项目根目录下创建Dockerfile文件,并添加以下内容:

# 使用官方的Node.js镜像作为基础镜像
FROM node:latest# 设置工作目录
WORKDIR /app# 复制 package.json 和 package-lock.json 到工作目录
COPY package*.json ./# 安装项目依赖
RUN npm install# 复制项目源代码到工作目录
COPY . .# 暴露容器端口,假设我们的前端项目运行在3000端口上
EXPOSE 3000# 启动项目
CMD ["npm", "start"]

这个Dockerfile使用了官方的Node.js镜像作为基础镜像,将工作目录设置为/app,并将package.json和package-lock.json复制到工作目录中。

然后使用npm install命令安装项目依赖,将项目源代码复制到工作目录中,最后暴露容器端口并启动项目。

 4.2 构建镜像

在项目根目录下执行以下命令构建Docker镜像:
 

docker build -t my-frontend .

其中my-frontend是自定义的镜像名称,可以根据需要进行修改。

4.3 运行容器 

运行Docker容器并映射宿主机的端口到容器内部:

docker run -p 3000:3000 --name my-frontend-container my-frontend

其中-p参数用于将宿主机的3000端口映射到容器内部的3000端口,--name参数用于给容器命名。

4.4 访问项目

现在可以通过访问http://localhost:3000来查看前端项目是否已经成功部署。如果一切正常,应该能够看到项目的首页。

4.5 项目更新

如果需要更新项目代码,只需要重新构建Docker镜像并重启容器即可:
 

docker build -t my-frontend .
docker restart my-frontend-container

五、总结

Docker作为一种轻量级的虚拟化技术,为开发者提供了一种简单易用的方式来部署和管理应用程序。通过掌握Docker的基本概念、安装方法和常用命令,开发者可以更高效地进行软件开发和运维工作。

总而言之,掌握Docker的基础知识是现代软件开发和部署的必备技能之一。通过深入了解Docker的核心概念,我们能够更好地理解容器化技术的优势,如隔离性、可移植性和高度可扩展性。熟悉常用的Docker命令不仅能够帮助我们更高效地管理容器和镜像,还能够加速开发、测试和生产环境的部署过程。

在本文中,我们不仅深入探讨了Docker的基本概念,还详细介绍了一些常用的命令,从创建和运行容器,到构建和共享自定义镜像,无不展现了Docker作为一个强大工具的多面能力。特别是通过实际操作演示,我们学习了如何使用Docker来部署一个前端项目。

这个过程不仅简化了环境配置,还提供了一种一致性和可重复性的部署方式,为团队协作和持续集成提供了更便捷的手段。

然而,正如任何技术一样,Docker也有其深入的方面需要进一步学习和探索。从网络配置到容器编排,从安全性到监控,这些都是在实际场景中需要考虑的因素。

因此,在掌握了基础知识后,继续深入学习和实践,以充分利用Docker在项目开发和部署中的优势。

总之,Docker作为现代软件开发的关键工具,在简化环境管理、加速交付、提高可靠性等方面具有巨大潜力。

通过本文的学习,希望读者能够建立起对Docker基础知识的坚实理解,并能够在实际工作中灵活运用,从而更加高效地构建和管理各种应用程序。

六、投票

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://xiahunao.cn/news/1620724.html

如若内容造成侵权/违法违规/事实不符,请联系瞎胡闹网进行投诉反馈,一经查实,立即删除!

相关文章

webassembly004 ggml wasm_eval 与js代码交互 调试

试用 $:~/ggml/ggml$cd examples/mnist $:~/ggml/ggml/examples/mnist$ emcc -I../../include -I../../include/ggml -I../../examples ../../src/ggml.c main.cpp -o web/mnist.js -s EXPORTED_FUNCTIONS["_wasm_eval","_wasm_random_digit","_mall…

cesium 使用天地图

天地图的 key 可以到 天地图官网申请 我的天地图账号是如下 天地图的最大层级是17 &#xff0c;当我们设置maximumLevel 小于 等于17 级时&#xff0c;当相机移到LOD大于17时&#xff0c;会对天地图 最大层级图像进行切分&#xff1b; 当设置maximumLevel 大于17级时&#xf…

ArcGis for JavaScript 4.23版本接入国家天地矢量地图

申请天地图开发权限 注册天地图控制台创建应用&#xff0c;应用类型选浏览器端&#xff0c;因为我们是浏览器使用创建完成后进入资源服务选择使用的地图&#xff0c;此处我使用经纬度矢量地图点击进去可以看到地图服务的URL 后面要用 ArcGis 接入天地图 ArcGis 4x版本中使用…

cesium-加载天地图影像

cesium-加载天地图影像 天地图 “天地图”网站装载了覆盖全球的地理信息数据&#xff0c;这些数据以矢量、影像、三维3种模式全方位、多角度展现&#xff0c;可漫游、能缩放。其中中国的数据覆盖了从宏观的中国全境到微观的乡镇、村庄。普通公众登录“天地图”网站&#xff0…

Android 加载天地图

Android 通过ArcGis 来加载天地图&#xff0c;研究了一个星期 整理成了一个小demo,附上部分源码&#xff0c;底部附上源码demo, package com.luao.arcgisdemo;import android.Manifest; import android.annotation.SuppressLint; import android.app.admin.SystemUpdateInfo;…

天地图各级比例尺

国家地理信息公共服务平台天地图 在实际调用中发现国际级可用的为1到18级 &#xff0c;点击省市服务可放大到20级&#xff0c;以下提供1到20级的比例尺供大家参考。 天地图 4.0 API 点击省市服务可放大到20级 L1 1:295829355.45456564 L2 1:147914677.7272828…

OpenLayers集成天地图

1、安装OpenLayers 使用以下方式将OpenLayers添加为对您的应用程序的依赖 npm i -S ol 此时&#xff0c;您可以要求NPM通过运行以下命令来添加所需的开发依赖项 npm i --save-dev parcel-bundler 2、注册天地图 注册地址&#xff1a;https://uums.tianditu.gov.cn/registe…

天地图之自定义标记点

需求&#xff1a;在地图上标记监控点位&#xff0c;地图引入的过程就不多啰嗦&#xff0c;可参考此专栏前几篇文章&#xff0c;下面直接介绍实现步骤 1.绘制标记点&#xff08;如果多个点则需要放到循环体循环渲染&#xff09; 点的坐标 var position new T.LngLat(经度, 纬…

java+天地图,天地图开发之Android-天地图显示

最近开始学Android地图开发&#xff0c;由于做天地图api的人不多&#xff0c;想把自己这一段时间的劳动成果分享给大家&#xff0c;顺便可以一起学习。我用的版本是天地图移动API(Android)V2.1版。 1.下载天地图移动API库 2.第一个天地图map应用 第一步&#xff1a;在工程里新建…

Cesium调用天地图的新问题

在开发CSTK 的过程中&#xff0c;尝试在Cesium上加载天地图&#xff0c;这个过程在2021年的年中已经解决了。 使用了网上的代码 viewer new Viewer("cesiumContainer", {// imageryProvider: imageryProvider,// imageryProvider: imgMap,baseLayerPicker: hasBase…

【天地图】使用天地图api绘制GeoJson数据

天地图没有直接提供加载GeoJson数据或者文件的api,但是我们可以借助绘制多边形的方式实现 1 实现效果 绘制如下的矢量多边形效果&#xff1b; 2 实现技术 (1) 首先用ajax请求geojson文件&#xff0c;从文件解析并获取到坐标数据 下面这个方法就是解析geojson返回的featurecol…

【自学笔记】天地图添加标注

知识点 MarkTool类&#xff1a;标注工具&#xff0c;用来让用户在地图上标注一个点&#xff0c;可以通过该工具获得用户标点的经纬度位置。构造函数&#xff1a;MarkTool(map:Map[,opts:MarkToolOptions])。参数说明&#xff1a;map为地图对象&#xff1b;opts&#xff1a;Mar…

离线地图最终解决方案

离线地图最终解决方案 前言 ​ 能找到这个帖子的朋友应该是公司要求做离线地图,但是没了解过的吧,我前一段也是公司要求做离线地图但是我没了解过,我就去搜了很多文章,找了很多方案,最后和leader定下来了两个方案,一个是使用一张固定缩放的图片,然后将像素转化为px来做…

天地图入门使用

“天地图”是国家测绘地理信息局建设的地理信息综合服务网站。集成了来自国家、省、市&#xff08;县&#xff09;各级测绘地理信息部门&#xff0c;以及相关政府部门、企事业单位 、社会团体、公众的地理信息公共服务资源&#xff0c;如果做的项目是政府部门、企事业单位尽量选…

javaee spring 自动注入,如果满足条件的类有多个如何区别

如图IDrinkDao有两个实现类 方法一 方法二 Resource(name“对象名”) Resource(name"oracleDrinkDao") private IDrinkDao drinkDao;

如何手动添加 WIFI 网络步骤

电脑手动添加WiFi网络步骤&#xff1a; 1.右键控制面板 2.进入控制面板 3.进入网络和Internet&#xff0c;点击设置新的连接或网络 4.点击手动连接到无线网络 5.输入网络SSID及秘钥 若需要自动连接请勾选自动启动此连接。 若WiFi不广播也自动连接请勾选即使网络未进行广播也连接…

【电脑设置wifi大揭秘】随身wifi怎么用?

随身wifi什么&#xff1f;一句话就是一种迷你版无线路由器&#xff0c;安装在台式机上也可充当无线网卡。目前&#xff0c;市面上的随身wifi有小度wifi、360随身wifi、wifi宝等。作为线上入口&#xff0c;互联网大佬们自然不会放手。 一、随身WiFi怎么用&#xff1f; 实际上&am…

计算机wifi怎么打不开,设置wifi的网址打不开怎么办?

问&#xff1a;设置wifi的网址(网站)打不开&#xff0c;无法对wifi进行设置&#xff0c;请问怎么解决这个问题&#xff1f; 答&#xff1a;wifi的设置网址打不开&#xff0c;多半是你操作有误引起的&#xff0c;极少数情况下是wifi路由器有问题导致的&#xff0c;这个问题的解决…

Windows下用某品牌随身WiFi搭建一个钓鱼热点

*本文原创作者&#xff1a;Leslie___Cheung &#xff0c;本文属于原创博客&#xff0c;未经许可禁止转载。 *本文内容仅代表作者观点且只做测试展示&#xff0c;目的是提醒读者注意 WiFi 联网安全&#xff0c;严禁将内容用于不法用途。 目录 前言 01 搭建过程 第一步&a…

随身wifi折腾日记 (刷armbian搭建服务器,内网穿透部署网站)

随身wifi折腾日记 跳转博客,观感更佳 商业转载请联系作者获得授权&#xff0c;非商业转载请注明出处。 For commercial use, please contact the author for authorization. For non-commercial use, please indicate the source. 协议(License)&#xff1a;署名-非商业性使用-…