极客时间《Kubernetes 入门实战课》之《入门篇 (8讲)》
极客时间 《Kubernetes 入门实战课》 by 罗剑锋
github上的配套学习项目
目录
《01|初识容器:万事开头难》
安装Docker Engine:
sudo apt install -y docker.io #安装Docker Engine
sudo service docker start #启动docker服务
sudo usermod -aG docker ${USER} #当前用户加入docker组
现在可以使用命令 docker version 和 docker info来验证 Docker 是否安装成功了。
但这时pull image会失败,需要配置docker镜像源:
sudo vim /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 restart docker
这里按阿里云镜像加速器文档配过镜像地址但是没用,拉镜像时会报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:alpine
docker exec命令可用来进入运行中的容器内部执行程序,和docker run的区别是它不会创建新的容器。
它最常见的用法是使用 -it 参数打开一个 Shell,从而进入容器内部,如:docker exec -it red_srv sh
《04|创建容器镜像:如何编写正确、高效的Dockerfile》
- 镜像的内部机制是什么
容器镜像内部并不是一个平坦的结构,而是由许多的镜像层组成的,每层都是只读的一组文件,相同的层可以在镜像之间共享,然后多个层像搭积木一样堆叠起来,再使用一种叫“Union FS 联合文件系统”的技术把它们合并在一起,就形成了容器最终看到的文件系统。
一个最简单的 Dockerfile 实例:
# Dockerfile.busybox
FROM busybox
CMD echo "hello 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 端口上:
docker run -d -p 80:80 --rm nginx:alpine
docker run -d -p 8080:80 --rm nginx:alpine
bridge模式下的容器和宿主机通过虚拟网卡接入同一个软件网桥。(我:一般是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:alpine
Docker Registry没有图形界面,提供了RESTful API,比如:
curl 127.1:5000/v2/_catalog
curl 127.1:5000/v2/nginx/tags/list
《08|视频:入门篇实操总结》
更多推荐

所有评论(0)