极客时间《Kubernetes 入门实战课》之《入门篇 (8讲)》

📅 2026/8/20 15:42:17
极客时间《Kubernetes 入门实战课》之《入门篇 (8讲)》
极客时间 《Kubernetes 入门实战课》 by 罗剑锋github上的配套学习项目全笔记《开篇词 (2讲)》《入门篇 (8讲)》《初级篇 (9讲)》《中级篇 (8讲)》《高级篇 (10讲)》《加餐分享 (2讲)》目录《01初识容器万事开头难》《02被隔离的进程一起来看看容器的本质》《03容器化的应用会了这些你就是Docker高手》《04创建容器镜像如何编写正确、高效的Dockerfile》《05镜像仓库该怎样用好Docker Hub这个宝藏》《06打破次元壁容器该如何与外界互联互通》《07实战演练玩转Docker》《08视频入门篇实操总结》《01初识容器万事开头难》安装Docker Enginesudoaptinstall-ydocker.io#安装Docker Enginesudoservicedockerstart#启动docker服务sudousermod-aGdocker${USER}#当前用户加入docker组现在可以使用命令docker version和docker info来验证 Docker 是否安装成功了。但这时pull image会失败需要配置docker镜像源sudovim/etc/docker/daemon.json{registry-mirrors:[https://docker.m.daocloud.io,https://docker.mirrors.ustc.edu.cn,https://hub-mirror.c.163.com]}systemctl daemon-reload systemctl restartdocker这里按阿里云镜像加速器文档配过镜像地址但是没用拉镜像时会报403 Forbidden错误《02被隔离的进程一起来看看容器的本质》容器的基本实现技术是 Linux 系统里的 namespace、cgroup、chroot豆包容器本质就是宿主机上一组被限制、被隔离的普通Linux进程《03容器化的应用会了这些你就是Docker高手》docker run -d nginx:alpine后台运行Nginxdocker run -d --name red_srv redis后台运行Redisdocker run -it --name ubuntu 2e6 sh使用IMAGE ID登录Ubuntu–rm的例子docker run -d --rm nginx:alpinedocker exec命令可用来进入运行中的容器内部执行程序和docker run的区别是它不会创建新的容器。它最常见的用法是使用 -it 参数打开一个 Shell从而进入容器内部如docker exec -it red_srv sh《04创建容器镜像如何编写正确、高效的Dockerfile》镜像的内部机制是什么容器镜像内部并不是一个平坦的结构而是由许多的镜像层组成的每层都是只读的一组文件相同的层可以在镜像之间共享然后多个层像搭积木一样堆叠起来再使用一种叫“Union FS 联合文件系统”的技术把它们合并在一起就形成了容器最终看到的文件系统。一个最简单的 Dockerfile 实例# Dockerfile.busyboxFROM busybox CMDechohello world这里第一条指令表示选择构建使用的基础镜像第二条指令CMD指定启动容器时默认运行的命令。docker build -f Dockerfile.busybox .这里的.表示构建上下文为当前目录-f参数用来指定Dockerfile如果不指定就使用当前目录下名字是Dockerfile的文件。因为没有带-t参数创建出来的镜像没有名字docker images命令要带上-a参数才能看到COPY指令可用于从docker build命令里指定的构建上下文目录向镜像拷贝文件。.dockerignore文件语法与 .gitignore 类似排除那些不需要的文件。RUN通常会是Dockerfile里最复杂的指令会包含很多的Shell命令但 Dockerfile里一条指令只能是一行所以有的RUN指令会在每行的末尾使用续行符\命令之间也会用来连接。为此可以采用一种变通的技巧把这些Shell命令集中到一个脚本文件里用 COPY 命令拷贝进去再用 RUN 来执行。Dockerfile里可以使用指令ARG和ENV创建变量。EXPOSE指令用来声明容器对外服务的端口号。上图中这种PORTS里没有成对出现的端口都是Dockerfile里声明了暴露端口, 创建容器时却没有对其进行映射见下文。《05镜像仓库该怎样用好Docker Hub这个宝藏》Docker默认的镜像仓库也就是大名鼎鼎的Docker Hub目前需要科学上网。Docker 提供了 save 和 load 这两个镜像归档命令可以把镜像导出成压缩包或者从压缩包导入 Docker离线环境可以自己搭建私有镜像仓库, 已经有很多成熟的解决方案比如 Docker Registry还有 CNCF Harbor《06打破次元壁容器该如何与外界互联互通》Docker cp 命令可以在宿主机和容器之间拷贝文件。docker run 命令启动容器的时候使用-v参数具体的格式是“宿主机路径:容器内路径”把宿主机的指定目录挂载到容器里实现宿主机与容器之间的共享。如何实现网络互通Docker提供了三种网络模式分别是 null、host 和 bridge默认。bridge模式的一大优点在于通过端口映射解决了潜在的端口冲突问题。端口号映射需要使用 bridge 模式并且在 docker run 启动容器时使用 -p 参数形式和共享目录的-v参数很类似用:分隔本机端口和容器端口。比如启动两个Nginx容器分别跑在宿主机的 80 和 8080 端口上dockerrun-d-p80:80--rmnginx:alpinedockerrun-d-p8080:80--rmnginx:alpinebridge模式下的容器和宿主机通过虚拟网卡接入同一个软件网桥。我一般是172.17.0.x 这个私有地址的网段《07实战演练玩转Docker》搭建私有镜像仓库有很多现成的解决方案今天选择最简单的Docker Registry:docker pull registry 下载Docker Registry使用 docker tag 命令给镜像打标签。因为不是上传到默认的 Docker Hub而是本地的私有仓库所以镜像的名字前面加上仓库的地址比如docker tag nginx:alpine 127.0.0.1:5000/nginx:alpine运行Docker Registry docker run -d -p 5000:5000 registry此时就可以把nginx镜像上传至本地私有仓库了docker push 127.0.0.1:5000/nginx:alpine从本地私有仓库拉镜像docker pull 127.0.0.1:5000/nginx:alpineDocker Registry没有图形界面提供了RESTful API比如curl127.1:5000/v2/_catalogcurl127.1:5000/v2/nginx/tags/list《08视频入门篇实操总结》