docker容器使用初体验

我们写程序时,都会搭建相关的环境,比如写了一个web,使用了tomcat、nginx等,现在想要把程序部署到云服务器或者在其他电脑上运行,就需要重新部署一遍环境,尤其是项目开源后,上手成本大。

docker

介绍

Docker 是一个开源的应用容器引擎,基于 Go 语言 并遵从 Apache2.0 协议开源。
Docker 可以让开发者打包他们的应用以及依赖包到一个轻量级、可移植的容器中,然后发布到任何流行的 Linux 机器上,也可以实现虚拟化。
容器是完全使用沙箱机制,相互之间不会有任何接口(类似 iPhone 的 app),更重要的是容器性能开销极低。
(来源于菜鸟教程)

安装

docker依赖于linux内核,因此在windows系统中需要安装Hyper-V(类似于 VMWare 或 VirtualBox)或者WSL,然后进入docker desktop官网下载安装程序,双击运行即可。安装完成后可以在虚拟机中运行命令docker --version检查是否成功安装。

镜像和容器的区别

Docker 中镜像(Image)和容器(Container)是两个核心概念,它们有以下主要区别:

  1. 定义和用途:
    • 镜像(Image):镜像是一个只读的文件系统快照,它包含了一个应用程序及其运行环境所需的所有内容,包括代码、库、依赖项、配置等。镜像是用于创建容器的模板,可以看作是一个静态的、不可更改的应用程序打包。
    • 容器(Container):容器是一个运行时实例,它是基于镜像创建的,包含了应用程序及其所有依赖项的运行环境。容器可以被启动、停止、删除等,它提供了一个隔离的运行环境,使应用程序能够在不同的容器中运行,而不受主机环境的影响。
  2. 可变性:
    • 镜像是不可更改的,一旦创建就不能修改。如果需要对应用程序或环境进行更改,必须创建一个新的镜像。
    • 容器是可变的,可以在运行时进行修改。你可以进入容器、安装软件、修改配置等,然后保存为新的镜像,以便将更改保存下来。
  3. 生命周期:
    • 镜像的生命周期是静态的,它存在于磁盘上并可以被多个容器实例使用。
    • 容器的生命周期是动态的,它可以被创建、启动、停止和销毁。容器是临时的运行实体。
  4. 资源消耗:
    • 镜像通常占用磁盘空间,并且资源消耗较低,因为它们是静态的。
    • 容器占用系统资源(CPU、内存等),因为它们正在运行应用程序和服务。

总之,镜像是容器的模板,用于创建容器实例。容器是在镜像基础上运行的可执行实体,具有自己的运行时状态。Docker 的强大之处在于它允许你使用镜像来轻松创建、分发和管理容器,从而实现应用程序的隔离和可移植性。

dockerhub

Docker Hub 是一个在线的 Docker 镜像仓库和容器注册表服务。它是 Docker 公司提供的官方服务,用于帮助开发人员和运维团队存储、分享和获取 Docker 镜像。Docker Hub 允许用户上传、存储和管理 Docker 镜像。这些镜像可以包含操作系统、应用程序、服务和其他容器化的组件,供其他用户下载和使用,类似于Github仓库。

如果要上传一个镜像,就需要编写dockerfile脚本文件,在这个文件中写入环境配置的命令行。

docker和虚拟机区别

