前往小程序,Get更优阅读体验!
立即前往
发布
社区首页 >专栏 >Docker-番外篇之创建容器

Docker-番外篇之创建容器

作者头像
运维小路
发布2024-12-19 21:37:55
发布2024-12-19 21:37:55
390
举报
文章被收录于专栏:运维小路

作者介绍:简历上没有一个精通的运维工程师。下面的思维导图也是预计更新的内容和当前进度(不定时更新)。

我们在上一章,讲了虚拟化,虚拟化是把硬件虚拟化,然后创建出来的虚拟机完全隔离,而Docker则是软件(内核)虚拟化,他的隔离性会低于虚拟机。我们将通过3-4周来讲解Docker相关内容,由于涉及到内容较多,就不一一列出来具体的细节,主要从以下几个方面来讲解:

Docker基本情况

Docker基本命令

Dockerfile

Docker镜像

Docker仓库

Docker原理

Docker网络&存储&日志

Docker-Compose

Docker番外篇(本小节属于)

经过上小节的介绍,我们知道在docker里面同时存在docker进程和containerd进程,那他们之间的关系是咋样的呢?这个在不同的版本里面是否有区别呢?

版本:1.13.1

containerd是作为docker进程的子进程存在的。

代码语言:javascript
复制
root      9800     1  0 09:30 ?        00:00:12 /usr/bin/dockerd-current --add-runtime docker-runc=/usr/libexec/docker/docker-runc-current --default-runtime=docker-runc --exec-opt native.cgroupdriver=systemd --userland-proxy-path=/usr/libexec/docker/docker-proxy-current --init-path=/usr/libexec/docker/docker-init-current --seccomp-profile=/etc/docker/seccomp.json --selinux-enabled --log-driver=journald --signature-verification=false --storage-driver overlay2
root      9805  9800  0 09:30 ?        00:00:07 /usr/bin/docker-containerd-current -l unix:///var/run/docker/libcontainerd/docker-containerd.sock --metrics-interval=0 --start-timeout 2m --state-dir /var/run/docker/libcontainerd/containerd --shim docker-containerd-shim --runtime docker-runc --runtime-args --systemd-cgroup=true

版本:26.1.4

docker的进程和containerd的进程完全独立。

代码语言:javascript
复制
#docker进程
root      3685     1  0 Dec16 ?        00:00:08 /usr/bin/dockerd -H fd:// --containerd=/run/containerd/containerd.sock
代码语言:javascript
复制
#containerd进程
root      1217     1  0 Nov18 ?        00:22:05 /usr/bin/containerd

也就是早期的版本创建容器是属于进程内部通信,也就无法实现docker和containerd拆分,后期的版本进程独立,是可以进行拆分的。

修改日志级别

代码语言:javascript
复制
vi /usr/lib/systemd/system/docker.service
#启动参数里面添加一个-D 就等于打开debug模式
/usr/bin/dockerd -D
#重启docker服务 
systemctl daemon-reload 
systemctl restart docker
vi /usr/lib/systemd/system/containerd.service
#启动参数里面添加一个-l debug
/usr/bin/containerd -l debug
#重启containerd
systemctl daemon-reload 
systemctl restart containerd

创建容器日志

