Docker入门-二
2021/5/17 8:25:10
本文主要是介绍Docker入门-二,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
Docker
- docker commit container repository:tag
- docker history
- docker inspect
- 大部分情况,COPY优于ADD!
- ADD除了COPY还有额外功能(解压)
- CMD
- 容器启动时默认执行的命令
- 如果docker run指定了其它命令,CMD命令被忽略
- 如果定义了多个CMD,只有最后一个会执行
- ENTRYPOINT
- 让容器以应用程序或者服务的形式运行
- 不会被忽略,一定会执行
- 最佳实践:写一个shell脚本作为entrypoint
- stress
WORKDIR/test #如果没有会自动创建test目录 WORKDIR demo RUN pwd# 输出结果应该是/test/demo
- 私有库
/etc/docker/daemon.json添加insecure-registries
/lib/systemd/system/docker.service添加EnvironmentFile
- docker registry api 查看私有库
网络
- ping ip可达性
- telnet 服务可达性
- namespace
-
ip netns add test
ip netns list
ip netns exec test ip a
ip link
ip netns exec test ip link set dev lo up
ip link add veth-test1 type veth peer name veth-test2
ip link set veth-test1 netns test
ip link set veth-test2 netns test2
ip netns exec test1 ip addr add 192.168.1.1/24 dev veth-test1
ip netns exec test2 ip addr add 192.168.1.2/24 dev veth-test2
ip netns exec test1 ip link set dev veth-test1 up
ip netns exec test1 ip link set dev veth-test2 up
ip netns exec test1 ping 192.168.1.2
docker network ls
yum install bridge-utils
brctl
- 容器之间的link,但是link命令是单向的
docker network create -d bridge my-bridge
docker network connect my-bridge 容器名
- 端口映射
- container none host(端口冲突)
- VXLAN
- 虚拟局域网扩展(Virtual Extensible LAN, VXLAN)是一种网络虚拟化技术,它试图改善大云计算部署相关的可扩展性问题。它采用类似VLAN封装技术封装基于MAC含括第 4 层的UDP数据包的 OSI 第2层 以太网帧 ,使用 4789 作为默认分配的 IANA 目的地 UDP 端口号。
- 虚拟局域网扩展(Virtual Extensible LAN, VXLAN)是一种网络虚拟化技术,它试图改善大云计算部署相关的可扩展性问题。它采用类似VLAN封装技术封装基于MAC含括第 4 层的UDP数据包的 OSI 第2层 以太网帧 ,使用 4789 作为默认分配的 IANA 目的地 UDP 端口号。
nohup ./etcd --name docker-node1 --initial-advertise-peer-urls http://192.168.205.10:2380 \ --listen-peer-urls http://192.168.205.10:2380 \ --listen-client-urls http://192.168.205.10:2379,http://127.0.0.1:2379 \ --advertise-client-urls http://192.168.205.10:2379 \ --initial-cluster-token etcd-cluster \ --initial-cluster docker-node1=http://192.168.205.10:2380,docker-node2=http://192.168.205.11:2380 \ --initial-cluster-state new&
nohup ./etcd --name docker-node2 --initial-advertise-peer-urls http://192.168.205.11:2380 \ --listen-peer-urls http://192.168.205.11:2380 \ --listen-client-urls http://192.168.205.11:2379,http://127.0.0.1:2379 \ --advertise-client-urls http://192.168.205.11:2379 \ --initial-cluster-token etcd-cluster \ --initial-cluster docker-node1=http://192.168.205.10:2380,docker-node2=http://192.168.205.11:2380 \ --initial-cluster-state new&
./etcdctl cluster-health
在docker-node1上
$ sudo service docker stop $ sudo /usr/bin/dockerd -H tcp://0.0.0.0:2375 -H unix:///var/run/docker.sock --cluster-store=etcd://192.168.205.10:2379 --cluster-advertise=192.168.205.10:2375&
在docker-node2上
$ sudo service docker stop $ sudo /usr/bin/dockerd -H tcp://0.0.0.0:2375 -H unix:///var/run/docker.sock --cluster-store=etcd://192.168.205.11:2379 --cluster-advertise=192.168.205.11:2375&
Data volume
- Volume类型
- 受管理的data Volume,由docker后台自动创建。
-v mysql:/var/lib/mysql
- 绑定挂载的Volume,具体挂载位置可以由用户指定。
- 受管理的data Volume,由docker后台自动创建。
compose
- 一个service代表一个container,这个container可以从 dockerhub的image来创建,或者从本地的Dockerfile build出来的image来创建
- Service的启动类似docker run,我们可以给其指定 network和volume,所以可以给service指定network和 Volume的引用
docker-compose up --scale servicename = n
启动多个- 结合haproxy转发可以形成端口转发
Swarm
docker swarm init --advertise-addr=192.168.205.10
--advertise-addr (ip could be found through "docker-machine Is")
swarm join --token ********** 192.168.205.10:2377
docker service
docker service scale service=replics
- swarm保证横向扩展与有效数量,随机分配主机,同步overlay网络,创建虚拟网络IP映射真实IP
docker network create -d overlay demo docker service create --name mysql --env MYSQL_ROOT_PASSWORD=root --env MYSQL_DATABASE=wordpree --mount type=volume,source=mysql-data,destination=/var/lib/mysql mysql docker service create --name wordpress -p 80:80 --env WORDPRESS_DB_PASSWORD=root --env WORDPRESS_DB_HOST=mysql --network demo wordpress
docker network create -d overlay demo docker service create --name whoami -p 8080:8080 --network demo -d jwilder/whoami docker service create --name client -d --network demo busydbox sh -c "while true;do sleep 3600; done"
- Routing Mesh的两种体现
- Internal——Container和Container之间的访问通过overlay网络(通过VIP虚拟IP)
- Ingress——如果服务有绑定接口,则此服务可以通过任意swarm节点的相应接口访问
- 容器和容器通信通过overlay
- Service和Service通过vip
iptables -nL -t nat 查看本地ip转发规则 iptables -nL -t mangle # mangle表主要用于修改数据包的TOS(Type Of Service,服务类型)、TTL(Time To Live,生存周期)指以及为数据包设置Mark标记,以实现Qos(Quality Of Service,服务质量)调整以及策略路由等应用 brctl show 查询网桥信息 nsenter --net=/var/run/docker/netns/ingress_sbox 进入 ingress_sbox ipvsadm -l ipvsadm是LVS在应用层的管理命令,可以看到负载均衡到的两个ip
- Ingress Network
- 外部访问的负载均衡
- 服务端口被暴露到各个swarm节点
- 内部通过IPVS进行负载均衡
- 自动化部署-ansible
- 应用与配置分离,一次构建,多处运行-Spring Cloud Config
- 提供应用健康监测的接口-Spring Cloud Actuator
- 蓝绿发布
- 在这种部署软件的方法中,维护了两个相同的主机环境一个“蓝色"和一个“绿色"。(颜色并不重要,仅作为标识。)对应来说,其中一个是“生产环境”,另一个是“预发布环境”。
- 在这些实例的前面是调度系统,它们充当产品或应用程序的客户“网关"。通过将调度系统指向蓝色或绿色实例,可以将客户流量引流到期望的部署环境。通过这种方式,切换指向哪个部署实例(蓝色或绿色)对用户来说是快速,简单和透明的。
- 金丝雀部署
- 一部分客户流量被重新引流到新的版本部署中。例如,新版本的搜索服务可以与当前服务的生产版本一起部署。然后,可以将10%的搜索查询引流到新版本,以在生产环境中对其进行测试。
- 如果服务那些流量的新版本没问题,那么可能会有更多的流量会被逐渐引流过去。如果仍然没有问题出现,那么随着时间的推移,可以对新版本增量部署,直到100%的流量都调度到新版本。
- 功能开关
- 对于可能需要轻松关掉的新功能(如果发现问题),开发人员可以添加功能开关(feature toggles)。这是代码中的if-then软件功能开关,仅在设置数据值时才激活新代码。
- 此数据值可以是全局可访问的位置,部署的应用程序将检查该位置是否应执行新代码。如果设置了数据值,则执行代码;如果没有,则不执行。
- 这为开发人员提供了一个远程“终止开关",以便在部署到生产环境后发现问题时关闭新功能。
- Release(发布,单位为月)
- Sprint(冲刺,单位为周)
- Sprint 需要关联带开发的任务
- Sprint 需要被关联到某一个Release- Issue(问题)类型
- Epic(史诗)
- Story(用户故事)
- 定义用户故事的类型
- 定义用户故事的内容描述
- 分配给某个开发者
- 用1,2,3到10个点数来评估任务的故事点,工作量复杂度,风险和不确定性
- Task(任务)
- 定义任务内容描述
- 设定任务期望完成的时间
- Bug(故障)
- Sprint(冲刺,单位为周)
- 每日站会
- Scrum Master 主持
- 建议每日早上举行
- 每人回答3个问题
- 昨天做了什么
- 今天要做什么
- 有什么Blocker问题,需要什么帮助
- Gitflow是一种分支开发模型,来源于Vincent Driessen的 文章"A successful Git branching model"
- 软件本身对稳定性要求高
- 团队少量资深研发,多数初,中级研发
- 开源项目
- 主干开发分支模型
- 同一个产品开发的所有人员共享一个Repository,所有修改最后都会回到主干
- 只有在Release时才会有官方的分支,只有Release Engineer可以更动Release Branch,当Release Branch完成它的任务,就会被砍掉
- Bug先在trunk修复,之后把Commit合并到Release Branch,而不是在Release Branch修好再整合到trunk,这样可以把修改Release Branch的人限制在最小程度。
- 软件本身迭代较快
- 团队中级,资深研发较多,初级研发较少
- 互联网产品
- 创建Spring cloud服务注册中心
- 创建服务注册中心服务Discovery-service
- 在application.yaml 文件中配置Eureka
- 在代码中声明Eureka 服务
- 访问Spring Cloud 服务注册中心-Eureka
- mvn package,java -jar target/discovery-service.jar
- 网关
Mesos
- Marathon特征
- 高可用
- 健康检查
- Constraints
- 事件订阅
- 服务发现&负载均衡
- 完善的RESTAPI
- Mesos特征
- 强大的资源管理
- Kernel和Framework分离
- 门槛较低,易于使用
- 大厂使用
K8s
-
Pod运行多个容器,Service中多个Pod
-
Deployment中可以运行多个容器或者Pod
-
Node 是 Pod 真正运行的主机,可以是物理机,也可以是虚拟机。
-
ControllerManager 维护集群状态,扩缩容,故障检测,Scheduler 资源调度,ETCD 一致性存储
-
Kubernetes scheduler-preselect
- NodiskConflict
- FitResource
- CheckNodeMemoryPressure
- Affinity
- NodeSelector
-
Kubernetes scheduler-optimize-select
- SelectorSpreadPriority
- LeastRequestedPriority
- AffinityPriority
-
Kubernetes服务发现
- Kube-proxy(ClusterIP)
- Kube-proxy(NodePort)
- Kube-DNS
-
认证方式
- 客户端证书,TLS双向认证
- Bearer Token
- ServiceAccount (namespace ,token,ca)
-
鉴权
- ABAC , Webhook,
- 依赖 RoleBinding ClusterRoleBinding
- 准入控制 Admission Control 授权后对请求进一步验证
-
集群方案
- Binary
- Kubeadm
- 社区方案
cicd
- docker-compose 文件格式转换成 deployment
这篇关于Docker入门-二的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-11-19Docker-Compose容器集群化项目实战:新手入门指南
- 2024-11-19Docker镜像仓库项目实战:新手入门教程
- 2024-11-19Docker容器化部署项目实战:新手入门教程
- 2024-11-19Docker-Compose容器集群化资料入门教程
- 2024-11-19Docker镜像仓库资料详解:新手入门教程
- 2024-11-19Docker容器化部署资料:新手入门指南
- 2024-11-19Docker-Compose容器集群化教程:从入门到实践
- 2024-11-19Docker镜像仓库教程:新手入门指南
- 2024-11-19Docker容器化部署教程:初学者指南
- 2024-11-18Docker-Compose容器集群化入门教程