
Docker
柳清风09
这个作者很懒,什么都没留下…
展开
-
window容器
先问大家一个问题,window上可以跑docker吗?当然可以,其实这句话有两层意思,第一层意思是,window上可以安装docker桌面版本,跑linux容器,本质上,是在window上面启动一个virtualbox的linux,然后在上面跑docker,毕竟runc的namespace和cgroup特性都需要内核支持,那么这就存在一个问题,如果是window的应用如何迁移到容器环境呢?这里引入第二个概念,在window上面跑window容器。废话不多说,我们先来个hello world可以看到成功原创 2021-01-14 21:06:50 · 727 阅读 · 0 评论 -
深入理解containerd里面snapshot
先问大家问题,containerd的snapshot是什么鬼? 难道是给容器做快照的吗?答案是: 是也不是为什么说是呢?它的确可以实现部分快照的功能,但他和常规意义的虚拟机快照又不是一回事。我们先看一下containerd是干嘛的?譬如我们拉镜像可以看到snapshot的服务作用是准备rootfs的,就是通过mount各个层,提供容器的rootfs。所有。content只是保存tar和mainfest和config文件的,是OCI那套东西,我们需要将他们逐一解压、mount后提供给容器。所以p原创 2020-12-26 11:41:47 · 4495 阅读 · 0 评论 -
k8s都开始抛弃dockerd了,ctr需要搞起了
明年的k8s将剔除docker shim,在未来dockerd大概率会淘汰,是时候搞起ctr。ctr是containerd客户端,虽然目前很多功能做的还没有docker那么完善,但基本功能已经具备了。下面我就来实操一下。主要有几个常用的自命名镜像镜像下载镜像列表查询这里需要注意PLATFORMS,它是镜像的能够运行的平台标识。其他从操作也都类似# ctr i -hNAME: ctr images - manage imagesUSAGE: ctr images comma原创 2020-12-13 20:11:32 · 5130 阅读 · 4 评论 -
写Dockerfile的一个小坑
下面是是一个简单的Dockerfile。FROM centosENV LANG en_US.UTF-8ENV TZ Asia/ShanghaiCOPY softs/jdk1.8.0_161 /opt/RUN set -ex && \rm /bin/sh && \ln -sv /bin/bash /bin/sh && \chmod ...原创 2020-03-30 15:57:20 · 728 阅读 · 0 评论 -
kubelet启动pod源码分析(三)
之前的blog分析了kubelet启动pod的流程,那么pod一旦启动了,谁去上报状态呢?还是回到之前代码syncLoopIteration,这个里面有四个输入源,第一次创建接受到configch add这个没有问题,然后是启动容器,此时会上报到容器正在创建的状态到apiserver,还会接收到收到configch reconcile。那么关键的来,什么时候上报成功的呢? pkg/kubelet原创 2017-12-19 11:07:47 · 39582 阅读 · 0 评论 -
docker 存储驱动之overlay
overlayOverlayFS是一个类似于AUFS 的现代联合文件系统,但更快,实现更简单。Docker为OverlayFS提供了一个存储驱动程序。 * 注:OverlayFS是内核提供的文件系统,overlay和overlay2是docker提供的存储驱动设置存储方式编辑/etc/docker/daemon.json{ "storage-driver": "ove原创 2018-01-31 12:51:07 · 44209 阅读 · 0 评论 -
docker 存储驱动之overlay2
overlay2overlay2原生支持128层,这提供docker build和docker commit更好的性能支持 在执行完docker pull ubuntu后,可以看到$ ls -l /var/lib/docker/overlay2total 24drwx------ 5 root root 4096 Jun 20 07:36 223c2864175491657d2原创 2018-01-31 12:52:29 · 51319 阅读 · 0 评论 -
kubernetes qos 全解析
kubernetes qos资源分类QOS是kubernetes保证服务质量的一个模块。 先介绍两个基本概览 * 可压缩资源:CPU 在压缩资源部分已经提到CPU属于可压缩资源,当pod使用超过设置的limits值,pod中进程使用cpu会被限制,但不会被kill。不可压缩资源:内存 Kubernetes通过cgroup给pod设置QoS级别,当资源不足时先kill优先级原创 2018-01-16 15:21:33 · 37401 阅读 · 0 评论 -
Docker 被重启故障
在生产环境中,docker和flannel都是通过systemd管理的,发生了一个奇怪的事情,当重启网络插件flannel的时候,docker daemon也发生了重启,这个很奇怪,按道理是各自独立运行的。细查日志,当重启flannel时候systemd也把docker重启了。# systemctl list-dependencies docker.service docker.serv...原创 2018-08-23 08:17:41 · 2269 阅读 · 0 评论 -
Docker 问题汇总
没法退出问题当我们通过exec进入docker容器后,执行完一大堆命令后执行exit退出发现没法退出,一直提示There are stopped jobs其实这个和docker本身没有关系,是控制台关联的后端程序没有停止,子程序没有退出 可以通过jobs命令查看后端任务。 ps 找出相关的进程,然后关闭即可...原创 2018-08-23 18:42:32 · 2416 阅读 · 0 评论 -
怎样通过pprof监控docker
debug模式启动docker$ /usr/bin/docker daemon -D -H tcp://0.0.0.0:2375 -H unix:///var/run/docker.sock通过socat端口转发$ socat -d -d TCP-LISTEN:8080,fork,bind=192.168.1.137 UNIX:/var/run/docker.sock测试[root@reg ppr原创 2017-12-11 17:34:40 · 38846 阅读 · 0 评论 -
Docker容器的生命周期管理
通过docker的API或者docker event命令,我们都可以获取到容器生命周期内发生了那些事情。首先把结论放出来,然后在看实现过程。 这个是实验的结论,那我怎么获取到这些状态和事件的呢?很简单,就是通过上面的api watch。 通过docker go client很容易实现func (w *watcher) watch() { filters := filters.NewA原创 2017-12-08 14:42:51 · 41997 阅读 · 0 评论 -
centos7 yum 安装Docker1.12
1.首先更新yum yum update 2.配置源 $sudo tee /etc/yum.repos.d/docker.repo<<-‘EOF’ [dockerrepo]name=Docker Repositorybaseurl=https://yum.dockerproject.org/repo/main/centos/7/ enabled=1 gpgcheck=1 gpgke原创 2016-12-05 19:42:35 · 1831 阅读 · 0 评论 -
docker源码编译问题
Docker编译问题原创 2016-12-13 14:05:22 · 10805 阅读 · 0 评论 -
kubernetes源码阅读之kubelet(二)
之前写了一篇kubelet启动的博客,如果感兴趣的可以去看看。其中很多细节没有描述,下面深入介绍一下部分细节。kubelet pods来源kubelet最重要的职责就是pod(多个容器)的生命周期管理,那pod的来源是哪里呢?看一下创建中一个容易忽略的函数func NewMainKubelet(kubeCfg *componentconfig.KubeletConfiguration, kubeDe原创 2017-04-05 15:31:46 · 9402 阅读 · 0 评论 -
Harbor 源码分析之仓库同步(五)
Harbor支持分布式的部署,镜像仓库成树状结构。镜像仓库有父子结构,通过定制策略可以实现父子仓库之前的同步,这样可以在多个数据中心之前完成镜像同步,因为每个数据中心内容器的启动肯定是从本数据中心内的镜像仓库去拉取镜像。 由于它是一个多租户的设计,可以设置同步的policy,这样控制哪些镜像去同步。是通过页面创建policy完成的src/ui/api/replication_policy.go原创 2017-05-19 17:24:54 · 3200 阅读 · 0 评论 -
Harbor 源码分析之状态机(五)
Harbor里面有很多job,譬如镜像同步,这些job有很多状态,应为job这执行过程中会有很多任务,在每种任务下面会有不同的任务状态,状态之前可以切换并触发动作,这个就是状态机,如果对Hadoop中的YARN调度熟悉可能知道,YARN里面就是通过状态机完成任务的管理和状态切换。下面介绍一下状态机type SM struct { JobID int64 Current原创 2017-05-19 20:34:11 · 1172 阅读 · 0 评论 -
容器CNI完全解读(一)
CNI(Container Network Interface)容器网络接口。CNI只专注解决容器网络连接和容器销毁时的资源释放,提供一套框架,所以CNI可以支持大量不同的网络模式,并且容易实现。 执行CNI需要传入一下变量# 添加或者删除网卡CNI_COMMAND=ADD/DEL# 容器的IDCNI_CONTAINERID=xxxxxxxxxxxxxxxxxxx# 容器网络空间主机映射路原创 2017-07-17 14:27:27 · 21097 阅读 · 0 评论 -
容器CNI完全解读bridge实现(二)
之前介绍CNI基本操作,现在介绍一个bridge的实现。 它也实现了创建和删除接口。 先看创建接口:func cmdAdd(args *skel.CmdArgs) error { n, cniVersion, err := loadNetConf(args.StdinData) if err != nil { return err } if n.Is原创 2017-07-17 14:46:35 · 19312 阅读 · 0 评论 -
Docker 时区问题定位以及解决
之前在docker启动的服务中,运行的有java和golang的程序,通常会出现时区问题,下面先看个列子 代码很简单,打印出时间package mainimport ( "fmt" "time")func main() { fmt.Println(time.Now())}如果运行机器时间没有问题,当然可以正确输出,先看机器时间dateWed Aug 23 07:50:原创 2017-08-23 08:04:43 · 29921 阅读 · 1 评论 -
谈谈我对Harbor认识
Harbor是什么第一次听到这个名字应该是2016年初的时候,那是在容器技术已经兴起的,各个容器管理平台正处于群雄逐鹿的时候,mesos、kubernetes、swarm等被国内外各个厂商用来作为容器的管理系统。这个时候突然冒出一个词harbor,港湾,同事是这样介绍的:几个VMware中国的人搞了一个容器镜像仓库。于是变成为harbor的第一批用户,后来也有幸成为contributor。说了半天,原创 2017-09-12 14:44:20 · 59494 阅读 · 6 评论 -
kubernetes源码阅读之kubelet启动
kubernetes源码阅读之kubelet启动原创 2016-08-19 16:30:13 · 38855 阅读 · 0 评论