learn-tech/专栏/Kubernetes入门实战课/08视频:入门篇实操总结.md
2024-10-16 06:37:41 +08:00

182 lines
7.4 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

因收到Google相关通知网站将会择期关闭。相关通知内容
08 视频:入门篇实操总结
你好我是Chrono。
今天的课程和前面的不太一样变成了视频的形式。之前也讲过很多次学习Kubernetes要以动手实操为主加上专栏里单纯的文字配图的形式还是不太直观所以每到一个学习阶段我们就会来一个视频总结把之前学习的内容以视频的形式展现出来这样也许会让学习的效果更好。
这次视频课程的主要内容和第7讲差不多是对“入门篇”的回顾与总结但侧重点是对Docker的实际操作不会再重复讲那些理论知识。每个视频后都会附上操作要点供你快速定位和做笔记。
好了,我们正式开始吧。
一. 熟悉Docker的使用
视频操作要点:
首先来操作一下Docker Engine。
(有了[课前准备]的基础在这台机器上Docker已经安装好了我给你用 docker version 和 docker info 看一下它的信息。
docker version 显示的是Docker Engine 20.10.12系统是Linux硬件架构是arm64也就是Apple M1。
docker info 显示的是当前系统相关的信息例如CPU、内存、容器数量、镜像数量、容器运行时、存储文件系统等等。这里存储用的文件系统是overlay2Linux内核是5.13操作系统是Ubuntu 22.04 Jammy Jellyfish硬件是aarch64两个CPU内存4G。
现在我们用 docker ps 看一下容器列表,应该是空的。
然后用 docker pull 拉取busybox镜像再用 docker images 看镜像列表。
使用 docker run 启动busybox镜像执行最简单的hello world
docker run busybox echo hello world
然后再用 docker ps -a 查看已经结束的容器列表应该可以看到刚刚运行完毕的Busybox容器可以用 docker rm 再加上容器ID删除它。
二. 镜像和容器
视频操作要点:
我们再来拉取另一个镜像操作系统Alpine
docker pull alpine
然后用 docker run加上it参数运行它里面的shell
docker run -it alpine sh
这样就暂时离开当前的Ubuntu操作系统进入了容器内部的Alpine系统可以在里面执行任意的命令比如 cat /etc/os-release 。
这个容器环境与外面是完全隔离的,进程、文件系统都独立,不过也有没有隔离的部分,比如时间和内核。
使用exit退出容器然后在宿主机环境执行date、uname -a你就可以看到它与容器里是一致的。
让我们再运行一个容器:
docker run -d --rm nginx:alpine
在宿主机里用 ps -ef|grep nginx 可以看到有3个Nginx进程它们其实就是容器里的Nginx进程用docker stop停止后再用ps就能发现它们已经消失了。
这就证明容器其实就是操作系统里的进程只是被容器运行环境加上了namespace、cgroup、chroot的限制所以容器和普通进程在资源的使用方面是没有什么区别的也因为没有虚拟机的成本启动更迅速资源利用率也就更高。
三. 构建自己的镜像
视频操作要点:
现在让我们来尝试编写Dockerfile构建一个自己的镜像。
这个Dockerfile先用arg指令定义了IMAGE_BASE、IMAGE_TAG两个变量然后使用from指令指定了构建的基础镜像把这两个变量结合起来就是 nginx:1.21-alpine 。
后面的两个env指令定义了PATH和DEBUG两个环境变量。arg指令定义的变量只能在构建镜像的时候使用而env定义的变量则会在容器运行的时候以环境变量的形式出现让进程运行时使用。
接下来是copy指令它会把构建上下文里的./default.conf拷贝到镜像的/etc/nginx/conf.d/注意copy指令不能使用绝对路径必须是构建上下文的相对路径而且Docker会把构建上下文里的所有文件打包传递给docker daemon所有尽量只包含必要的文件。
run指令就是构建镜像时要执行的shell命令可以是安装软件、创建目录、编译程序等等这里只是简单地用echo命令生成了一个文本文件。
最后两条指令是 expose 和 workdirexpose 是声明容器对外服务的端口号,而 workdir 是容器的工作目录。
了解了Dockerfile的内容之后我们就要用 docker build 来构建镜像了,使用 -t 打上标签,再加上构建上下文路径,当前目录就用一个点号 .
docker build -t ngx-app:1.0 .
构建完成,生成镜像文件,我们可以用 docker run 从镜像启动容器,验证镜像里的文件是否正确生成:
docker run -it --rm ngx-app:1.0 sh
然后我们还可以用 docker save/load 命令把它导出成压缩包,方便保存和传输:
docker save ngx-app:1.0 -o ngx.tar
docker load -i ngx.tar
四. 与外部系统互通的操作
视频操作要点:
接下来我们看看容器与外部系统互通的一些操作。
首先是 docker cp 命令。让我们先启动一个Redis容器
docker run -d --rm redis
然后用 echo 命令生成一个简单的文本文件:
echo 'aaa' > a.txt
用 docker ps 命令看看容器的ID就可以使用 docker cp 命令把这个文件拷贝进容器里了:
docker cp a.txt 062:/tmp
使用 docker exec 可以进入容器内部,查看文件是否已经正确拷贝:
docker exec -it 062 sh
ls /tmp
退出容器,我们再把这个文件改个名字,拷贝出来:
docker cp 062:/tmp/a.txt ./b.txt
现在我们再看看用 -v 参数直接挂载本地目录,把文件直接映射到容器内部:
docker run -d --rm -v /tmp:/tmp redis
用 docker exec 进入容器,查看一下容器内的“/tmp”目录应该就可以看到文件与宿主机是完全一致的。
docker exec -it b5a sh # b5a是容器ID
-p 参数是映射本机端口到容器端口我们启动一个Nginx容器把本机的80端口映射到容器的80端口
docker run -d -p 80:80 --rm nginx:alpine
docker ps 可以看到端口的映射情况我们也可以使用curl直接访问容器里的Nginx服务
curl 127.1:80 -I
再使用exec就可以看到容器里的网卡情况
docker exec xxx ip addr
可以发现容器里的网卡设置与宿主机完全不同eth0是一个虚拟网卡IP地址是B类私有地址“172.17.0.2”。
五. 搭建WordPress
视频操作要点:
最后演示一下使用Docker搭建WordPress的过程。
因为在Docker命令里写环境变量很麻烦命令很长所以我把搭建的过程写成了一个脚本。
一共有三条命令首先启动MariaDB设置数据库名、用户名、密码等环境变量然后启动WordPress使用刚才的MariaDB的用户名、密码db_host必须是MariaDB的IP地址然后再启动Nginx它需要在配置文件里指定WordPress的地址然后用-v参数挂载进容器里。
执行这个脚本之后,我们用 docker ps 看一下容器的状态。
确认容器都运行正常我们就可以在浏览器里输入IP地址访问WordPress网站了。
课下作业
今天是动手操作课,作业就是一定记得让自己实际上手操作一遍哦。
欢迎在留言区分享自己的实操感受,如果有什么疑问也欢迎留言分享参与讨论。我们下节课初级篇见。