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

相关推荐
脸ル粉嘟嘟34 分钟前
linux(redhat8)如何安装mysql8.0之rpm&tar双版本(最新版)(内网)(离线)
linux·运维·adb
有来技术3 小时前
Docker 部署 MongoDB
mongodb·docker
陌殇殇殇4 小时前
基于Kubernetes编排部署EFK日志收集系统
云原生·容器·kubernetes
一个假的前端男4 小时前
VMware安装CentOS 9 及mysql的安装
linux·运维·centos
大风吹PP凉4 小时前
47小型项目的规划与实施
linux·运维·服务器
金鸣科技官方QQ5 小时前
高效制作定期Excel报表:自动化与模板化的策略
运维·自动化·excel
Bio Coder5 小时前
shell查看服务器的内存和CPU总量
运维·服务器·内存·cpu
ccnnlxc6 小时前
shell编程第四天(day036)
linux·运维·服务器
Jolen_xie6 小时前
Ubuntu下用Docker部署群晖系统---Virtual DSM --zerotier实现连接
linux·ubuntu·docker
BetterJason6 小时前
ubuntu22开机自动登陆和开机自动运行google浏览器自动打开网页
linux·运维·服务器