1.Namespace--隔离进程,相对独立的运行空间
类型及功能
MNT Namespace(mount):系统磁盘挂载及文件系统的隔离空间,容器被宿主机分配到独立的目录下运行,使用chroot方式
IPC Namespace(Inter-Process Communication):进程间的通信隔离,不同进程间资源是严格隔离的
UTS Namespace:主机名隔离,容器可以有自己的主机名,容器间来讲主机名是相互隔离和独立的.
PID Namespace:进程ID隔离,容器内部的进程ID独立,确保每个容器以及宿主机的进程号不会因相同而出现问题
NET Namespace:网络隔离功能,宿主机会给每个容器分配至少一个虚拟网桥,通过虚拟网桥容器可以将自己的IP地址暴露(或NAT)出去,
USER Namespace:容器间的内部用户相互独立隔离,同时与宿主机也是隔离的.
2.docker命令:
docker run 启动一个容器,若本地没有镜像,则会在仓库拉取一个镜像,并创建
docker build 构建一个镜像,通常通过dockerfiles
docker commit 已经创建并修改过的容器打包为镜像
docker cp 拷贝文件,可以在容器和宿主机间拷贝
docker create 一般不用,run比较好用直接启动,create只创建不运行
docker diff 对比容器和镜像差异,
docker events 容器运行事件查看,是否正常退出等
docker exec -it .... sh/bash 进入容器打开shell终端,可进行linux命令操作
docker export 到处镜像文件系统
docker info 显示版本,运行时等信息
docker inspect 显示容器-镜像、网络、容器信息
docker kill 杀死一个容器,强制杀死
docker logs 查看容器的日志,类似var内的logz,message
docker pause 暂停一个或者多个容器
docker port 列出一个容器映射的端口
docker ps 列出容器
docker restart 重启容器
docker rm 删除容器 -f 强制
镜像相关
docker images 查看系统有哪些容器的镜像
docker login 登录镜像仓库
docker logout 登出镜像仓库
如下命令也可在docker后加 images 效果一样:
docker pull 从镜像仓库下载镜像
docker push 上传镜像到镜像仓库
docker tag 给镜像打一个tag标签
3.docker 存储引擎:使用UnionFS存储驱动模式,将docker运行所需的不同位置文件或目录mount到一个虚拟的目录下,分层存放,文件系统在最上层,可读可写,下层都是只读,实现方式:overlay2, 配置文件位置:/etc/docker/daemon.json:
"graph": "/var/lib/docker" 容器主目录(能看到文件系统等存放于此)
"storage-driver": "overlay2" (存储引擎)
4.docker -v:volume存储卷,-v就是说明操作会涉及文件系统存储卷,一般来说容器被销毁文件系统随之被删除,容器的销毁和创建就会引起数据丢失,所以一般会挂载其他位置的存储卷,做到数据永久保存,
docker volume create nginx-data ##创建挂载位置,在容器主目录下能看见此目录/var/lib/docker(docker rm -v 这个命令也会干掉这个目录,但是挂载指向的文件不会被干掉)
docker run -it -d -p 80:80 -v nginx-data:/data nginx:1.20.2 ##将宿主机的/data目录挂载到容器nginx的nginx-data -v参数后写明挂载目录
一把使用集中式存储或ceph等做永久存储,因为若是多节点的集群容器不一定飘到哪一个宿主机,在某一台创建永久存储位置,会引起挂载异常,同时数据也无法访问
5.docker -p: 端口映射,容器和宿主机间的网络通信方式,容器如果需要提供网络服务,就需要暴露端口,但是容器在宿主机上运行,容器的端口必须通过宿主机暴露出去,若多容器跑在一台宿主机,同时需要暴露端口,那每台容器需要绑定的宿主机的端口必须不同,徐事先规划好,以免引起冲突,导致服务异常.同样的每个容器内部若使用多个端口提供服务则也要区分好,但是容器间是不受影响的(NET Namespace 容器间网络是隔离的)
6.安装等实操截图后续补上(暂时实验环境有点问题)