桥接模式 桥接模式是docker 的默认网络设置,当Docker服务启动时,会在主机上创建一个名为docker0的虚拟网桥,并选择一个和宿主机不同的IP地址和子网分配给docker0网桥。 bridge:桥接模式 host:主机模式 none:无网络模式 # 查看网络模式 [root@master ~]# docker network ls NETWORK ID NAME DRIVER SCOPE faa039ad2afb bridge bridge local 248060a373f7 host host local d89a824ed577 none null local 主机模式 host 模式:该模式下容器是不会拥有自己的ip地址,而是使用宿主机的ip地址和端口。 # 主机模式启动容器(不指定网络模式,默认使用桥接模式) docker run -itd --net=host mycentos:nginx /usr/local/nginx/sbin/nginx -g "daemon off;" # http://192.168.31.201 Welcome to n....
自定义镜像的常见方式 基于Docker Commit制作镜像 基于dockerfile制作镜像,Dockerfile方式为主流的制作镜像方式。 镜像的分层结构 多个容器层共享同一个镜像层 对容器的任何改动都是发生在容器层 容器层是可写可读,而镜像层只读 class : object [root@master ~]# docker history mycentos:v2 IMAGE CREATED CREATED BY SIZE COMMENT 6179c08f8204 17 minutes ago /bin/sh -c yum install -y net-tools 100MB 11f381c5e640 17 minutes ago /bin/sh -c #(nop) COPY file:8eda00bfac1c94e7… 0B 25cc0d469386 17 minutes ago /bin/sh -c #(nop) WORKDIR /home/soulboy 0B a6624f371c02 17 minutes ago /bin/sh -c echo "正在构建镜像!!!....
简介 Docker引擎是用来运行和管理容器的核心软件。基于开放容器计划(OCI)相关标准要求,Docker引擎采用了模块化的设计原则,其组件是可替换的。 Docker引擎主要组件构如下: Docker客户端 Docker守护进程 containerd runc 摆脱LXC LXC提供了对诸如:命名空间、控制组、等基础工具的操作能,他们是基于Linux内核的容器虚拟化技术。 因为LXC是基于Linux,这不利于Docker实现跨平台,其次,如果核心的组件依赖于外部工具,会给Docker项目带来巨大的风险。因此,Docker公司开发了名为Libcontainer的自研工具,用于替代LXC。Libcontainer的目标是成为与平台无关的工具,可基于不同内核为Docker上层提供必要的容器交互功能。在Docker 0.9版本中,Libcontainer取代 拆分大而全的Docker daemon 随着时间的退役,Docker daemon的整体性带来了越来越多的问题。 难于变更。 运行越来越慢。 Docker公司意识到这些问题,开始努力着手拆解大而全的Docker da....
分布式系统中多容器管理的困难 生产环境中同一种类型的容器往往散落在各个主机节点上,因此无法回避下列问题: 怎么去管理这么多容器? 怎么能方便的横向扩展? 如果容器down了,怎么能自动恢复? 如何去更新容器而不影响业务? 如何去监控追踪这些容器? 怎么去调度容器的创建? 保护隐私数据? Docker Swarm Mode Architecture 综上所述,容器编排应运而生,docker的容器编排工具的实现有很多,只不过swarm是内置于docker的容器编排工具,由docker公司内置到docker中。 Service & Replicas * 在docker swarm模式下Service的概念和Docker Compose中的概念基本一致。 * 在Replicas横向扩展模式下,每个Replicas都是一个实际的容器,每个容器都会根据调度系统的计算,被分配在不同的node上运行。也就是说,通过Swarm Manager部署去部署一个Service时候,其实是不知道容器最终会运行在哪些swarm节点上的,这取决于Swarm的调度算法的计算结果(例如:根据节点....
多容器的APP的痛点 要从Dockerfile build image或者Dockerhub拉取iage 要创建多个container 要管理这些container(启动停止删除) 一个应用可能由多个容器之间相互配合完成,追个容器进行管理成本高,将多个容器定义为一个组,对组进行统一的管理。 微服务架构的应用系统一般包含若干个微服务,每个微服务一般都会部署多个实例,如果每个微服务都要手动启停,那么效率之低,维护量之大可想而知。 Docker Compose简介 使用 Docker Compose 可以轻松、高效的管理容器,它是一个用于定义和运行多容器 Docker 的应用程序工具。 Docker Compose是一个工具。 这个工具可以通过yml文件定义多容器的docker APP。 通过一条命令就可以根据yml文件的定义去创建或管理多容器。 yml概念 Services 一个service代表一个container,这个container可以从dockerhub的image创建而来,或是从本地的Dockerfile build构建的image创建而来。 Service的....
Container Layer 数据默认会写在Container Layer层,如果删除容器则应用数据也会随之消失,应用数据的生命周期随容器的生命周期。 Docker持久化数据的方案 基于本地文件系统的Volume。可以在执行Docker create或Docker run时,通过-v参数将主机的目录作为容器的数据卷。 基于plugin的Volume,支持第三方的存储方案,比如NAS,AWS。 数据持久化:Data Volume * 受管理的Data Volume,由docker后台自动创建。 * 绑定挂载的Volume,具体挂载位置可以由用户指定。 不管以上哪种方式都需要在Dockerfile内指定VOLUME。 [root@localhost ~]# docker run -d --name mysql -e MYSQL_ALLOW_EMPTY_PASSWORD=true mysql # 查看volume [root@localhost ~]# docker volume ls local d4c4991c29f14a193f87460de0b847ec30f5f4d1....
私有镜像仓库 开通镜像服务 登录阿里云开通容器镜像服务。点击管理控制台-》初次使用会提示开通,然后设置密码。 点击管理 # 登录阿里云Docker Registry docker login --username=soulboy1990116 registry.cn-shanghai.aliyuncs.com # 从Registry中拉取镜像(拉取) [root@localhost ~]# docker pull registry.cn-shanghai.aliyuncs.com/abc1024/soulboy_images:flask-hello-world flask-hello-world: Pulling from abc1024/soulboy_images [root@localhost ~]# docker run -d -p 5000:5000 registry.cn-shanghai.aliyuncs.com/abc1024/soulboy_images:flask-hello-world Digest: sha256:8c4f6441a730d5abff5838....