
linux-tutorial 仓库 Docker 教程详解从容器原理、核心命令到 Dockerfile 与 Compose 编排实战【免费下载链接】linux-tutorial:penguin: Linux教程主要内容Linux 命令、Linux 系统运维、软件运维、精选常用Shell脚本项目地址: https://gitcode.com/GitHub_Trending/lin/linux-tutorial本文以 docs/docker/README.md 为总纲系统梳理 linux-tutorial 仓库中整套 Docker 学习路径——涵盖 Docker 快速入门、Cheat Sheet、Dockerfile 最佳实践、Docker Compose 编排与 Kubernetes 应用指南并结合 codes/docker/docker-compose-demo 提供的可直接运行的 Compose 示例帮助你从「理解容器原理」到「写出生产可用的镜像与编排文件」完成闭环。读完本文你将掌握镜像/容器/仓库三大核心概念、常用 docker 命令速查、Dockerfile 全部关键指令及最佳实践以及用 docker-compose 一键拉起多容器应用的能力。一、Docker 核心概念与价值1. 什么是 DockerDocker 属于 Linux 容器的一种封装提供简单易用的容器使用接口是当前最流行的 Linux 容器解决方案。它将应用程序与依赖打包在一个文件中运行这个文件即生成一个虚拟容器程序在容器内运行就像在真实物理机上运行一样从而彻底摆脱环境问题。容器还可以进行版本管理、复制、分享、修改就像管理普通代码一样。2. 为什么需要 Docker更高效地利用系统资源容器无需硬件虚拟化、无需运行完整操作系统对 CPU、内存、文件存储的利用率更高相同配置的主机可运行更多应用。更快的启动时间容器直接运行于宿主内核无需启动完整 OS可实现秒级甚至毫秒级启动。一致的运行环境镜像提供除内核外完整的运行时环境避免「这段代码在我机器上没问题啊」的经典环境不一致问题。持续交付和部署通过 Dockerfile 构建镜像可无缝对接 CI/CD 体系构建透明、便于运维理解运行条件。更轻松的迁移物理机、虚拟机、公有云、私有云乃至笔记本上运行结果一致跨平台迁移成本低。更轻松的维护和扩展分层存储使公共部分可复用基于基础镜像扩展定制非常容易。3. Docker 的三大用途一次性环境本地测试他人软件CI 中提供单元测试和构建环境。弹性云服务容器随开随关天然适配动态扩容缩容。微服务架构一台机器通过多个容器跑多个服务本机即可模拟微服务架构。4. 核心概念镜像Image、容器Container、仓库Repository概念说明镜像 Image相当于一个 root 文件系统包含程序、库、资源、配置及运行时参数如匿名卷、环境变量、用户不含动态数据构建后不可变容器 Container镜像是静态定义、容器是运行时实体二者如同面向对象中「类与实例」的关系容器本质是运行于独立命名空间中的进程仓库 Repository集中存储、分发镜像的服务Registry中的一个命名集合仓库名:标签精确定位某个版本省略标签默认latest分层存储镜像基于 Union FS 设计为分层架构构建时一层层叠加前一层是后一层的基础每层构建完不再改变删除前一层文件只是在当前层标记删除文件仍跟随镜像因此构建时每层只应包含必要内容。容器存储层随容器消亡而消亡最佳实践要求容器存储层保持无状态化所有写入应使用数据卷Volume或绑定宿主目录——数据卷生命周期独立于容器容器删除后数据不丢失。仓库命名镜像构建后可发布到 Registry仓库名常以两段式路径出现如jwilder/nginx-proxy前半多为用户名、后半为软件名。二、Docker 安装与运维1. 安装验证与用户组不同操作系统的安装方式不同可参考官方安装指南。安装完成后验证docker version docker infoDocker 需要 sudo 权限为避免每次输入 sudo可将用户加入 Docker 用户组sudo usermod -aG docker $USER2. 启动 Docker 服务Docker 是服务器-客户端架构命令行执行 docker 命令需要本机 Docker 服务已启动# service 命令用法 sudo service docker start # systemctl 命令用法 sudo systemctl start docker3. 国内镜像加速配置国内访问 Docker Hub 较慢可配置镜像仓库提速。常用镜像仓库镜像仓库地址说明DaoCloud 镜像站http://f1361db2.m.daocloud.io需开通 DaoCloud 账户获取专属加速器阿里云https://yourcode.mirror.aliyuncs.com需开通阿里开发者账户在控制台查看专属地址网易云https://hub-mirror.c.163.com直接配置即可较为稳定以 CentOS 配置网易镜像为例修改/etc/docker/daemon.json不存在则新建sudo mkdir -p /etc/docker cat /etc/docker/daemon.json EOF { registry-mirrors: [ https://hub-mirror.c.163.com ] } EOF重启使配置生效sudo systemctl daemon-reload sudo systemctl restart docker执行docker info查看Registry Mirrors是否变为配置的地址即可确认成功。三、Hello World 实战镜像拉取、运行与终止通过最简单的 hello-world 镜像感受 Docker 工作流。国内连接官方仓库较慢时可先按上文配置镜像加速。拉取镜像# library 是官方镜像默认组可省略 docker image pull library/hello-world docker image pull hello-world查看本地镜像docker image ls运行容器docker container run具有自动抓取功能本地没有会先自动 pulldocker container run hello-world成功会输出 Hello from Docker! 提示随后 hello-world 自动终止。交互式运行不会自动终止的容器如体验 Ubuntu 系统docker container run -it ubuntu bash手动终止容器docker container kill [containID]四、制作 Docker 容器完整实战流程1. 准备项目与 .dockerignore以 Koa 项目为例先获取源码并在项目根目录新建.dockerignore排除无需打包的内容git clone 项目地址 cd 项目目录.dockerignore内容.git node_modules npm-debug.log2. 编写 DockerfileFROM node:8.4 COPY . /app WORKDIR /app RUN npm install --registryhttps://registry.npm.taobao.org EXPOSE 3000指令含义FROM node:8.4继承官方 node 镜像标签为 8.4 版本COPY . /app将当前目录所有文件排除项除外拷贝进镜像/appWORKDIR /app指定后续工作路径RUN npm install在/app安装依赖依赖全部打包进镜像EXPOSE 3000暴露容器 3000 端口允许外部连接。3. 构建镜像docker image build -t koa-demo . # 或指定版本标签 docker image build -t koa-demo:0.0.1 .-t指定镜像名冒号后为标签默认 latest末尾.表示 Dockerfile 所在路径当前目录。4. 生成容器并验证docker container run -p 8000:3000 -it koa-demo /bin/bash # 或指定标签 docker container run -p 8000:3000 -it koa-demo:0.0.1 /bin/bash参数说明-p容器 3000 端口映射到本机 8000 端口-it容器的 Shell 映射到当前 Shell本机输入直接传入容器/bin/bash容器启动后执行的第一个命令保证可用 Shell。进入容器后会出现root66d80f4aaf1e:/app#提示符此时可在容器内运行应用。访问 http://127.0.0.1:8000 可看到效果。Node 进程运行在容器的虚拟环境中文件系统与网络接口均与宿主机隔离因此需要显式定义端口映射。停止与清理# 本机另一终端查出容器 ID docker container ls # 停止容器 docker container kill [containerID] # 查看含已停止容器 docker container ls --all # 删除容器 docker container rm [containerID]也可用--rm参数容器终止后自动删除容器文件docker container run --rm -p 8000:3000 -it koa-demo /bin/bash5. 用 CMD 固化启动命令将启动命令写入 Dockerfile容器启动即自动执行无需手动输入FROM node:8.4 COPY . /app WORKDIR /app RUN npm install --registryhttps://registry.npm.taobao.org EXPOSE 3000 CMD node demos/01.jsRUN 与 CMD 的区别RUN在镜像构建阶段执行结果打包进镜像CMD在容器启动后执行。一个 Dockerfile 可有多个RUN但只能有一个CMD。指定CMD后docker container run不能再附加命令否则覆盖 CMD。此时启动容器docker container run --rm -p 8000:3000 -it koa-demo:0.0.16. 发布镜像到仓库注册 Docker Hub 账户后docker login # 为本地镜像标注用户名和版本 docker image tag koa-demos:0.0.1 [username]/koa-demos:0.0.1 # 或不标注用户名直接重新构建 docker image build -t [username]/[repository]:[tag] . # 发布 docker image push [username]/[repository]:[tag]发布成功后可登录 hub.docker.com 查看已发布镜像。五、Docker 命令速查Cheat Sheet本节内容整理自 docs/docker/docker-cheat-sheet.md。1. 容器生命周期与启动停止命令作用docker create创建容器但不启动docker rename重命名容器docker run一键创建并启动容器docker rm [-f]删除容器-f 强制删除运行中容器发送 SIGKILLdocker update调整容器资源限制docker start/stop/restart启动/停止/重启容器docker pause/unpause暂停/恢复容器冻结当前状态docker kill向容器发送 SIGKILLdocker wait阻塞等待容器停止docker attach连接到运行中的容器常用技巧docker run -td container_id后台运行并保持容器存活docker run --rm容器停止后自动删除docker run -v $HOSTDIR:$DOCKERDIR映射宿主机目录。CPU 限制# cpu-shares1024 表示 100% CPU512 即使用所有内核的 50% docker run -ti --c 512 agileek/cpuset-test # 指定使用特定 CPU 内核 docker run -ti --cpuset-cpus0,4,6 agileek/cpuset-test内存限制docker run -it -m 300M ubuntu:14.04 /bin/bash能力Capabilities与设备# 挂载 FUSE 文件系统 docker run --rm -it --cap-add SYS_ADMIN --device /dev/fuse sshfs # 授予某设备访问权限 docker run -it --device/dev/ttyUSB0 debian bash # 授予所有设备访问权限 docker run -it --privileged -v /dev/bus/usb:/dev/bus/usb debian bash2. 容器信息与执行命令docker ps # 查看运行中容器 docker ps -a # 查看所有容器含已停止 docker logs # 读取容器日志 docker inspect # 查看容器全部信息含 IP docker events # 获取容器事件 docker port # 查看容器公开端口 docker top # 查看容器内活动进程 docker stats # 查看容器资源使用量统计 docker diff # 查看容器文件系统改动 docker exec -it foo /bin/bash # 进入运行中的 foo 容器3. 镜像生命周期与导入导出docker images # 查看所有镜像 docker import # 从归档文件创建镜像 docker build # 从 Dockerfile 创建镜像 docker commit # 为容器创建镜像运行中会临时暂停 docker rmi # 删除镜像 docker load # 从 STDIN 加载镜像归档包 docker save # 将镜像打包输出至 STDOUT docker history # 查看镜像历史 docker tag # 给镜像打标签加载/保存与导入/导出# 从文件加载镜像 docker load my_image.tar.gz # 保存镜像 docker save my_image:my_tag | gzip my_image.tar.gz # 从文件导入容器镜像 cat my_container.tar.gz | docker import - my_image:my_tag # 导出容器 docker export my_container | gzip my_container.tar.gz注意load创建的新镜像继承原镜像全部历史import不包含历史生成的镜像更小。4. 网络、仓库与端口docker network create/rm # 创建/删除网络 docker network ls/inspect # 查看网络 docker network connect/disconnect # 容器连接/断开网络 docker login/logout # 登入/登出仓库中心 docker search # 检索镜像 docker pull # 拉取镜像 docker push # 推送镜像指定子网与网关创建桥接网络并指定容器 IPdocker network create --subnet 203.0.113.0/24 --gateway 203.0.113.254 iptastic docker run --rm -it --net iptastic --ip 203.0.113.2 nginx curl 203.0.113.2端口映射-p 127.0.0.1:$HOSTPORT:$CONTAINERPORT将容器端口映射到宿主机 localhost 接口Dockerfile 中EXPOSE CONTAINERPORT只是声明并不会真正暴露端口仍需要-p参数。可用docker port CONTAINER $CONTAINERPORT查看映射关系。5. 数据卷Volumes与挂载数据卷是绕过 UFS 的特殊目录具备以下特性可在容器间共享和重用修改立即生效更新不影响镜像容器删除后依然存在。docker volume create/rm/ls/inspect # 卷的创建/删除/查看/信息 docker volume prune # 清理无主数据卷 docker run -v /Users/wsargent/myapp/src:/src # 挂载宿主目录 docker run --volumes-from # 一次性挂载到多个容器6. 安全要点Docker 默认以 root 权限运行加入 docker 组即拥有宿主 root 权限勿将 Docker Unix Socket 暴露给容器推荐在虚拟机中运行 Docker并配合 AppArmor、seccomp、SELinux 等限制权限限制进程数与提权# 限制容器进程数防 fork 炸弹内核 4.3需 CGROUP_PIDSy docker run --pids-limit64 # 禁止进程获取新权限 docker run --security-optno-new-privileges关闭内部进程通讯、设置只读容器与只读卷、非 root 运行docker -d --iccfalse --iptables docker run --read-only docker pull debiansha256:a25306f3850e1bd44541976aa7b5fd0a29be docker run -v $(pwd)/secrets:/secrets:ro debianRUN groupadd -r user useradd -r -g user user USER user7. 清理与效率技巧docker system prune # 清理全部无用数据 docker volume prune # 清理无主卷 docker network prune # 清理无用网络 docker container prune # 清理已停止容器 docker image prune # 清理无用镜像 docker system df # 查看磁盘占用实用速查# 最近一次容器 ID alias dldocker ps -l -q docker commit $(dl) helloworld # 获取容器 IP docker inspect -f {{ .NetworkSettings.IPAddress }} container_name # 删除所有容器强制 docker rm -f $(docker ps -qa) # 停止并删除所有容器 docker stop $(docker ps -aq) docker rm -v $(docker ps -aq) # 删除无用的 dangling 镜像 docker rmi $(docker images -q -f danglingtrue) # 删除已退出的容器 docker rm -f $(docker ps -a | grep Exit | awk { print $1 })容器瘦身同一层内清理 APT 缓存RUN {apt commands} \ apt-get clean \ rm -rf /var/lib/apt/lists/* /tmp/* /var/tmp/*将文件挂载为卷注入单个配置文件docker run --rm httpd cat /usr/local/apache2/conf/httpd.conf httpd.conf vim httpd.conf docker run --rm -ti -v $PWD/httpd.conf:/usr/local/apache2/conf/httpd.conf:ro -p 80:80 httpd六、Dockerfile 指令详解与最佳实践本节内容整理自 docs/docker/docker-dockerfile.md。Dockerfile 是一个文本文件每条指令构建一层描述该层应如何构建从而解决镜像无法重复、构建不透明、体积膨胀的问题。1. FROM指定基础镜像FROM是必备且必须是第一条指令。官方镜像中既有服务类nginx、redis、mysql、tomcat 等也有语言类node、openjdk、python、golang 等以及基础 OS 镜像ubuntu、debian、centos、alpine。特殊镜像scratch表示空白镜像不从任何镜像开始适合静态编译程序如 Go 应用制作更小巧的镜像FROM scratch ...2. RUN执行命令两种格式# shell 格式 RUN echo h1Hello, Docker!/h1 /usr/share/nginx/html/index.html # exec 格式 RUN [可执行文件, 参数1, 参数2]关键教训不要一个命令一个 RUN。每个 RUN 都会建立一层以下写法会创建 7 层臃肿镜像FROM debian:jessie RUN apt-get update RUN apt-get install -y gcc libc6-dev make ...正确写法是用串联成单个 RUN并清理编译依赖与缓存注意 Union FS 有最大层数限制如 AUFS 不超过 127 层FROM debian:jessie RUN buildDepsgcc libc6-dev make \ apt-get update \ apt-get install -y $buildDeps \ wget -O redis.tar.gz http://download.redis.io/releases/redis-3.2.5.tar.gz \ mkdir -p /usr/src/redis \ tar -xzf redis.tar.gz -C /usr/src/redis --strip-components1 \ make -C /usr/src/redis \ make -C /usr/src/redis install \ rm -rf /var/lib/apt/lists/* \ rm redis.tar.gz \ rm -r /usr/src/redis \ apt-get purge -y --auto-remove $buildDeps3. COPY复制文件COPY [--chownuser:group] 源路径... 目标路径 COPY [--chownuser:group] [源路径1,... 目标路径]支持通配符遵循 Gofilepath.Match规则目标路径不存在会自动创建并保留源文件元数据权限、变更时间等COPY hom* /mydir/ COPY hom?.txt /mydir/ COPY --chown55:mygroup files* /mydir/4. ADD更高级的复制ADD 与 COPY 格式一致但多了两个行为源路径可为 URLDocker 引擎自动下载权限默认 600不推荐、源为 tar 压缩文件gzip/bzip2/xz时自动解压。官方 ubuntu 镜像即利用自动解压FROM scratch ADD ubuntu-xenial-core-cloudimg-amd64-root.tar.gz /官方最佳实践要求尽可能使用 COPY语义明确仅在需要自动解压缩时使用 ADDADD 还会令构建缓存失效。5. CMD容器启动命令三种格式CMD 命令 # shell 格式 CMD [可执行文件, 参数1, 参数2...] # exec 格式推荐必须双引号 CMD [参数1, 参数2...] # 参数列表格式配合 ENTRYPOINTshell 格式实际被包装为sh -c执行因此可使用环境变量。容器应用必须以前台方式运行——主进程退出容器即退出。错误示例CMD service nginx start会因 sh 退出导致容器立即退出正确写法CMD [nginx, -g, daemon off;]6. ENTRYPOINT入口点与 CMD 一样指定启动程序但指定 ENTRYPOINT 后CMD 内容会作为参数传给 ENTRYPOINT实际执行为ENTRYPOINT CMD。场景一让镜像像命令一样使用。用 CMD 实现 curl 查询公网 IP 时docker run myip -i会因-i替换了 CMD 而报executable file not found改用 ENTRYPOINT 后-i作为参数传给 curl 即可成功FROM ubuntu:18.04 RUN apt-get update \ apt-get install -y curl \ rm -rf /var/lib/apt/lists/* ENTRYPOINT [ curl, -s, https://ip.cn ]$ docker run myip -i HTTP/1.1 200 OK ... 当前 IP61.148.226.66 来自北京市 联通场景二应用运行前的准备工作。官方 redis 镜像用 entrypoint 脚本完成创建用户、初始化等工作再切换到服务用户执行主进程FROM alpine:3.4 RUN addgroup -S redis adduser -S -G redis redis ENTRYPOINT [docker-entrypoint.sh] EXPOSE 6379 CMD [ redis-server ]entrypoint 脚本核心逻辑exec $执行传入的 CMD遇 redis-server 则切换用户#!/bin/sh if [ $1 redis-server -a $(id -u) 0 ]; then chown -R redis . exec su-exec redis $0 $ fi exec $7. ENV设置环境变量ENV key value ENV key1value1 key2value2...支持换行与双引号包裹含空格的值。后续指令与运行时应用均可使用支持环境变量展开的指令包括ADD、COPY、ENV、EXPOSE、LABEL、USER、WORKDIR、VOLUME、STOPSIGNAL、ONBUILD。示例官方 node 镜像风格ENV NODE_VERSION 7.2.0 RUN curl -SLO https://nodejs.org/dist/v$NODE_VERSION/node-v$NODE_VERSION-linux-x64.tar.xz \ tar -xJf node-v$NODE_VERSION-linux-x64.tar.xz -C /usr/local --strip-components1 \ rm node-v$NODE_VERSION-linux-x64.tar.xz8. ARG构建参数ARG 参数名[默认值]定义构建期变量可用docker build --build-arg 参数名值覆盖。与 ENV 不同ARG 只存在于构建环境容器运行时不存在注意不要用 ARG 保存密码docker history可看到所有值。Docker 1.13 起--build-arg未在 Dockerfile 中定义时不再报错仅显示警告。9. VOLUME定义匿名卷VOLUME [路径1, 路径2...] VOLUME 路径事先指定目录挂载为匿名卷防止运行时忘记挂载导致数据写入容器存储层VOLUME /data运行时可用命名卷覆盖匿名卷配置docker run -d -v mydata:/data xxxx10. EXPOSE暴露端口EXPOSE 端口1 [端口2...]仅是声明容器打算使用的端口帮助使用者理解守护端口并配合docker run -P随机映射并不会自动在宿主进行端口映射与-p 宿主端口:容器端口有本质区别。11. WORKDIR指定工作目录WORKDIR 工作目录路径改变后续各层的工作目录目录不存在会自动创建。切勿用RUN cd /app代替——每个 RUN 都是独立容器前一层的 cd 只是内存中的变更不会影响下一层# 错误第二层找不到 /app/world.txt RUN cd /app RUN echo hello world.txt # 正确 WORKDIR /app12. LABEL 与 USERLABEL 以键值对为镜像添加元数据推荐用一条 LABEL 指定全部元数据并可替代弃用的 MAINTAINERLABEL version1.0 description这是一个Web服务器 byIT笔录 LABEL maintaineritbilu.comUSER 切换之后层执行 RUN/CMD/ENTRYPOINT 的身份用户必须事先建立RUN groupadd -r redis useradd -r -g redis redis USER redis RUN [ redis-server ]脚本内需要切换用户时建议使用gosu而非 su/sudo避免 TTY 缺失环境出错。13. HEALTHCHECK健康检查Docker 1.12 引入用于判断容器服务状态是否正常解决进程不死锁但已无法服务的问题。初始为starting检查成功变healthy连续失败超次数变unhealthy。选项--interval默认 30 秒、--timeout默认 30 秒、--retries默认 3 次。命令返回值 0 成功、1 失败、2 保留。与 CMD/ENTRYPOINT 一样只能出现一次。FROM nginx RUN apt-get update apt-get install -y curl rm -rf /var/lib/apt/lists/* HEALTHCHECK --interval5s --timeout3s \ CMD curl -fs http://localhost/ || exit 1docker build -t myweb:v1 . docker run -d --name web -p 80:80 myweb:v1 # 观察状态从 (health: starting) 变为 (healthy) docker container ls # 查看健康检查输出 docker inspect --format {{json .State.Health}} web | python -m json.tool14. ONBUILD为他人作嫁衣裳ONBUILD 其它指令后跟的指令RUN、COPY 等在当前镜像构建时不执行仅当该镜像作为基础镜像被下一级镜像使用时才触发。以 Node.js 基础镜像为例把项目相关指令加上 ONBUILDFROM node:slim RUN mkdir /app WORKDIR /app ONBUILD COPY ./package.json /app ONBUILD RUN [ npm, install ] ONBUILD COPY . /app/ CMD [ npm, start ]各项目只需一行 Dockerfile即可继承基础镜像的更新并自动完成本项目构建FROM my-node七、Docker Compose 多容器编排实战本节内容整理自 docs/docker/docker-compose.md仓库中 codes/docker/docker-compose-demo 提供了完整可运行的对应示例app.py、Dockerfile、docker-compose.yml 与 run.sh 四件套。1. Compose 简介Compose 是 Docker 官方开源项目定位是定义和运行多个 Docker 容器的应用。一个 Web 项目往往需要 Web 服务容器 数据库容器 负载均衡容器相互配合Compose 允许通过一个docker-compose.ymlYAML 格式定义一组关联容器为一个项目。两个重要概念服务service一个应用的容器可包括若干运行相同镜像的容器实例项目project一组关联应用容器组成的完整业务单元在 docker-compose.yml 中定义。Compose 默认管理对象是项目通过子命令对项目内一组容器进行生命周期管理。2. 安装Linux 安装示例为 1.24.1 版本sudo curl -L https://github.com/docker/compose/releases/download/1.24.1/docker-compose-uname -s-uname -m /usr/local/bin/docker-compose sudo chmod x /usr/local/bin/docker-compose3. 快速入门Flask Redis 计数器应用仓库 codes/docker/docker-compose-demo/app.py 中保存着应用代码——一个基于 Flask 与 Redis 的访问计数器from flask import Flask from redis import Redis app Flask(__name__) redis Redis(hostredis, port6379) app.route(/) def hello(): count redis.incr(hits) return Hello World! 该页面已被访问 {} 次。\n.format(count) if __name__ __main__: app.run(host0.0.0.0, debugTrue)配套 DockerfileFROM python:3.6-alpine ADD . /code WORKDIR /code RUN pip install redis flask CMD [python, app.py]主模板文件 docker-compose.yml 定义了 web 与 redis 两个服务web 通过build: .本地构建、将容器 5000 端口映射到宿主 5000 端口redis 直接使用官方redis:alpine镜像version: 3 services: web: build: . ports: - 5000:5000 redis: image: redis:alpine仓库还提供了 run.sh 一键启动脚本其内部实际执行的正是docker-compose up。运行项目docker-compose up启动后访问本地 5000 端口每次刷新页面计数 1。注意app.py中 Redis 连接地址写的是服务名redis而非 IP——这正是 Compose 默认网络的关键能力同一项目内的服务可通过服务名互相访问。4. 常用命令与模板文件docker-compose.yml是 Compose 的主模板文件作用类似于 Dockerfile 之于 Docker支持默认环境变量配置。常用命令请参考 Compose 官方命令说明文档核心包括up创建并启动、down停止并删除、ps查看状态、logs查看日志、build重新构建镜像等。八、Kubernetes 应用指南延伸本节内容整理自 docs/docker/kubernetes.md。KubernetesK8S是谷歌开源的容器集群管理系统用于自动部署、扩展和管理容器化应用。Master 节点运行kube-apiserver、kube-controller-manager、kube-scheduler三个进程每个非 master 节点运行kubelet与 master 通信和kube-proxy网络代理。核心组件etcd保存整个集群状态apiserver资源操作唯一入口提供认证、授权、访问控制、API 注册发现controller manager维护集群状态故障检测、自动扩展、滚动更新scheduler按调度策略将 Pod 调度到相应机器kubelet维护容器生命周期管理 VolumeCVI与网络CNIContainer runtime负责镜像管理与 Pod/容器实际运行CRIkube-proxy为 Service 提供集群内服务发现与负载均衡。核心概念PodK8S 调度的基本单位一组共享 PID、IPC、Network、UTS namespace 的紧密关联容器集合共享网络与文件系统NodePod 运行的主机物理机或虚拟机需运行 container runtime、kubelet、kube-proxyNamespace资源和对象的抽象集合用于划分项目组或用户组Service应用服务抽象通过 labels 提供负载均衡和服务发现每个 Service 自动分配 cluster IP 与 DNS 名Labelkey/value 标识key ≤ 63 字节value ≤ 253 字节配合 Label Selector 选择对象支持等式appnginx、集合env in (production, qa)、多 label AND 组合Annotations附加的辅助信息记录部署、安全策略、调度策略等如滚动更新状态。常用命令kubectl# 查找资源 kubectl get services kubectl get pods -o wide --all-namespaces kubectl get pods -o json kubectl describe nodes my-node # 资源管理 kubectl explain pods,svc kubectl create -f ./my-manifest.yaml kubectl apply -f ./my-manifest.yaml kubectl run nginx --imagenginx kubectl delete -f ./my-manifest.yaml # 扩缩容与滚动更新 kubectl scale --replicas3 rs/foo kubectl rolling-update frontend-v1 -f frontend-v2.json # 监控与日志 kubectl top node kubectl top pod pod_name --containers kubectl logs pod_name kubectl logs -f pod_name -c my-container九、仓库内配套实践资源除了上述文档linux-tutorial 仓库还提供了可直接参照的实战资源Compose 完整示例codes/docker/docker-compose-demo 下的 app.py、Dockerfile、docker-compose.yml、run.sh 构成一个开箱即用的 Flask Redis 编排项目服务化安装指南docs/docker/service/docker-install-mysql.mddocker search mysql→docker pull mysql→docker run -p 3306:3306 --name mysql -v /opt/docker_v/mysql/conf:/etc/mysql/conf.d -e MYSQL_ROOT_PASSWORD123456 -d mysql与 docs/docker/service/docker-install-nginx.mddocker search nginx→docker pull nginx→docker run -p 80:80 --name mynginx -d nginx均实测于 CentOS 环境演示了「搜索镜像 → 拉取镜像 → 运行容器」的标准落地路径。以上两份安装指南中的-v数据卷挂载与-e环境变量注入正是前文核心概念与 Dockerfile 章节所述机制在真实服务部署中的直接应用。参考资料Docker 快速入门Docker Cheat SheetDockerfile 最佳实践Docker ComposeKubernetes 应用指南【免费下载链接】linux-tutorial:penguin: Linux教程主要内容Linux 命令、Linux 系统运维、软件运维、精选常用Shell脚本项目地址: https://gitcode.com/GitHub_Trending/lin/linux-tutorial创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考