docker的一些概念
docker虚拟化与普通虚拟化的区别主要是解耦方式不同。
docker虚拟化占用资源少,使用宿主机的内核,生成容器时他会只产生一些必要的文件,更节省空间。
Namespace:docker使用Namespace来解决容器之间的冲突的。namespace意思是名称空间,隔离容器。
仔细划分可分为6种:
IPC:共享内存,消息列队
MNT:挂载点,文件系统
NET:网络栈
PID:进程编号
USER:用户,组
UTS:主机名
Cgroup:Cgroup意思是控制组,用来限制容器使用的资源。
镜像:镜像是容器运行的基石,容器是镜像运行之后的实例。就是容器是依靠镜像来产生。而容器的主要内容由使用的镜像决定的。
docker的一些基础命令
以下命令以httpd和nginx为例:
//查找镜像
docker search nginx
查找 镜像名
//下载镜像
docker pull httpd:latest
拉取 镜像名称(如果不加冒号后的,就是默认下载最新版本的httpd镜像)
//上传镜像
docker push httpd:latest
上传 镜像名称
//加载镜像(将镜像文件加载成镜像)
docker load -i httpd.tar
docker load < httpd.tar
//将镜像打包镜像文件(两条指令一样的)
docker save -o mynginx.tar nginx:latest
保存 输出为 文件名 使用的镜像
docker save > mynginx.tar nginx:latest
//将容器制作成镜像
docker commit -a "作者" -m "说明性文字" mynginx mynginx:v1
容器名 保存的镜像名
//镜像改名,改版本
docker tag httpd:latest myhttpd:v1
改标签 已有镜像名 更改后的镜像名:标签(可以写版本信息)
//删除镜像
docker rmi nginx:latest
删除镜像 镜像名称
//停止容器
docker stop 容器名称
//删除容器(需要先将容器停止)
docker rm 容器ID或者容器名称
//启动容器
docker start 容器名称
//强制删除正在运行的容器
docker rm 容器名称 -f
//强制删除镜像(将所有依赖这个容器的镜像都停止,就可以强制删除镜像了)
docker rmi -f 镜像id
//强制删除所有容器
docker ps -a -q | xargs docker rm -f
//开启所有容器
docker ps -a -q | xargs docker start -f
//关闭所有容器
docker ps -a -q | xargs docker stop -f
//基于镜像运行一个容器
docker run -itd --name test01 httpd:latest
run:运行一个容器
-i:交互模式
-t:模拟一个伪终端
-d:保持后台运行
–name:容器的名字
httpd:latest:httpd服务的镜像
-v:挂载目录
–restart=always:重启docker时,自动开启容器
//查看本地所有镜像
docker image ls
docker images
//查看本地正在运行的容器
docker ps
//查看本地所有容器
docker ps -a
//创建一个容器
docker create -it --name test1 busybox:latest
创建
//进入一个容器
第一种方法:
docker exec -it test1 /bin/bash
进入时,需要添加-i,-t选项,后边添加一个shell环境。如果执行exit,就是退出容器,但是容器会保持运行状态,不会关闭。
第二种方法:
docker attach test1
进入
如果执行exit退出,容器会关闭。如果想要保持容器的开启状态,需要使用键盘ctrl+p和ctrl+q,就能在退出容器的时候,使容器仍然运行。
这两条本质上的区别:exec进入方法会生成新的进程,但是attach不会生成新的进程