代码语言:javascript
复制
Dec 17 21:07:05 localhost.localdomain dockerd[5897]: time="2024-12-17T21:07:05.006119085+08:00" level=debug msg="Calling POST /v1.45/containers/create" spanID=cf4c8f28ee2e1af0 traceID=e4e0a173a0f18d229da43966bed8eabd
Dec 17 21:07:05 localhost.localdomain dockerd[5897]: time="2024-12-17T21:07:05.006239380+08:00" level=debug msg="form data: {\"AttachStderr\":false,\"AttachStdin\":false,\"AttachStdout\":false,\"Cmd\":null,\"Domainname\":\"\",\"Entrypoint\":null,\"Env\":null,\"HostConfig\":{\"AutoRemove\":false,\"Binds\":null,\"BlkioDeviceReadBps\":[],\"BlkioDeviceReadIOps\":[],\"BlkioDeviceWriteBps\":[],\"BlkioDeviceWriteIOps\":[],\"BlkioWeight\":0,\"BlkioWeightDevice\":[],\"CapAdd\":null,\"CapDrop\":null,\"Cgroup\":\"\",\"CgroupParent\":\"\",\"CgroupnsMode\":\"\",\"ConsoleSize\":[26,142],\"ContainerIDFile\":\"\",\"CpuCount\":0,\"CpuPercent\":0,\"CpuPeriod\":0,\"CpuQuota\":0,\"CpuRealtimePeriod\":0,\"CpuRealtimeRuntime\":0,\"CpuShares\":0,\"CpusetCpus\":\"\",\"CpusetMems\":\"\",\"DeviceCgroupRules\":null,\"DeviceRequests\":null,\"Devices\":[],\"Dns\":[],\"DnsOptions\":[],\"DnsSearch\":[],\"ExtraHosts\":null,\"GroupAdd\":null,\"IOMaximumBandwidth\":0,\"IOMaximumIOps\":0,\"IpcMode\":\"\",\"Isolation\":\"\",\"Links\":null,\"LogConfig\":{\"Config\":{},\"Type\":\"\"},\"MaskedPaths\":null,\"Memory\":0,\"MemoryReservation\":0,\"MemorySwap\":0,\"MemorySwappiness\":-1,\"NanoCpus\":0,\"NetworkMode\":\"default\",\"OomKillDisable\":false,\"OomScoreAdj\":0,\"PidMode\":\"\",\"PidsLimit\":0,\"PortBindings\":{},\"Privileged\":false,\"PublishAllPorts\":false,\"ReadonlyPaths\":null,\"ReadonlyRootfs\":false,\"RestartPolicy\":{\"MaximumRetryCount\":0,\"Name\":\"no\"},\"SecurityOpt\":null,\"ShmSize\":0,\"UTSMode\":\"\",\"Ulimits\":[],\"UsernsMode\":\"\",\"VolumeDriver\":\"\",\"VolumesFrom\":null},\"Hostname\":\"\",\"Image\":\"192.168.31.43:5000/nginx\",\"Labels\":{},\"NetworkingConfig\":{\"EndpointsConfig\":{\"default\":{\"Aliases\":null,\"DNSNames\":null,\"DriverOpts\":null,\"EndpointID\":\"\",\"Gateway\":\"\",\"GlobalIPv6Address\":\"\",\"GlobalIPv6PrefixLen\":0,\"IPAMConfig\":null,\"IPAddress\":\"\",\"IPPrefixLen\":0,\"IPv6Gateway\":\"\",\"Links\":null,\"MacAddress\":\"\",\"NetworkID\":\"\"}}},\"OnBuild\":null,\"OpenStdin\":false,\"StdinOnce\":false,\"Tty\":false,\"User\":\"\",\"Volumes\":{},\"WorkingDir\":\"\"}" spanID=cf4c8f28ee2e1af0 traceID=e4e0a173a0f18d229da43966bed8eabd
代码语言:javascript
复制
#先创建后启动
Dec 17 21:07:05 localhost.localdomain dockerd[5897]: time="2024-12-17T21:07:05.137182808+08:00" level=debug msg=event module=libcontainerd namespace=moby topic=/tasks/create
Dec 17 21:07:05 localhost.localdomain dockerd[5897]: time="2024-12-17T21:07:05.144851289+08:00" level=debug msg=event module=libcontainerd namespace=moby topic=/tasks/start
代码语言:javascript
复制
Dec 17 21:15:09 localhost.localdomain containerd[6708]: time="2024-12-17T15:15:09.186546049+08:00" level=info msg="starting signal loop" namespace=moby path=/run/containerd/io.containerd.runtime.v2.task/moby/cfd40170fb295e15abbbb84c4e4997974f0b573049efa0856cfcaa8e07e01869 pid=6832 runtime=io.containerd.runc.v2

每个容器的都是一个独立/usr/bin/containerd-shim-runc-v2 进程,这个进程同docker和containerd进程都没有从属关系。

每个容器的真实业务进程就是/usr/bin/containerd-shim-runc-v2进程的子进程。

管理进程和业务进程各自独立,这样我们就可以操作在不影响业务容器的情况下对上层控制组件进行升级。

创建容器流程

1.docker命令-->dockerd进程-->containerd进程-->runc命令

2.runc将容器创建成功以后,就会退出,然后由shim-runc来负责接管。

代码语言:javascript
复制
Dec 17 23:57:16 localhost.localdomain containerd[7337]: time="2024-12-17T23:57:16.797745220+08:00" level=info msg="loading plugin \"io.containerd.event.v1.publisher\"..." runtime=io.containerd.runc.v2 type=io.containerd.event.v1
Dec 17 23:57:16 localhost.localdomain containerd[7337]: time="2024-12-17T23:57:16.797825711+08:00" level=info msg="loading plugin \"io.containerd.internal.v1.shutdown\"..." runtime=io.containerd.runc.v2 type=io.containerd.internal.v1
Dec 17 23:57:16 localhost.localdomain containerd[7337]: time="2024-12-17T23:57:16.797840238+08:00" level=info msg="loading plugin \"io.containerd.ttrpc.v1.task\"..." runtime=io.containerd.runc.v2 type=io.containerd.ttrpc.v1
Dec 17 23:57:16 localhost.localdomain containerd[7337]: time="2024-12-17T23:57:16.797890713+08:00" level=debug msg="registering ttrpc service" id=io.containerd.ttrpc.v1.task
Dec 17 23:57:16 localhost.localdomain containerd[7337]: time="2024-12-17T23:57:16.797969870+08:00" level=debug msg="serving api on socket" socket="[inherited from parent]"
Dec 17 23:57:16 localhost.localdomain containerd[7337]: time="2024-12-17T23:57:16.797983085+08:00" level=info msg="starting signal loop" namespace=moby path=/run/containerd/io.containerd.runtime.v2.task/moby/9ab56f84f70ede4d5a4bc8a11a39d90eae0b2c7573689248af170bda4d6b164e pid=7471 runtime=io.containerd.runc.v2

3.删除停止容器也是一样的道理。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2024-12-18,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 运维小路 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档