Docker (一) Docker基础
Docker :开源的容器虚拟化平台
Docker Hub :管理Docker容器的Docker SaaS 平台
Docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的 Linux 机器上,也可以实现虚拟化。容器是完全使用沙箱机制,相互之间不会有任何接口(类似 iPhone 的 app)。几乎没有性能开销,可以很容易地在机器和数据中心中运行。最重要的是,他们不依赖于任何语言、框架或包装系统。
文件系统隔离:每个进程容器运行在一个完全独立的根文件系统里
资源隔离:系统资源,像CPU和内存等可以分配到不同的容器中,使用cgroup
网络隔离:每个进程容器运行在自己的网络空间,虚拟接口和IP地址
日志记录:Docker将会收集和记录每个进程容器的标准流(stdout/stderr/stdin),用于实时检索或批量检索
变更管理:容器文件系统的变更可以提交到新的映像中,并可重复使用以创建更多的容器。无需使用模板或手动配置
交互式shell:Docker可以分配一个虚拟终端并关联到任何容器的标准输入上,例如运行一个一次性交互shell。
要理解 Docker 内部构建,需要理解以下三种部件:
Docker 镜像 - Docker images
Docker 仓库 - Docker registeries
Docker 容器 - Docker containers
Docker 镜像:
Docker 容器运行时的只读模板,每一个镜像由一系列的层 (layers) 组成。Docker 使用 UnionFS(一个堆栈式的联合文件系统) 来将这些层联合到单独的镜像中。UnionFS 允许独立文件系统中的文件和文件夹(称之为分支)被透明覆盖,形成一个单独连贯的文件系统。正因为有了这些层的存在,Docker 是如此的轻量。当你改变了一个 Docker 镜像,比如升级某个程序到新的版本,一个新的层会被创建。因此,不用替换整个原先的镜像或者重新建立(在使用虚拟机的时候你可能会这么做),只是一个新 的层被添加或升级了。现在你不用重新发布整个镜像,只需要升级,层使得分发 Docker 镜像变得简单和快速。
Docker 仓库:
用来保存镜像,可以理解为代码控制中的代码仓库。同样的,Docker 仓库也有公有和私有的概念。公有的Docker 仓库名字是 Docker Hub。Docker Hub 提供了庞大的镜像集合供使用。这些镜像可以是自己创建,或者在别人的镜像基础上创建。Docker 仓库是 Docker 的分发部分。
Docker 容器:
和文件夹很类似,一个Docker容器包含了所有的某个应用运行所需要的环境。每一个 Docker 容器都是从Docker 镜像创建的。Docker 容器可以运行、开始、停止、移动和删除。每一个 Docker 容器都是独立和安全的应用平台,Docker 容器是 Docker 的运行部分。
环境任选其一:
1、CentOS7 Minimal 64位,Docker必须要64位的系统;
2、Ubuntu 16.04.2 LTS (GNU/Linux 4.4.0-62-generic x86_64),64位操作系统
建议内核在 3.8 以上,执行uname –r 查看内核。3.Docker安装
先安装curl命令集
(上面那个命令会报错,应该先用wget 下载shell文件,然后修改docker 的version 去官网找个最新的版本号https://docs.docker.com/engine/release-notes/ ,保存再执行)
4.1 下载基础镜像
docker pull centos:latest (联网下载镜像 centos:linux操作系统发行版之一)
4.2 docker 常用命令
查看所有镜像(指导入的有效的镜像)
查看镜像详细信息
root@ubuntu:/home/ubuntu# docker inspect 196e0ce0c9fb
首先将系统需要的组件准备好放置到指定目录,我们以 /home/test/ 目录为例。
我们需要的组件有,dk-8u144-linux-x64.tar.gz,platform-1.0-SNAPSHOT.jar(部署的工程包 当然也可以是war包等,如果是war包,应该还需要tomcat组件等)
然后我们在该目录下创建dockerfile文件(命令 vim dockerfile)
以下是dockerfile示例
4.4 创建并启动容器
创建容器:
root@ubuntu:/home/ubuntu# docker create -it centoswithifconfig:latest cwf
创建容器并启动:--name 注明创建容器的名称(上面命令中的test_name;test指上面做好的镜像名称)
-t:让Docker分配一个为终端并绑定到容器的标准输入上
-i:让这个标准输入保持打开
然后Ctrl + c 关闭,查看创建好的容器
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· 没有源码,如何修改代码逻辑?
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 记一次.NET内存居高不下排查解决与启示
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
· DeepSeek 开源周回顾「GitHub 热点速览」