Docker的部署与基本使用

news2024/9/20 9:33:34

Docker的部署和基本使用

Docker是一个开源的容器化平台,它允许开发者将应用程序及其依赖项打包成独立的、可移植的容器,从而简化了应用程序的部署、管理和扩展过程。这些容器可以在任何支持Docker的平台上运行,确保了应用的一致性和可移植性。

Docker的三个核心组件:镜像(Image)、容器(Container)、仓库(Repository)

  • 镜像是Docker的基础,它包含了应用程序及其所需的运行环境和依赖项,可以看作是静态的、只读的文件系统模板。
  • 容器则是基于镜像创建的,它是镜像的运行实例,提供了独立的运行环境,可以运行、启动、停止、删除等操作,具有轻量级、可移植和隔离性的特点。
  • 仓库则用于存储和管理镜像,用户可以从仓库中拉取镜像到本地进行部署,也可以将本地的镜像推送到仓库进行分享和备份,实现了镜像的集中管理和分发。

Ubuntu安装docker

  • 更新系统软件包
sudo apt update
sudo apt upgrade
  • 卸载旧版本的Docker(如果已安装
sudo apt-get remove docker docker-engine docker.io containerd runc
  • 安装Docker依赖
sudo apt-get install ca-certificates curl gnupg lsb-release
  • 添加Docker官方GPG密钥(为了确保下载的Docker软件包是官方的、未被篡改的,需要添加Docker官方的GPG密钥)。
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -
  • 添加Docker软件源
sudo apt install software-properties-common
sudo add-apt-repository "deb [arch=$(dpkg --print-architecture)] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable"
  • 安装Docker
sudo apt-get install docker-ce docker-ce-cli containerd.io

镜像(Image)

镜像是通过Dockerfile来创建的,Dockerfile是一个文本文件,其中包含了创建镜像所需的一系列指令和配置。开发者在Dockerfile中定义应用程序的依赖项、运行环境以及构建步骤。Dockerfile的名称是固定的,通常放到项目的根目录下。

Dockerfile 举例:

FROM ubuntu:latest   # 基于最新版本的 Ubuntu 镜像构建基础镜像

RUN apt-get update && apt-get install -y g++   # 更新包列表并安装 g++ 编译器

WORKDIR /cpp_test   # 设置工作目录为 /cpp_test。工作目录是在容器内执行命令时的默认目录

COPY a.cpp .   # 将宿主机当前路径下的 a.cpp 文件复制到镜像的工作目录 /cpp_test 中

RUN g++ a.cpp -o a.out   # 在工作目录 /cpp_test 中编译 a.cpp,生成可执行文件 a.out

COPY b.cpp .   # 将宿主机当前路径下的 b.cpp 文件复制到镜像的工作目录 /cpp_test 中

RUN g++ b.cpp -o b.out   # 在工作目录 /cpp_test 中编译 b.cpp,生成可执行文件 b.out
  • Layer Caching 基本原理

    • 分层结构
      • Docker镜像由多个只读层(Layer)组成,每个层都包含了镜像的一个状态快照。这些层是堆叠在一起的,最底层是基础镜像,之后的每一层都基于前一层进行修改。
    • 分层缓存
      • 当你构建一个Docker镜像时,Docker会对每一层进行缓存。每次运行构建命令时,Docker会检查之前是否已经创建了相同的层。如果找到匹配的层,Docker就会重用该层的缓存,而不是重新构建。
    • 缓存失效
      • 如果Dockerfile的任何一步发生了变化(包括文件内容、命令参数等),从该变化的命令开始的所有后续命令的缓存都会失效,需要重新构建。
    • 缓存层大小
      • 每个层都占用磁盘空间,过多的层会导致镜像体积变大,影响性能。优化Dockerfile可以减少层的数量,例如合并多条RUN命令。
  • 构建Docker镜像。最后的 . 代表Dockerfile的相对路径。

sudo docker build -t 'image_name' .
 sudo docker build --progress=plain -t 'image_name' .

--progress=plain 选项是在build过程中查看Cache的命中情况,下图是基于上述脚本,在修改a.cpp文件后重新build的示例:

在这里插入图片描述

  • 查看image列表
sudo docker images list
  • 删除image
sudo docker rmi [IMAGEID]

容器(Container)

  • 启动容器

    docker run [OPTIONS] image_name
    

    OPTIONS:

    • -d, --detach : 在后台运行容器并打印容器ID。
    • -p XXX:YYY, --publish :将宿主机端口(XXX)映射到容器的端口(YYY)。
    • -v Host_dir:Container_dir, --volume :挂载宿主机目录或卷到容器。如果容器内该目录已存在文件或子目录,它们会被宿主机目录中的内容所覆盖,并保持实时同步映射
    • --name:为容器指定一个名称。
  • 查看docker运行的容器

sudo docker ps
  • 停止容器
sudo docker stop [CONTAINER_ID]
  • 删除容器:默认情况下,docker rm 命令只能删除已停止的容器。如果你尝试删除一个正在运行的容器,Docker会返回一个错误。一旦容器被删除,它的所有状态、文件系统更改和网络命名空间等信息都将被永久删除,并且无法恢复。
sudo docker rm [CONTAINER_ID] 

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

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

相关文章

pdf的压缩该怎么做?快速在线压缩pdf的方法

pdf文件是现在很常用的一种文件格式,有很多的文件内容都可以通过这种格式来展示内容,比如一些通知文件、设计图、个人信息等等,文件的内容越多就会越大,在使用的时候经常会受到一定的限制。那么有什么方法能够快速的将pdf文件变小…

Vue3项目炫酷实战,检测密码强度值

在前端项目开发中,确保用户密码的强度是保护账户安全的重要措施。本文将演示如何使用Vue 3实现一个简单的密码强度检测功能。通过实时反馈,帮助用户创建更安全的密码,从而提升整体系统的安全性。无论您是前端开发新手还是经验丰富的开发者&am…

人大金仓数据库大小写敏感查看

V8R3版本检查方法: 执行语句 show case_sensitive; 返回结果 on:表示大小写敏感; 返回结果 off:表示大小写不敏感。 V8R6版本检查方法: 执行语句 show enable_ci; 返回结果 on:表示大小写不敏感&#x…

Django 创建项目及应用

1,安装 Django pip install Django3.1.5 2,创建 Django项目 django-admin startproject myshop 3,创建 Django应用 python manage.py startapp app1 4,启动 Django项目 python .\manage.py runserver 到这里项目及应用创建…

git报错解决方法error: remote origin already exists.

有时想添加远程本地仓库和远程公司仓库,但git remote的时候发现关联的是一样的,你再去关联时会报错,这时候你应该清除你想关联的远程仓库,再次连接就可以了 下面这个错误提示是远程源已经存在 现在你可以这样做 1、查看远程库的信…

2024-前端面试的正确打开方式(GitHub火爆场景题剖析)

写在前面 最近前端面试大家有没有感觉到场景题的压迫感!!! 很显然普通面试八股不会怎么更新,而且就前端来说,面试并不是真正困难的,常规八股显示不出面试者的技术水平。 前端作为一个技术行业&#xff0c…

在vscode运行github的命令

查看当前分支列表 git branch 查看当前分支列表 git branch 如果没有 main 分支,则创建并切换到 main 分支 git checkout -b main 添加和提交所有更改(如果有未提交的更改) git add . git commit -m “Initial commit” 推送 main 分…

数据结构———链表

链表是经常用到的一种基础数据结构,接下来我们讲讲链表。 链表: 特点: 链表可分为有头/无头链表,循环/无环,双向/单向链表,每个链表节点都包含一个数据和下一个链表节点的地址。 每个链表节点都指向下一…

ESP32开发:2、使用Clion+IDF框架新建ESP32工程

文章目录 背景步骤新建工程编译工程下载代码 参考 背景 使用CLIONIDF框架新建ESP32工程。编译工程,并配置下载。首先需要根据教程1、安装好IDF框架,参考如下: IDF环境搭建 步骤 新建工程 首先找到IDF框架安装路径,我这里的如下…

IMX6ULL-UBOOT外设适配

目录 1.网口移植 2.LCD移植 1.网口移植 100ask 有两个网口,uboot阶段使用网口2,对应的phy是LAN8720A,硬件地址是1,RST引脚对应的是GPIO6_IO6

泽众云真机-上线海外机型测试专栏

泽众云真机平台,2024上半年70机型升级,也包括热门的海外机型。 但是,运营客服反馈,用户找不到平台海外机型在哪里,我们发现海外机型排列位置有问题,用户不易发现。目前问题已解决,上线海外机型测…

读书笔记|《把自己变成稀缺资产》:我们都拥有100分的欲望,却只有1分的耐心。

哈喽,你好啊,我是雷工! 最近在读一本书《把自己变成稀缺资产》,其中一章讲到耐心的重要性,很有共鸣。 当今社会,生活节奏越来越快,我们都在急于求成的追求结果,对过程越来越缺乏耐…

uniapp小程序src引用服务器图片时全局变量与图片路径拼接

理论上&#xff0c;应该在main.js中定义一个全局变量&#xff0c;然后在页面的<image>标签上的是src直接使用即可 main.js 页面上 看上去挺靠谱的&#xff0c;实际上小程序后台会报一个错 很明显这种方式小程序是不认的&#xff0c;这就头疼了&#xff0c;还想过另外一个…

Waymo视角革新!MoST:编码视觉世界,刷新轨迹预测SOTA!

论文标题&#xff1a; MoST: Multi-modality Scene Tokenization for Motion Prediction 论文作者&#xff1a; Norman Mu, Jingwei Ji, Zhenpei Yang, Nate Harada, Haotian Tang, Kan Chen, Charles R. Qi, Runzhou Ge, Kratarth Goel, Zoey Yang, Scott Ettinger, Rami A…

RocketMQ可视化界面安装

RocketMQ可视化界面安装 **起因&#xff1a;**访问rocketmq-externals项目的git地址&#xff0c;下载了源码&#xff0c;在目录中并没有找到rocketmq-console文件夹。 git下面文档提示rocketMQ的仪表板转移到了新的项目中&#xff0c;点击仪表板到新项目地址&#xff1b; 下载…

金融科技重塑跨境支付:创新引领全球支付新纪元

一、引言 随着全球化的加速和科技的飞速发展,跨境支付作为国际贸易的“血脉”,正经历着前所未有的变革。金融科技以其强大的创新能力和技术支撑,正在重塑跨境支付领域的格局,推动全球支付行业向更加高效、安全、便捷的方向发展。本文将深入探讨金融科技如何引领跨境支付的创…

特征交叉系列:DeepCross(DCN-V2)理论和实践

DCN之前FM系列特征交叉思路总结 在之前的推荐算法特征交叉系列中&#xff0c;已经介绍了从FM&#xff0c;FFM&#xff0c;到PNN&#xff0c;DeepFM&#xff0c;NFM&#xff0c;AFM这一系列围绕特征交叉展开的算法&#xff0c;这些算法都是以FM为基石&#xff0c;在FM的基础上优…

kali扩容

通过wmware虚拟机–>设置–>添加40G容量的硬盘。 ──(root㉿kali)-[~/桌面] fdisk -lDisk /dev/sda: 40 GiB, 42949672960 bytes, 83886080 sectors …

Meta的开源力作:Lexical框架,富文本的未来

引言 Lexical 是一个由 Facebook&#xff08;现在称为 Meta&#xff09;开源的可扩展 JavaScript Web 文本编辑器框架。 这个框架特别强调了三个核心特性&#xff1a;可靠性、可访问性以及高性能。 旨在为开发者创造最优的开发体验。 以下是 Lexical 框架的几个关键特点和能…

STM32F103单片机工程移植到航顺单片机HK32F103注意事项

一、简介 作为国内MCU厂商中前三阵营之一的航顺芯片&#xff0c;建立了世界首创超低功耗7nA物联网、万物互联核心处理器浩瀚天际10X系列平台&#xff0c;接受代理商/设计企业/方案商定制低于自主研发十倍以上成本&#xff0c;接近零风险自主品牌产品&#xff0c;芯片设计完成只…