Docker 和虚拟机是两种不同的虚拟化技术,它们在应用、资源消耗、启动时间和隔离等方面有一些重要区别。以下是 Docker 和虚拟机之间的主要区别:
架构和隔离:
Docker:Docker 使用容器技术,容器共享主机操作系统的内核,但在容器内部提供隔离的用户空间。这意味着容器之间共享操作系统内核,使其轻量且启动迅速。容器之间的隔离通过 Linux 内核的命名空间和控制组技术实现。
虚拟机:虚拟机是完全虚拟化的技术,每个虚拟机都运行自己的操作系统内核。这意味着虚拟机需要更多的资源,并且启动速度较慢,因为它们需要模拟整个操作系统。
资源消耗:
Docker:由于容器共享主机操作系统的内核,所以 Docker 容器通常比虚拟机更轻量,需要较少的内存和存储资源。
虚拟机:虚拟机通常需要更多的资源,因为每个虚拟机都包含自己的操作系统内核和系统文件。
启动时间:
Docker:Docker 容器可以在几秒内启动,因为它们不需要启动整个操作系统内核。
虚拟机:虚拟机通常需要更长的时间来启动,因为它们需要模拟和启动整个操作系统。
应用部署和管理:
Docker:Docker 容器的部署和管理相对简单,可以使用 Docker Compose 和 Kubernetes 等工具来自动化管理多个容器。
虚拟机:虚拟机的部署和管理相对复杂,需要使用虚拟化管理工具来创建、配置和监视虚拟机。
跨平台支持:
Docker:Docker 容器可以在不同的操作系统上运行,前提是它们都支持 Docker。
虚拟机:虚拟机通常需要适用于特定虚拟化平台的映像,并且不太容易跨平台移植。
隔离性:
Docker:容器提供了一定程度的隔离,但不如虚拟机隔离得严格。容器之间可以共享操作系统内核,这意味着一些攻击可能会影响多个容器。
虚拟机:虚拟机提供了更强的隔离性,每个虚拟机都有独立的内核和资源,攻击一个虚拟机不会影响其他虚拟机。
根据你的需求和用例,你可以选择使用 Docker 或虚拟机来虚拟化和隔离应用程序。Docker 更适合轻量级、可扩展的应用程序,而虚拟机通常更适合需要更严格隔离或运行不同操作系统的应用程序。在实际应用中,有时也会同时使用 Docker 和虚拟机,以充分利用它们各自的优势。

更改镜像源

docker默认镜像源速度很慢,可以更改为以下镜像源:

{"registry-mirrors": ["https://registry.hub.docker.com","http://hub-mirror.c.163.com","https://docker.mirrors.ustc.edu.cn","https://registry.docker-cn.com"]
}

使用

可以将代码拉取到虚拟机本地,然后把代码上传到docker,进入容器,执行代码,参考以下命令

拉取代码
git clone https://github.com/oceanbase/miniob.git 
挂载方式新建一个新容器,-v表示挂载,:前面表示本地文件目录,:后面表示你要在docker 容器中挂载的位置(随意,没有该目录也会新建)
docker run -it -v /usr/lyjps/miniob:/lyjps oceanbase/miniob 
执行下面的命令进入容器,并创建bash终端,此时就可以使用Linux终端方式进行一些开发工作
docker exec -it miniob bash

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

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

相关文章

如何查看postgresql中的数据库大小?

你可以使用以下命令来查看PostgreSQL数据库的大小: SELECT pg_database.datname as "database_name", pg_size_pretty(pg_database_size(pg_database.datname)) AS size_in_mb FROM pg_database ORDER by size_in_mb DESC;这将返回一个表格&#xff0…

一种4g扫码付费通电控制器方案

之前开发了一款扫码付款通电控制器 功能:用户扫码付款后设备通电,开始倒计时,倒计时结束后设备断电,资金到账商家的商家助手里面,腾讯会收取千分之6手续费。 产品主要应用场景 本产品主要应用于各类无人值守或者自助…

vmware安装centos8(三、centos的安装)

注意: 存放安装镜像文件的磁盘必须至少有128G的空间 1、在主界面左侧的客户机列表中选择”CentOS8“,在右侧选项卡中点击“开启此虚拟机”。 2、此对话框直接点击“确定” 3、当看到以下界面时,在虚机中中点击鼠标,使虚拟机捕获…

数据结构基本概念-Java常用算法

数据结构基本概念-Java常用算法 1、数据结构基本概念2、数据逻辑结构3、算法时间复杂度 1、数据结构基本概念 数据(Data):数据是信息的载体,其能够被计算机识别、存储和加工处理,是计算机程序加工的“原材料”。数据元…

洛谷题目题解详细解答

洛谷是一个很不错的刷题软件,可是找不到合适的题解是个大麻烦,大家有啥可以私信问我,以下是我已经通过的题目。 你如果有哪一题不会(最好是我通过过的,我没过的也没关系),可以私信我&#xff0…

数据结构和算法——数据结构

数据结构: 线性结构: 顺序存储方式,顺序表 常见的顺序存储结构有:数组、队列、链表、栈 链式存储方式,链表 队列: 队列可以使用数组结构或者链表结构来存储,先入先出,后进后出。…

jira 浏览器插件在问题列表页快速编辑问题标题

jira-issueTable-quicker 这是一个可以帮助我们在问题表格页快速编辑问题的浏览器插件 github 地址 功能介绍 jira 不可否认是一个可以帮助有效提高工作效率的工具,但是我们在使用 jira 时使用问题表格可以让我们看到跟多的内容而不用关注细节,但是目…

Rabbitmq安装-docker版

