docker基本管理和概念:
docker是什么:开源的应用容器引擎。基于go语言开发的运行在linux当中的开源的,轻量级的“虚拟机”
docker的容器技术可以在一台主机上轻松的为如何应用创建一个轻量级的,可移植的,自给自足的容器。
docker的宿主机是linux系统。集装箱可以理解为相互隔离的容器(组件,应用程序APP),每一个容器都是一个独立的应用程序。
docker的设计宗旨:build,ship and run any app,anywhere
build:封装好的程序,只要不是即可使用。一次封装
ship and run any app:一次封装之后的程序,可以在任何环境运行。
anywhere:任意宿主机
一次封装,到处运行。
封装,发布,部署,运行,维护,运行,销毁。
可以一整套的方式管理应用程序的生命周期。
docker为什么受欢迎:
1,灵活,在复杂的应用也可以实现容器化
2,轻量级,小型的,不完整的,最小化封装的程序,与宿主机共享内核。
3,可互换:可以随时的升级,更新。
4,便携式:本地可以构建,在云平台上也可以实现部署。在任何地方运行
5,可扩展:自动分发容器副本。
6,可堆叠:在一个宿主机上可以创建不同版本的同一容器,也可以是多个版本的同一容器。
linux的命名空间 namespace。是一种内核特性。允许将一组系统资源隔离,在一个命名空间中的进程在系统当中可以拥有独立的资源。
面试题:namespace的六项隔离措施:
1,UTS(命名空间),系统调用参数:CLONE_NEWUTS,隔离内容:主机和域名,在UTS这个命名空间当中创建进程,进程可以看到自己的主机名和域名,与其他进程分割开。
2,IPC 系统调用的参数:CLONE_NEWIPC,隔离内容:信号量,消息队列,共享内存。在ipc这个命名空间之中,进行可以拥有独立的进程通信资源。
3,PID 系统调用参数:CLONE_NEWPID,隔离内容:每个进程都有独立的进程好空间。
4,network 系统调用参数:CLONE_NEWNT 隔离内容:网络设备,网络栈,以及端口。每一个进程都有一个自己独立的网络资源。端口号。
5,mount 系统调用的参数:CLONE_NEWNS,隔离内容:挂载点,在mount这个进程或者设备都有自己的文件系统挂载点,相互之间互不干扰。
6,user 系统调用的参数:CLONE_NEWUSER,隔离不同用户和用户组。
基于这六个隔离项,实现了容器和容器之间,以及容器和宿主机之间资源隔离。
docker的核心组件:
镜像:是docker的基础,最小单位。类似于虚拟机的ISO文件,一个镜像就是一个可执行的包,包里面包含了运行这个程序的所有内容(代码,配置文件,环境变量。)
docker镜像也是一个压缩包,不是一个解压文件,是一个环境部署脚本,甚至包含了完整的操作系统。nginx
容器:docker的容器就是基于镜像运行起来的实例,可以启动,停止,删除。每一个容器都是相互隔离的互不可见。
仓库:保存镜像,所有的镜像都是从仓库当中拉去的。可以有公有仓库
还可以是私有仓库。镜像都是从仓库中拉去,镜像也保存在仓库之中。
下载到了本地: 镜像 容器 日志/var/lib/docker 宿主机。
docker于虚拟机之间的区别 面试题:
特性 docker 虚拟机
启动速度 秒级 分钟级
计算能力损耗 几乎无 损耗50%
性能 接近于原生系统 弱于原生系统
系统支持量 上千个 硬件系统看来(几十个)
隔离性 资源隔离 完全隔离
安全性 安全性差 安全性高
安装docker
systemctl stop firewalld.service
setenforce 0
#安装依赖包
yum install -y yum-utils device-mapper-persistent-data lvm2
yum-utils
yum-config-manager具,可以远程自定义获取yum源
device-mapper-persistent-data lvm2
device-mapper: 1.进行逻辑卷管理的通用设备的映射机制。
2、Ivm2
#设置阿里云镜像源
yum-config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
#安装 Docker-CE并设置为开机自动启动
yum install -y docker-ce docker-ce-cli containerd.io
docker-ce
ddocker的社区版,面向开发者,消息团队和个人使用。免费
docker-ce-cli
提供docker的命令行工具。
contarnerd.io
负载管理容器的生命周期,创建,运行,停止,继续销毁。
docker只能支持64位系统。
systemctl start docker.service
systemctl enable docker.service
镜像加速下载
浏览器访问 阿里云登录 - 欢迎登录阿里云,安全稳定的云计算服务平台 获取镜像加速器配置
mkdir -p /etc/docker
tee /etc/docker/daemon.json
{
"registry-mirrors": ["https://6ijb8ubo.mirror.aliyuncs.com"]
}
EOF
systemctl daemon-reload
systemctl restart docker
查看 docker 版本信息
docker version
docker version 24版本
docker info:docker的信息
docker安装完成之后,客户端和服务端都在一起,都运行在一台机器上。
overlay2: docker使用的文件系统驱动。
overlayFS:overlsy file system:联合文件系统,用于适配宿主机的文件系统,可以自动适配。
lowerDir:底层目录
UpperDir:可写层
MergeDir:合并目录
workDir:工作目录
1,docker的镜像进行操作:
docker search 镜像名称
name:镜像的名称
DESCRIPTION:描述信息。
stars:点赞数量
OFFICIAL:官方镜像
AUTOMATED:自动化构建
docker pull nginx:1.22.0
指定拉取镜像版本
不指定版本就会下载最新版
REPOSITORY TAG IMAGE ID CREATED SIZE
centos latest 5d0da3dc9764 2 years ago 231MB
REPOSITORY:镜像属于的仓库;
TAG:镜像的标签信息,标记同一个仓库中的不同镜像;
IMAGE ID:镜像的唯一ID 号,唯一标识一个镜像;
CREATED:镜像创建时间;
VIRTUAL SIZE:镜像大小;
docker images 查看镜像
docker inspect 名称或id 查看镜像的详细信息。
lowerDir:底层目录 docker的底层文件系统,是一个或者多个镜像文件的根文件系统。
UpperDir:可写层 可以在容器内运行时,在容器内进行写操作。实现容器的可写性
MergeDir:合并目录 lowerdir和upperDir合并七七零,就是容器的文件系统,用户看到的就是这个合并的视图。
workDir:工作目录 处理文件系统的变更,当在容器内进行写操作时,overlayfs使用workdir来最终文件系统的变更。
docker tag centos:latest centos:new
可以给镜像打上标签,相当于硬链接
删除镜像
格式:
docker rmi 仓库名称:标签 #当一个镜像有多个标签时,只是删除其中指定的标签
或者
docker rmi 镜像ID号 #会彻底删除该镜像
删除标签只是删除标签名
删除id就是直接删除镜像
但只有一个的时候就会删除镜像
一个镜像有多个标签,删除时只是删除标签,只剩最后一个,删除的就是镜像本身。
如果镜像已经被镜像使用,先停容器,再生产容器,最后再删除镜像。
把镜像保存为本地文件
docker save -o /opt/centos.tar centos:7
还可以导出
docker load -i centos.tar
把镜像上传到仓库
docker tag nginx:latest soscscs/nginx:cc #添加新的标签时必须在前面加上自己的dockerhub的username
docker login #登录公共仓库
Username:soscscs
password:abc123456
docker push soscscs/nginx:cc
基于镜像来创建容器
格式:docker create [选项] 镜像
docker create -it nginx:latest /bin/bash
-i:让容器开启标准输入,接受用户的输入命令
-t:给这个容器分配一个终端,这是一个虚拟的伪终端
-it:线程一个宿主机和容器之间形成一个可以
查看容器的运行状态
docker ps -a #-a 选项可以显示所有的容器
开启容器:
docker start 容器的ID/名称
进入容器:
docker exec -it competent_swanson bash
创建并启动容器
可以直接执行 docker run 命令, 等同于先执行 docker create 命令,再执行 docker start 命令。
docker run -itd --name test1 nginx:1.22.0 /bin/bash
-d:可以让创建的容器已守护进程再后台运行,容器所运行的程序不会结束。
docker run -itd --name test1 nginx:1.22.0 /bin/bash
1、没有镜像能不能直接run?
2、运行的程序是什么?
1、没有镜像可以自动拉去
2、-d 结合一块,给容器持续运行的命令,后台没有指令,容器没有可运行的程序,将会直接退出。
docker run -itd --name test1 nginx:1.22.0 /bin/bash
#创建容器并持续运行容器
-it形成交互式会话
d后台运行/bin/bash
--name给容器命名
nginx:1.22.0:镜像名称和标签,如果本地没有。可以自动下载
进入容器:
docker exec -it competent_swanson bash
从容器当中复制出来改了再放进去
docker cp test1:/etc/nginx/nginx.conf /opt/
nginx.conf
docker cp /opt/nginx.conf 08a1cbf9c69e/etc/nginx
导入的容器要做标签区分否则就成none
导出的容器还是一个镜像,必须要run create才能成为容器。
已经配置号的导出的容器镜像,可以直接使用,(我们都是用已经开发已经设置,配置号的容器镜像。)
docker的特性:计算再创建过程中报错,容器还是会被创建,但是这个容器不可用
导入镜像,或者导入容器镜像,如果和已有标签重复,导入的镜像或者容器镜像,tag这一项就会变成none
如何来批量删除后台停止的
批量删除none镜像
总结:
docker:就是一个轻量级的虚拟机,宿主机是linux
docker 镜像 容器 仓库
docker search 搜索
docker pull nginx:1.22.0 获取镜像
docker rmi -f 强制生产镜像 (删除了在运行的镜像,对容器会有影响吗?)
docker tag nginx:1.22.0(在镜像中已有的标签) nginx:guoqi(给他的新标签,硬链接复制了源镜像)
docker save -o /opt/nginx.tar(一般用xxx.tar) nginx:1.22.0(这个镜像要以存在)
docker load -i xxx.tar
docker push pplok1230/nginx:guoqi
pplok1230:dockerhup的用户名 镜像名称和标签
docker容器:
-i
-t
-d
-itd:表示后台运行指定程序,而且创建一个交互式的shell.用户输入操作命令
docker run -itd nginx:1.22.0 --name test /bin/bash
如果容器中没有可执行命令,容器创建完成之后会立刻退出
docker exec -it 容器名/容器ID
docker ps 只显示正在运行的容器
docker ps -a 显示所有容器,包括没有运行的容器
导出:
docker export -o guoqi.tar 容器名/容器id
导入:
docker import guoqi.tar - nginx:guoqi (尽量不要重复标签名)
docker cp 容器名/容器ip:/etc/nginx/nginx.conf /opt
docker cp /opt/123.txt 器名/容器ip:/etc/nginx/nginx.conf
docker rm 删除容器
正在运行的容器
docker rm -f
docker srop
docker rm