导图社区 docker虚拟环境容器思维导图
这是一篇关于docker思维导图,Docker是一个虚拟环境容器,可以将开发环境、代码、配置文件等一并打包到容器中,并发布和应用到任意平台中。希望对你有所帮助!
编辑于2023-11-05 20:10:22docker
基本概念
Docker是一个虚拟环境容器,可以将开发环境、代码、配置文件等一并打包到容器中,并发布和应用到任意平台中 go语言实现的开源项目,遵从Apache2.0协议,项目代码在GitHub上维护
优点
快:运行时的性能快,管理操作(启动,停止,开始,重启等等) 都是以秒或毫秒为单位的。
轻量:容器内没有自己的内核,而且也没有进行硬件虚拟,将应用和系统“容器化”,不添加额外的操作系统
Docker制定了镜像标准,制定了容器的运行标准
开源的,免费,低成本
缺点:所有容器共用linux kernel资源,资源能否实现最大限度利用,所以在安全上也会存在漏洞。
docker-ce:社区版 docker-ee: 商业版
docker安装
基础软件包
yum-utils wget net-tools nfs-utils lrzsz gcc gcc-c++ make cmake libxml2-devel openssl-devel curl curl-devel unzip sudo ntp libaio-devel wget vim ncurses-devel autoconf automake zlib-devel python-devel epel-release openssh-server socat ipvsadm conntrack
依赖包
yum-utils :yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
device-mapper-persistent-data : Device Mapper 是 Linux2.6 内核中支持逻辑卷管理的通用设备映射机制,它为实现用于存储资源管理的块设备驱动提供了一个高度模块化的内核架构
lvm2 :逻辑卷管理
开启包转发功能和修改内核参数
br_netfilter模块用于将桥接流量转发至iptables链,br_netfilter内核参数需要开启转发
modprobe br_netfilter #向内核中加载模块
可设置 -重启机器模块自动加载
在/etc/新建rc.sysinit 文件 cat /etc/rc.sysinit #!/bin/bash for file in /etc/sysconfig/modules/*.modules ; do [ -x $file ] && $file done 在/etc/sysconfig/modules/目录下新建文件如下 cat /etc/sysconfig/modules/br_netfilter.modules modprobe br_netfilter 增加权限 chmod 755 /etc/sysconfig/modules/br_netfilter.modules 重启机器模块也会自动加载 [root@localhost ~]# lsmod |grep br_netfilter br_netfilter 22209 0 bridge 136173 1 br_netfilter
#非交互式写入 cat > /etc/sysctl.d/docker.conf <<EOF net.bridge.bridge-nf-call-ip6tables = 1 net.bridge.bridge-nf-call-iptables = 1 net.ipv4.ip_forward = 1 EOF
#使参数生效 sysctl -p /etc/sysctl.d/docker.conf
镜像加速器配置
/etc/docker/daemon.json
{ "registry-mirrors":["https://y8y6vosv.mirror.aliyuncs.com","https://registry.docker-cn.com","https://docker.mirrors.ustc.edu.cn","https://dockerhub.azk8s.cn","http://hub-mirror.c.163.com"] }
配置生效
sudo systemctl daemon-reload sudo systemctl restart docker
docker三要素
镜像
docker run --help #查看所有选项参数
类似于虚拟机中的ISO镜像,是一个包含有文件系统的面向Docker引擎的只读模板
唯一标识:Image ID
有关镜像的命令
docker images 查看本地镜像列表
docker search 镜像名 搜索镜像
docker pull 镜像名 : 拉取最新镜像 docker pull 镜像名:Tag 拉取指定版本镜像
docker run 镜像名 :运行镜像 docker run 镜像名:Tag
-a, --attach=[] 连接到stdin、stdout或stderr。 -c, --cpu-shares=0 # 设置cpu使用权重 –cidfile="" # 把容器id写入到指定文件 –cpuset="" # cpu绑定 -d, --detach=false # 后台运行容器 –dns=[] # 设置dns –dns-search=[] # 设置dns域搜索 -e, --env=[] # 定义环境变量 –entrypoint="" Overwrite the default entrypoint of the image #覆盖镜像的默认入口点 –env-file=[] # 从指定文件读取变量值 –expose=[] # 指定对外提供服务端口 -h, --hostname="" # 设置容器主机名 -i, --interactive=false # 保持标准输出开启即使没有attached –link=[] # 添加链接到另外一个容器 –lxc-conf=[] # 添加自定义lxc选项 --lxc-conf=“lxc.cgroup.cpuset.cpus = 0,1” -m, --memory="" # 内存限制 –name="" # 设置容器名 –net=“bridge” # 设置容器网络模式 ***** ‘bridge’: creates a new network stack for the container on the docker bridge ***** ‘none’: no networking for this container ***** ‘container:<name|id>’: reuses another container network stack ***** ‘host’: use the host network stack inside the container. ***** Note: the host mode gives the container full access to local system services such as D-bus and is therefore considered insecure. -P, --publish-all=false # 自动映射容器对外提供服务的端口 -p, --publish=[] # 指定端口映射 ***** format: ip:hostPort:containerPort | ip::containerPort | hostPort:containerPort ***** (use ‘docker port’ to see the actual mapping) –privileged=false # 提供更多的权限给容器 –rm=false # 如果容器退出自动移除和-d选项冲突 –sig-proxy=true Proxify received signals to the process (even in non-tty mode). SIGCHLD is not proxied. # 将接收到的信号代理到进程(即使在非tty模式下)。SIGCHLD未代理 -t, --tty=false # 分配伪终端 -u, --user="" # 指定运行容器的用户uid或者用户名 -v, --volume=[] Bind mount a volume (e.g., from the host: -v /host:/container, from docker: -v /container) # 挂载卷 –volumes-from=[] # 从指定容器挂载卷- -w, --workdir="" # 指定容器工作目录
docker run 的全部参数
docker save 镜像名/镜像ID -o 路径/名字 将镜像保存为tar文件利于转移和保存 docker load -i 加载文件恢复为镜像
docker tag image1:v1 image1:v2 对镜像打标签进行版本迭代,进行镜像区分
docker rmi -f 镜像名/镜像ID 删除一个镜像 docker rmi -f 镜像名/镜像ID 镜像名/镜像ID 镜像名/镜像ID #删除多个镜像 其镜像ID或镜像用用空格隔开即可 docker rmi -f $(docker images -aq) #删除全部镜像 -a 意思为显示全部, -q 意思为只显示ID docker image rm 镜像名称/镜像ID 强制删除镜像
容器
容器是镜像创建的应用实例,Docker引擎利用容器来运行、隔离各个应用,各个容器之间是是相互隔离的,互不影响
docker ps 查看正在运行容器列表
docker ps -a 查看所有容器 -----包含正在运行 和已停止的
docker run -it -d --name 要取的别名 镜像名:Tag /bin/bash # -it 表示 与容器进行交互式启动 -d 表示可后台运行容器 (守护式运行) --name 给要运行的容器 起的名字 /bin/bash 交互路径
docker stop 镜像名/镜像ID 停止容器
docker start 镜像名/镜像ID 启动已经停止的容器
docker exec -it 镜像名/镜像ID /bin/bash 进入容器
docker rm -f 镜像名/镜像ID 删除容器
仓库
Harbor介绍
Docker容器应用的开发和运行离不开可靠的镜像管理,虽然Docker官方也提供了公共的镜像仓库,但是从安全和效率等方面考虑,部署我们私有环境内的Registry也是非常必要的。Harbor是由VMware公司开源的企业级的Docker Registry管理项目,它包括权限管理(RBAC)、LDAP、日志审核、管理界面、自我注册、镜像复制和中文支持等功能。 官网地址:https://github.com/goharbor/harbor
docker私有镜像仓库harbor
为Harbor自签发证书
安装Harbor
docker hub官网 https://hub.docker.com/
dockerfile
概念 :Dockerfile 是一个用来构建镜像的文本文件,文本内容包含了一条条构建镜像所需的指令和说明。
dockerfile
构建过程
从基础镜像运行一个容器 执行一条指令,对容器做出修改 执行类似docker commit 的操作,提交一个新的镜像层 再基于刚提交的镜像运行一个新的容器 执行dockerfile中的下一条指令,直至所有指令执行完毕
书写规范
FROM 基础镜像,必须是可以下载下来的
MAINTAINER 指定镜像的作者信息
RUN 指定在当前镜像构建过程中要运行的命令 (Shell 、exec模式)
EXPOSE 提醒使用者,容器暴露的是什么端口
CMD :为启动的容器指定默认要运行的程序,程序运行结束,容器也就结束 类似于 RUN 指令,用于运行程序,但二者运行的时间点不同: 1、CMD 在docker run 时运行。 2、RUN 是在 docker build构建镜像时运行的
ENTERYPOINT 类似于 CMD 指令,但其不会被 docker run 的命令行参数指定的指令所覆盖,而且这些命令行参数会被当作参数送给 ENTRYPOINT 指令指定的程序。 如果需要重新指定ENTERYPOINT请使用 --entrypoint选项,将覆盖 entrypoint 指令指定的程序。
COPY # 复制指令,从上下文目录中复制文件或者目录到容器里指定路径。
ADD # 指令和 COPY 的使用格式一致 ADD包含类似tar的解压功能,如果单纯复制文件,dockerfile推荐使用COPY
VOLUME #定义匿名数据卷。在启动容器时忘记挂载数据卷,会自动挂载到匿名卷。 1、避免重要的数据,因容器重启而丢失,这是非常致命的。 2、避免容器不断变大。
WORKDIR #指定工作目录。用 WORKDIR 指定的工作目录,会在构建镜像的每一层中都存在。 (WORKDIR 指定的工作目录,必须是提前创建好的)
ENV #设置环境变量
USER #用于指定执行后续命令的用户和用户组,这边只是切换后续命令执行的用户(用户和用户组必须提前已经存在)
ONBUILD #用于延迟构建命令的执行
LABEL #用来给镜像添加一些元数据(metadata),以键值对的形式
HEALTHCHECK #用于指定某个程序或者指令来监控 docker 容器服务的运行状态。
ARG 构建参数,与 ENV 作用一至。不过作用域不一样。ARG 设置的环境变量仅对 Dockerfile 内有效,也就是说只有 docker build 的过程中有效,构建好的镜像内不存在此环境变量。
Docker容器
Docker容器数据管理
数据卷
概念
数据卷是经过特殊设计的目录,可以绕过联合文件系统(UFS),为一个或者多个容器提供访问,数据卷设计的目的,在于数据的永久存储,它完全独立于容器的生存周期,因此,docker不会在容器删除时删除其挂载的数据卷,也不会存在类似的垃圾收集机制,对容器引用的数据卷进行处理,同一个数据卷可以只支持多个容器的访问。
特点
1.数据卷在容器启动时初始化,如果容器使用的镜像在挂载点包含了数据,这些数据会被拷贝到新初始化的数据卷中 2.数据卷可以在容器之间共享和重用 3.可以对数据卷里的内容直接进行修改 4.数据卷的变化不会影像镜像的更新 5.卷会一直存在,即使挂载数据卷的容器已经被删除
使用
为容器添加数据卷
为容器添加数据卷 docker run -v /datavolume:/data -it centos /bin/bash
为数据卷添加访问权限 docker run --name volume1 -v ~/datavolume1:/data:ro -itd centos /bin/bash
使用dockerfile构建包含数据卷的镜像
FROM centos VOLUME ["/datavolume3","/datavolume6"] CMD /bin/bash 使用如下构建镜像 docker build -t="volume" . 启动容器 docker run --name volume-dubble -it volume 会看到这个容器下有两个目录,/datavolume3和/datavolume6
Docker的数据卷容器
概念
命名的容器挂载数据卷,其他容器通过挂载这个容器实现数据共享,挂载数据卷的容器,就叫做数据卷容器 挂载数据卷容器的方法 docker run --volumes-from [container name]
docker数据卷的备份和还原
docker数据卷的备份和还原
数据备份方法: docker run --volumes-from [container name] -v $(pwd):/backup centos tar czvf /backup/backup.tar [container data volume]
数据还原方法: docker run --volumes-from [container name] -v $(pwd):/backup centos tar xzvf /backup/backup.tar.gz [container data volume]
docker容器互联
docker 容器的网络基础
docker0: 安装docker的时候,会生成一个docker0的虚拟网桥 每运行一个docker容器都会生成一个veth设备对,这个veth一个接口在容器里,一个接口在物理机上。
安装网桥管理工具: yum install bridge-utils -y
docker 容器的互联
docker run --name test2 -itd --link=test1:webtest inter-image /bin/bash 登录test2容器 ping test1容器的ip别名webtest可以ping通,尽管test1容器的ip变了也可以通
docker容器的网络模式
Docker有以下4种网络模式
none模式 指创建的容器没有网络地址,只有本地lo地址
container模式 #和已经存在的none容器共享网络
bridge模式 默认选择bridge的情况下,容器启动后会通过DHCP获取一个地址
host模式 Docker网络host模式是指共享宿主机的网络
docker资源配额
docker控制CPU
-c --cpu-share
在创建容器时指定容器所使用的CPU份额值,仅仅是一个弹性的加权值
--cpuset-cpus #core核心控制
--cpuset-mems #
对多内存节点的服务器有效
压力测试软件 : Stress
docker控制内存
-m , --mem=""
docker控制IO
--device-write-bps value #限制此设备的写速度
--device-read-bps value # 限制此设备的读速度
docker自动释放资源
--rm value #容器运行结束后,在规定时间后自动删除容器
印象笔记的标题怎么设置啊