docker概念
微服务:不再是以完整的物理机为基础的服务软件,而是借助于宿主机的性能。以小量的形式,单独部署的应用。
docker:是一个开源的应用容器引擎,基于go语言开发的,使用时apache2.0的协议。docker是在Linux里面运行的容器化的开源工具。是一种轻量级的虚拟机。
鲸鱼是宿主机,集装箱是一个个独立的应用。每个应用之间都是相互隔离和独立的
docker的设计的宗旨
1、封装
2、发布
3、部署
4、运行
5、销毁
容器的生命周期————>达到一次封装,多次运行的目的。
可移植,可扩展,兼容性的目的。随时对地都可以快速的部署和使用docker的应用。
docker应用的隔离
docker是在Linux上运行,与其他的容器共享主机的内核,包括其他的资源(cpu,内存,硬盘),但是docker应用都是独立的进行,为什么能做到独立:
Linux的命名空间namespace可以实现资源的隔离
Linux的cgroup可以实现对docker应用程序的资源限制
namespace是Linux内核的一种特性,允许将一组系统资源进行隔离,是一种命名空间中的进程看起来像在系统中拥有独立的资源。
namespace的6个命名空间
1、UTS 隔离主机名和域名:系统调用的参数,在每个应用中,都能看到自己的主机名和域名,与其他进程分隔开。
2、PID 隔离进程:隔离内容:进程编号,当运行应用之后,每个应用都有自己的独立的进程编号的空间,每个进程之间不会发生冲突。
3、network 隔离网络:每个应用启动之后,都有自己的独立的网络空间,隔离网络设备、端口和网络栈。
4、mount 隔离文件系统:隔离文件系统,每个应用挂载之后都有之间独立的文件系统挂载点,这些挂载点互补冲突,也不会互相干扰。
5、IPC 隔离信号量:隔离信号量,消息队列和共享内存,在IPC隔离当中,每个进程之间都有独立的通信资源。
6、user 隔离用户和用户组:每个用户和组都是独立的命名空间,不同的用户和组之间都是隔离开的。
docker的核心概念
仓库:docker的仓库是用来保存镜像的地方,也是获取镜像和上传镜像的目的地。
镜像:docker镜像是创建容器的基础,一个镜像就类似于一个可执行的、包含源码的二进制包,包括容器运行的参数、设置、环境变量和配置文件。是一个打包好的可运行程序。
容器:容器是基于镜像创建的运行的实例
docker基本命令
查看当前下载到本地的镜像-docker images
- REPOSITORY:应用的名称
- TAG:镜像的标签,应用的版本
- IMAGE ID:镜像在本地的唯一标识
- CREATED:发布在镜像仓库的时间
- SIZE:镜像的大小
查看镜像的详细信息-docker inspect
查看镜像的详细信息-docker inspect 镜像ID
镜像下载完保存在/var/lib/docker/
overlay2:镜像的联合文件系统,有四层。
- lowerDir:镜像的底层文件系统,整个镜像的根文件系统(运行载体)
- upperDir:可写层,用户可以自定义的在底层文件系统上进行修改,但是这些修改又不影响根文件系统,容器可以实现读写。
- mergedDir:合并目录,就是用户看到的容器内的一个视图
- workDir:工作目录,进行写操作时,可以是联合文件系统overlay2更新和跟踪对于文件系统的修改。
创建镜像副本-docker tag
docker tag nginx:1.22 nginx:自定义标签:相当于给nginx:1.22做了一个副本
镜像的组成:镜像名:标签
删除镜像-docker rmi -f
docker rmi -f nginx:1.22/ID:删除镜像
导出/导入镜像-docker save/load
docker save -o /opt/centos.tar centos:7:把本地镜像导出到指定位置,保存为指定名称
docker load -i centos.tar:把镜像导入到本地docker中
创建容器-docker run -itd
docker run -itd ubuntu:22.04:如何基于镜像创建容器
- -i:表示容器开启标准输入,接受用户输入的指令。
- -t:生成一个伪终端tty,用户可以进入容器的内部。
- -d:容器创建完之后进入后台运行
- run:如果不存在指定的镜像,他会自动拉取仓库指定的镜像然后再创建容器。拉取+运行
查看运行状态的容器-docker ps
docker ps -a:查看所有状态的容器,包括运行和停止以及报错的容器。
Up:表示容器正在运行中
出现exit的原因:容器启动之后,都会有一个执行的命令,如果该命令执行完毕之后没有其他的可执行内容,那么容器会立刻退出进入终止状态。
进入容器内部-docker exec -it 容器id bash
docker exec -it 容器id/名称 /bin/bash | bash:进入容器内部操作
创建自定义名称容器-docker run -itd --name
docker run -itd --name 自定义名称 容器名称:给容器自定义名称
容器:基于镜像的配置和环境,创建一个基于Linux系统的,在这个系统当中安装了指定应用的小型虚拟机。
宿主机和容器文件传输-docker cp
1、宿主机的文件复制到容器内部:docker cp 文件名 容器名:/路径
2、容器的文件复制到宿主机:docker cp 容器名:/文件名 宿主机目录
查看容器的日志-docker logs -f
查看容器的标准输出:查看容器的日志
docker logs -f 容器名称
端口映射
-P:指定宿主机随机端口和容器内的端口映射,从32768——65535。
-p:需要人工指定宿主机的端口和容器进行映射,只要指定端口宿主机没有被占用都可以使用。
创建一个以nginx:1.22镜像的容器test1,指定宿主机随机端口和容器内的80端口映射
- 82:宿主机端口,80:容器端口
删除容器-docker rm -f
docker rm -f 容器名称:强制删除容器
- 容器是基于镜像创建的,但是容器一旦运行,镜像不再是依赖条件,镜像可以删除,不影响部署的容器。
查看容器IP地址
批量删除容器
1、批量删除后台所有已经停止的容器
2、批量删除所有容器