初识docker
1.docker基本管理和概念
docker是什么:开源的应用容器引擎,基于go语言开发的,运行在linux系统当中的开源的,轻量级的虚拟机
docker的容器技术可以在一台主机上轻松的为任何应用创建一个轻量级的,可移植的,自给自足的容器
docker的宿主机是linux系统,集装箱可以理解为相互隔离的容器(组件,应用程序APP),每个容器都是独立的应用程序。
2.docker的设计宗旨:build,ship and run any app,anywhere
bulid:封装好的程序,只有部署即可使用,一次封装
ship and run any app: 一次封装完成之后的程序,可以在任何环境运行。
anywhere:任意宿主机
一次封装,到处运行
封装,发布,部署,运行,维护,运行,销毁
可以一整套的方式管理应用程序的生命周期
3.docker为什么受欢迎
1.灵活:在复杂的应用也可以实现容器化
2.轻量级:小型的,不完整的,最小化封装的程序,与宿主机共享内核
3.可互换:可以随时的升级,更新
4.便携式:本地可以构建,在云平台上也可以实现部署,在任何地方运行
5.可扩展:自动分发容器副本
6.可堆叠:在一个宿主机上可以创建不同版本的同一容器,也可以是多个相同版本的同一容器
linux的命令空间:namespace 是一种内核的特性,允许将一组系统资源隔离,在一个命名空间中的进程在系统当中可以拥有独立的资源
4. namespace的六项隔离措施:
1.UTS(命名空间),系统调用参数:CLONE_NEWUTS,隔离内容:主机与域名,在UTS这个命名空间当中创建进程,进程可以看到自己的主机名和域名,与其他进程分隔开。
2.IPC 系统调用的参数:CLONE_NEWIPC,隔离内容:信号量,消息队列,共享内存。在IPC这个命名空间之中,进程可以拥有独立的进程间通信资源
3.PID 系统调用的参数:CLONE_NEWPID,隔离内容:每个进程都有自己的独立的进程号空间。
4.network 系统调用的参数:CLONE_NEWNET 隔离内容:网络设备,网络线,以及端口。每个进程都有一个自己独立的网络资源,端口号
5.mount 系统调用的参数:CLONE_NEWNS,隔离内容:挂载点,在mount这个命名空间之中,每个进程或者设备都有一个自己的文件系统挂载点,相互之间互不干扰。
6.user 系统调用的参数:CLONE_NEWUSER,隔离不同的用户和用户组
基于这个六个隔离项,实现了容器和容器之间,以及容器和宿主机之间的资源隔离。
5.docker的核心组件:
镜像:是docker的基础,最小单位。类似于虚拟机的ISO文件,一个镜像就是一个可执行的包,包含了这个程序的所有内容(代码,配置文件,环境变量)
docker镜像也是一个压缩包,不是一个解压的文件,是一个环境部署的脚本。甚至包含了完整的操作系统。
容器:docker的容器就是基于镜像运行起来的实例,可以启动,停止,删除。每一个容器都是相互隔离的,互不可见。
仓库:保存镜像,所有的镜像都是从仓库当中拉去的,可以有公有仓库,私有仓库。镜像都是从仓库中拉去,镜像也保存在仓库之中
下载到了本地:镜像 容器 日志 /var/lib/docker 宿主机
6.docker与虚拟机之间的区别:
特性 docker 虚拟机
启动速度 秒级 分钟级
计算能力损耗 几乎无 损耗50%
性能 接近于原生系统 弱于原生系统
系统支持量 上千个 硬件系统来看(几十个)
隔离性 资源隔离 完全隔离
安全性 安全性差 安全性高
安装docker
systemctl stop firewalld
setenforce 0
yum -y install yum-utils device-mapper-persistent-data lvm2
##
yum-utils 提供yum-config-manager工具 可以远程自定义获取yum源
device-mapper-persistent-data lvm2
device-mapper:1进行逻辑卷管理的通用设备映射机制。
2 lvm2
yum-config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
yum -y install docker-ce docker-ce-cli contarnerd.io
##
docker-ce
docker的社区版 面向开发者,小型团队和个人使用,免费
docker-ce-cli
提供docker的命令行工具
contarnerd.io
负载管理容器的生命周期,创建,运行,停止,继续,销毁
docker只能支持64位系统
systemctl restart docker
systemctl enable docker
systemctl status docker
docker version #查看版本号
docker info #查看docker所有信息
docker安装完毕之后,客户端和服务器都在一起,都运行在一台机器上
#
docker使用的文件系统驱动 overlays2
overlayFS:overlay file system :联合文件系统,用于适配宿主机的文件系统,可以自动适配。
lowerDir:底层目录 docker的底层文件系统,是一个或者多个镜像文件的跟文件系统
upperDir:可写层 可以在容器运行时,在容器内进行写操作,实现容器的可写性
MergeDir:合并目录 lowerdir和uppdir合并,就是容器的文件系统,用户看到的也就是这个合并的视图
workDir:工作目录 处理文件系统的变更,当在容器内进行写操作时,overlayfs使用workdir来追踪文件系统的变更
1.docker的镜像进行操作:
如何搜索镜像
docker search 镜像名称
##
mkdir -p /etc/docker
tee /etc/docker/daemon.json <<-'EOF' { "registry-mirrors": ["https://t7pjr1xu.mirror.aliyuncs.com"] } EOF
systemctl daemon-reload
systemctl restart docker
docker pull centos
docker images #查看镜像
docker pull centos:7 #下载
docker images
docker pull centos
docker inspect ID
docker images
docker tag centos:latest centos:new #修改标签
docker images
docker rmi centos:latest #删除标签
docker rmi ID
docker save -o /opt/centos.tar centos:7#复制到 /opt/centos.tar
docker images
dock rmi centos:7 #删除
docker load -i centos.tar #加载
镜像的上传:
docker images
docker tag centos:7 guoqi6666/centos:guoqi
docker login
guoqi6666
g18912953731
docker push guoqi6666/centos:guoqi
基于镜像创建容器
docker create -it centos:7 /bin/bash
#-i 让容器开启标准输入,接受用户的输入命令
-t 给这个容器分配一个终端,这是一个虚拟的终端
-it 形成一个宿主机和容器之间形成一个可以交互shell的命令
docker ps #查看正在运行的容器
docker ps -a 查看所有的容器(没运行和有运行)
docker start 容器id #运行容器
docker exec -it 容器名 bash #进入容器操作
exit 退出
docker run -itd --name test1 nginx:1.22.0 /bin/nash
#容器以守护
-d:可以让创建的容器 以守护进程再后台运行,容器所运行的程序不会结束
1.没有镜像能不能之间run
2.运行的程序是什么
3、没有镜像可以自动拉取
4 -d结果,给容器持续运行的命令,后台没有指令,容器没有可以运行的程序,将会之间退出
docker run -itd --name test1 nginx:1.0.12.0 /bin/bash
-it 形成交互会话
d 后台运行 /bin/bash
docker cp test1:/etc/nginx/nginx.conf /opt
导出镜像
docker export -o nginx1.22.tar test1
删除容器:
docker rm -f test1
或者
docker stop
导出的容器还是一个镜像,必须要run create 才能成为容器
已经配置好的导出的容器镜像,可以直接使用(我们都是用的开发已经设置,配置好的容器镜像)
docker的特性:即使创建过程中报错。容器还是会被创建,但是这个容器不可用
导入镜像,或者导入容器镜像,如果和已有标签重复,导入的镜像或者容器镜像,tag这一项就会变成none
如何批量删除后台停止的容器
docker ps -a
docker rm $(docker ps -a -q)
批量停止
docker ps -a | awk 'NR>=2{print "docker stop" $1 }' | bash
批量删除
docker ps -a | awk 'NR>=2{print $1}' | xargs docker rmi -f
docker images | grep "none" | awk '{print $3}' | xargs docker rmi -f
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!