1.简介 2.安装消息队列 下载地址https://www.rabbitmq.com/download.html 使用docker方式安装 需要先下载docker,参考文章https://blog.csdn.net/weixin_43917045/article/details/104747341?csdn_share_tail%7B%22type%22%3A%22blog%22%2C%22rType%22%3A%22arti…

微服务技术栈-初识Docker

文章目录 前言一、Docker概念二、安装Docker三、Docker服务命令四、Docker镜像和容器Docker镜像相关命令Docker容器相关命令 总结 前言 docker技术风靡全球,它的功能就是将linux容器中的应用代码打包,可以轻松的在服务器之间进行迁移。docker运行程序的过程就是去仓…

MySQL:温备份和恢复-mysqldump (4)

介绍 温备:同样是在数据库运行的时候进行备份的,但对当前数据库的操作会产生影响。(只可以读操作,不可以写操作) 温备份的优点: 1.可在表空间或数据文件级备份,备份时间短。 2.备份时数据库依然…

软件设计师_数据结构与算法_学习笔记

文章目录 6.1 数组与矩阵6.1.1 数组6.1.2 稀疏矩阵 6.2 线性表6.2.1 数据结构的定义6.2.2 顺序表与链表6.2.2.1 定义6.2.2.2 链表的操作 6.2.3 顺序存储和链式存储的对比6.2.4 队列、循环队列、栈6.2.4.2 循环队列队空与队满条件6.2.4.3 出入后不可能出现的序列练习 6.2.5 串 6…

【算法|动态规划No.12】leetcode152. 乘积最大子数组

个人主页:兜里有颗棉花糖 欢迎 点赞👍 收藏✨ 留言✉ 加关注💓本文由 兜里有颗棉花糖 原创 收录于专栏【手撕算法系列专栏】【LeetCode】 🍔本专栏旨在提高自己算法能力的同时,记录一下自己的学习过程,希望…

微信管理系统

在这个全民微信的时代,微信已成为生活和工作中不可缺少的工具,为了方便,大部分人都不会只有一个微信,很多企业老板和创业者都已经开始用微信管理系统来提升自身的业务效率和客户满意度。 微信管理系统适用哪些行业呢? …

QScrollArea样式

简介 QScrollBar垂直滚动条分为sub-line、add-line、add-page、sub-page、up-arrow、down-arrow和handle几个部分。 QScrollBar水平滚动条分为sub-line、add-line、add-page、sub-page、left-arrow、right-arrow和handle几个部分。 部件如下图所示: 样式详…

Python生成器

生成器 Generators 要理解生成器,首先要理解迭代器,迭代器由以下三个部分组成: 可迭代对象(iterable)迭代器(iterator)迭代(iteration) 1. 可迭代对象 只要定义了可以…

【itext7】使用itext7将多个PDF文件、图片合并成一个PDF文件,图片旋转、图片缩放

这篇文章,主要介绍使用itext7将多个PDF文件、图片合并成一个PDF文件,图片旋转、图片缩放。 目录 一、itext7合并PDF 1.1、引入依赖 1.2、合并PDF介绍 1.3、采用字节数组方式读取PDF文件 1.4、合并多个PDF文件 1.5、合并图片到PDF文件 1.6、旋转图…

1797_GNU pdf阅读器evince

全部学习汇总: GreyZhang/g_GNU: After some years I found that I do need some free air, so dive into GNU again! (github.com) 近段时间经历了很多事情,终于想找一点技术上的自由气氛。或许,没有什么比GNU的一些软件探索更适合填充这样的…

Leetcode---114双周赛

题目列表 2869. 收集元素的最少操作次数 2870. 使数组为空的最少操作次数 2871. 将数组分割成最多数目的子数组 2872. 可以被 K 整除连通块的最大数目 一、收集元素的最小操作次数 直接模拟,倒序遍历即可,代码如下 class Solution { public:int mi…

博客之站项目测试报告

项目背景项目功能测试计划Bug总结升级自动化测试正常登录流程 项目背景 1:博客之站系统是采用前后端分离的方式来实现;使用MySQL、Redis数据库储存相关数据;同时部署到云服务器上。 2:包含注册页、登录页、博客列表页、个人列表页…

CCF CSP认证 历年题目自练 Day22

CCF CSP认证 历年题目自练 Day22 题目一 试题编号: 201912-1 试题名称: 报数 时间限制: 1.0s 内存限制: 512.0MB 题目分析(个人理解) 每一个人都要报多少个数字,我选择字典存储&#xff0…