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

相关推荐
Java陈序员9 小时前
轻量强大!一款现代化的 Kubernetes 集群管理与监控工具!
云原生·容器·kubernetes
爱吃橘子橙子柚子1 天前
3CPU性能排查总结(超详细)【Linux性能优化】
运维·cpu
Sheffield2 天前
Docker的跨主机服务与其对应的优缺点
linux·网络协议·docker
Sheffield2 天前
Alpine是什么,为什么是Docker首选?
linux·docker·容器
马艳泽2 天前
win10下运行Start Broker and Proxy报错解决
docker
舒一笑3 天前
程序员效率神器:一文掌握 tmux(服务器开发必备工具)
运维·后端·程序员
NineData3 天前
数据库管理工具NineData,一年进化成为数万+开发者的首选数据库工具?
运维·数据结构·数据库
用户13573999256603 天前
Windows 从 0 搭建 WSL2 原生 AI 开发环境:Codex + Docker + VSCode
docker
vi_h3 天前
在 macOS 上通过 Docker 安装并运行 Ollama(详细可执行教程)
macos·docker·ollama
黑心老魔3 天前
通过 Docker 创建开发环境
docker·开发环境