Docker容器

特点

轻量 : 在一台机器上运行的多个 Docker 容器可以共享这台机器的操作系统内核;它们能够迅速启动,只需占用很少的计算和内存资源。镜像是通过文件系统层进行构造的,并共享一些公共文件。这样就能尽量降低磁盘用量,并能更快地下载镜像。

标准 : Docker 容器基于开放式标准,能够在所有主流 Linux 版本、Microsoft Windows 以及包括 VM、裸机服务器和云在内的任何基础设施上运行。

安全 : Docker 赋予应用的隔离性不仅限于彼此隔离,还独立于底层的基础设施。Docker 默认提供最强的隔离,因此应用出现问题,也只是单个容器的问题,而不会波及到整台机器。

镜像、容器、仓库:

一个镜像就代表一个软件;

基于某个镜像运行就是生成一个程序实例,这个程序实例就是容器;

仓库是用来存储 Docker 中所有镜像的。

其中仓库又分为远程仓库和本地仓库,和 Maven 类似,倘若每次都从远程下载依赖,则会大大降低效率,为此,Maven 的策略是第一次访问依赖时,将其下载到本地仓库,第二次、第三次使用时直接用本地仓库的依赖即可,Docker 的远程仓库和本地仓库的作用也是类似的。


容器与虚拟机的比较

容器虚拟化的是操作系统,而不是硬件,因此容器更容易移植,效率也更高。

容器内的应用进程直接运行于宿主的内核,容器内没有自己的内核,而且也没有进行硬件虚拟。

传统虚拟机技术是虚拟出一套硬件后,在其上运行一个完整操作系统,在该系统上再运行所需应用进程。

因此容器要比传统虚拟机更为轻便。

虚拟机更擅长于彻底隔离整个运行环境 。如云服务提供商通常采用虚拟机技术隔离不同的用户。

Docker 通常用于隔离不同的应用 ,例如前端,后端,数据库,消息队列。


常用命令

systemctl start docker

当开启了Docker服务的时候,docker的守护进程 会一直等待客户端发出命令,一旦接收到命令,docker就会去镜像仓库去找,然后拉到本地。

docker images 查看所有镜像

docker rmi 删除镜像 -f强制删除

docker pull + 镜像名

docker run:先看本地是否有镜像,没有的话自动pull

docker run = docker create+ docker start

-d(在后台运行) , --name 指定名称 -p 做端口映射

docker start 开启容器内的进程,docker stop 关闭容器内的进程

docker exec 进入容器中的进程

重启虚拟机的时候,容器只是被关闭了,不需要docker run,直接docker start就可以了。

如果每次都docker run,就会重复创建容器。
端口映射 就是通过宿主机的端口能访问到的,比如我docker容器中有两个mysql服务,需要映射到两个不同的端口,否则怎么区分我用哪个呢?


数据卷

一个虚拟目录,作为中间桥梁,完成容器内目录和宿主机(虚拟机)目录的映射,这样对宿主机目录进行操作的时候,容器目录也会有相应的变动。

容器创建时,如果数据卷不存在,则自动创建(不需要手动create数据卷)

同时,如果没有指定数据卷,也会默认分配一个匿名卷(名字随机生成的)

这样创建,我们就可以指定数据卷的名称

docker volume inspect 可以看宿主目录的具体位置

docker volume ls 可以看一共有哪些数据卷(包括匿名卷)

删除数据的时候,先删数据,再删数据卷。

使用docker volume prune:提前打开要用的容器,再prune,以防删除有用的数据。


本地目录

数据卷目录的结构比较深(Docker服务指定的目录),不易记忆

因此我们也可以直接挂载到本地目录,即直接将宿主目录与容器目录进行挂载


数据卷挂载和本地挂载

数据挂载是通过增加一个数据卷(桥梁),将容器内的数据流向数据卷,再流向宿主机目录,这个目录是由docker指定的,不可更改。正是因为这个目录不可改变性,将来在进行宿主机之间的数据迁移的时候,很方便,安全。同时数据卷挂载一般用来存放需要持久化的文件。

本地挂载是直接将容器内的数据挂载到宿主机目录(可以自定义,方便记忆的路径)。因此不受docker管理维护,将来在数据迁移的时候不安全。也可以用来存放持久化的文件。本地挂载更适合需要直接访问宿主机文件系统的场景。

自定义镜像

之前用的都是别人准备的,如果自己要部署一个java项目,并将其打包成镜像。

镜像的结构:分层存储的架构 。镜像实际是由多层文件系统联合组成。

TODO

相关推荐
jiunian_cn1 小时前
【Linux】centos软件安装
linux·运维·centos
藥瓿亭1 小时前
K8S认证|CKS题库+答案| 6. 创建 Secret
运维·ubuntu·docker·云原生·容器·kubernetes·cks
2302_809798321 小时前
【JavaWeb】Docker项目部署
java·运维·后端·青少年编程·docker·容器
嵌入式大圣1 小时前
Neko虚拟浏览器远程协作方案:Docker+内网穿透技术部署实践
运维·docker·容器
孔令飞2 小时前
Kubernetes 节点自动伸缩(Cluster Autoscaler)原理与实践
ai·云原生·容器·golang·kubernetes
dmy2 小时前
n8n内网快速部署
运维·人工智能·程序员
程序员JerrySUN2 小时前
全面理解 Linux 内核性能问题:分类、实战与调优策略
java·linux·运维·服务器·单片机
米粉03052 小时前
深入剖析Nginx:从入门到高并发架构实战
java·运维·nginx·架构
huangyuchi.3 小时前
【Linux】LInux下第一个程序:进度条
linux·运维·服务器·笔记·进度条·c/c++
moongoblin3 小时前
行业赋能篇-2-能源行业安全运维升级
运维·安全·协作