当前位置: 首页 > news >正文

Docker的安装和使用

Docker概述

Docker简介
Docker 是基于 Go 语言实现的云开源项目。
Docker 的主要目标是: Build, Ship and Run Any App, Anywhere ,也就是通过对应用组件的封装、
分发、部署、运行等生命周期的管理,使用户的 APP 及其运行环境能做到 一次镜像,处处运行 Build 
once Run anywhere
应用部署的环境问题
大型项目组件较多,运行环境也较为复杂,部署时会遇到一些问题
依赖关系复杂,容易出现兼容性问题
开发、测试、生产环境有差异
一个项目中,部署时需要依赖于 node.js Redis RabbitMQ MySQL 等,这些服务部署时所需要的函 数库、依赖项各不相同,甚至会有冲突。给部署带来了极大的困难。
Docker解决依赖兼容
Docker 却巧妙的解决了这些问题, Docker 是如何实现的呢?
Docker 为了解决依赖的兼容问题的,采用了两个手段:
1、将应用的 Libs (函数库)、 Deps( 依赖 ) 、配置与应用一起打包
2、将每个应用放到一个容器去运行,避免互相干扰。
优势
作为一种虚拟化方式, Docker 跟传统的虚拟化方式相比具有众多的优势。
1. 更高效的利用系统资源:由于容器不需要进行硬件虚拟以及运行完整操作系统等额外开销, Docker
对系统资源的利用率更高。
2. 更快速的启动时间:可以做到秒级、甚至毫秒级的启动时间。大大的节约了开发、测试、部署的时
间。
3. 一致的运行环境: Docker 的镜像提供了除内核外完整的运行时环境,确保了应用运行环境一致
性。
4. 持续交付和部署:使用 Docker 可以通过定制应用镜像来实现持续集成、持续交付、部署。
5. 更轻松的迁移
6. 更轻松的维护和扩展
Docker运行速度快的原因
Docker 有比虚拟机更少的抽象层:
由于 Docker 不需要 Hypervisor (虚拟机)实现硬件资源虚拟化,运行在 Docker 容器上的程序直接使用
的都是实际物理机的硬件资源,因此在 CPU 、内存利用率上 docker 有明显优势。
Docker 利用的是宿主机的内核,而不需要加载操作系统 OS 内核:
当新建一个容器时, Docker 不需要和虚拟机一样重新加载一个操作系统内核。进而避免引寻、加载操作
系统内核返回等比较耗时耗资源的过程。当新建一个虚拟机时,虚拟机软件需要加载 OS ,返回新建过程
是分钟级别的。而 Docker 由于直接利用宿主机的操作系统,则省略了返回过程,因此新建一个 docker
器只需要几秒钟。
Docker 容器的本质就是一个进程。
Docker组成
Docker 并非一个通用的容器工具,它依赖于已经存在并运行的 Linux 内核环境。(在 Windows 上安装
Docker 时需要依赖 WLS ,也即 Windows 下的 Linux 子系统)。
Docker 实质上是在已经运行的 Linux 下制造了一个隔离的文件环境,因此它执行的效率几乎等同于所部
署的 Linux 主机。
Docker 的基本组成部分:
1:镜像( image
2:容器( container
3:仓库( repository
Docker镜像
Docker 将应用程序及其所需的依赖、函数库、环境、配置等文件打包在一起,称为镜像。
Docker 镜像就是一个只读的模板。镜像可以用来创建 Docker 容器,一个镜像可以创建多个容器。
 Docker容器
Docker 利用容器独立运行的一个或一组应用,应用程序或服务运行在容器里面,容器就类似于一个虚拟
化的运行环境,容器是用镜像创建的运行实例。
镜像和容器的区别
镜像,就是把一个应用在硬盘上的文件、及其运行环境、部分系统函数库文件一起打包形成的文件包。
所以镜像以文件形式保存在硬盘中,可以独立存在。
而容器是个进程,只能靠运行镜像而存在,没有能够脱离于镜像而存在的容器。
从一个镜像可以发起多个容器,而一个容器肯定只能从一个镜像产生。
 Docker仓库
Docker 仓库是集中存放镜像文件的场所。
仓库分为公开仓库和私有仓库两种。
最大的公开仓库是 Docker 官方的 Docker Hub https://hub.docker.com/
举个例子
我来到一片空地,想建个房子,于是我搬石头、砍木头、画图纸,一顿操作,终于把这个房子盖好了。
结果,我住了一段时间,想搬到另一片空地去。这时候,按以往的办法,我只能再次搬石头、砍木头、
画图纸、盖房子。
但是,跑来一个老巫婆,教会我一种魔法。
这种魔法,可以把我盖好的房子复制一份,做成 镜像 ,放在我的背包里。
刚才例子里面,那个放在包里的 镜像 ,就是 Docker 镜像。而背包,就是 Docker 仓库。在空地上,用魔法造好的房子,就是一个Docker 容器。
Docker 镜像,是一个特殊的文件系统。它除了提供容器运行时所需的程序、库、资源、配置等文件外,还包含了一些为运行时准备的一些配置参数(例如环境变量)。镜像不包含任何动态数据,其内容在构

安装docker

安装依赖
yum install -y yum-utils device-mapper-persistent-data lvm2

配置资源库(阿里)
​
yum-config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo​

安装docker
yum install -y docker-ce docker-ce-cli containerd.io docker-compose-plugin

查看版本
Docker version

创建配置文件
/etc/docker/daemon.json

配置镜像加速

{
"registry-mirrors": ["https://docker.m.daocloud.io"]
}

重启docker

Systemctl restart docker

拉取镜像

Docker pull 镜像的名字

Docker pull nginx

查看镜像
Docker images

创建容器

Docker create --name 容器的名字 -p 暴露的端口号:原本的端口号 镜像的名字

例:Nginx 的镜像   容器   mynginx

 docker create --name=mynginx -p 80:80 nginx

查看所有的容器

Docker ps -a

查看运行的容器

Docker ps 

启动容器

Docker start 容器的id/容器的名字

根据容器的名字启动

docker start mynginx1

根据容器的id启动

 docker start 809308bc1fb3

访问容器

访问浏览器我们设置的端口号

删除镜像

dockerrmi镜像名称/ID

删除容器

根据id 和名字进行删除

容器名字不能重复

docker rm 容器的名字

进入容器

语法:

Docker exec -it 容器的名字/容器的id bash

docker exec -it mynginx bash

修改文件

需要vim 容器中是没有的

安装工具

执行命令:

apt-get updateapt-get install vim

修改首页的信息

默认页面位置

vi /usr/share/nginx/html/index.html

安装完后,进入html文件里保存后退出,再次打开浏览器访问nginx页面会跟着变化

导入和导出镜像

导出
docker save -o 名字.tar 镜像id:版本号

导出镜像之后将镜像复制到另外一个服务器中

 例: scp ./test.tar root@192.168.184.35/usr

导入

导入镜像

在新的服务器(192.168.184.35)中导入镜像

docker load -i  test.tar

查看镜像

[root@hostM1 nginx]# systemctl start docker[root@hostM1 nginx]# docker load -i test.tar[root@hostM1 nginx]# docker images

这样也就相当于我们建了一个房子,可以将他放到背包里,也可以拿出来

相关文章:

  • 一文详解大语言模型Transformer结构
  • LangGPT结构化提示词编写实践
  • 金融教育宣传月 | 平安养老险百色中心支公司开展金融知识“消保县域行”宣传活动
  • 如何使用ssm实现个人日常事务管理系统+vue
  • 【数据结构与算法 | 灵神题单 | 栈基础篇】力扣155, 1472, 1381
  • Python 将数据写入 excel(新手入门)
  • mac Wireshark You do not have permission to capture on device “rvio“.
  • MMD模型及动作一键完美导入UE5-Blender方案(三)
  • Pygame中Sprite实现逃亡游戏4
  • js替换css主题变量并切换iconfont文件
  • 11-pg内核之锁管理器(六)死锁检测
  • JavaScript中的输出方式
  • SSM框架学习(四、SpringMVC实战:构建高效表述层框架)
  • MAC的几个常见的快捷方式
  • Llama 3.2来了,多模态且开源!AR眼镜黄仁勋首批体验,Quest 3S头显价格低到离谱
  • 【JavaScript】通过闭包创建具有私有属性的实例对象
  • 【跃迁之路】【669天】程序员高效学习方法论探索系列(实验阶段426-2018.12.13)...
  • 002-读书笔记-JavaScript高级程序设计 在HTML中使用JavaScript
  • android百种动画侧滑库、步骤视图、TextView效果、社交、搜房、K线图等源码
  • CSS3 聊天气泡框以及 inherit、currentColor 关键字
  • JavaScript新鲜事·第5期
  • JavaWeb(学习笔记二)
  • oldjun 检测网站的经验
  • Spring Security中异常上抛机制及对于转型处理的一些感悟
  • ucore操作系统实验笔记 - 重新理解中断
  • vue:响应原理
  • vuex 学习笔记 01
  • Zsh 开发指南(第十四篇 文件读写)
  • 聊聊flink的BlobWriter
  • 思维导图—你不知道的JavaScript中卷
  • 项目实战-Api的解决方案
  • PostgreSQL之连接数修改
  • ​浅谈 Linux 中的 core dump 分析方法
  • # Java NIO(一)FileChannel
  • #[Composer学习笔记]Part1:安装composer并通过composer创建一个项目
  • $.extend({},旧的,新的);合并对象,后面的覆盖前面的
  • %check_box% in rails :coditions={:has_many , :through}
  • (Redis使用系列) Springboot 实现Redis 同数据源动态切换db 八
  • (solr系列:一)使用tomcat部署solr服务
  • (多级缓存)多级缓存
  • (二)Kafka离线安装 - Zookeeper下载及安装
  • (过滤器)Filter和(监听器)listener
  • (回溯) LeetCode 131. 分割回文串
  • (亲测)设​置​m​y​e​c​l​i​p​s​e​打​开​默​认​工​作​空​间...
  • (三)centos7案例实战—vmware虚拟机硬盘挂载与卸载
  • .bat批处理(七):PC端从手机内复制文件到本地
  • .NET : 在VS2008中计算代码度量值
  • .Net mvc总结
  • .Net Redis的秒杀Dome和异步执行
  • .NET Windows:删除文件夹后立即判断,有可能依然存在
  • .NET/C# 判断某个类是否是泛型类型或泛型接口的子类型
  • .Net的C#语言取月份数值对应的MonthName值
  • .net用HTML开发怎么调试,如何使用ASP.NET MVC在调试中查看控制器生成的html?
  • .Net中的设计模式——Factory Method模式
  • @Bean注解详解