资讯动态

Docker重点总结与实践指南

发布时间:2026/10/9 1:26:26 来源:尧图企业网站定制
Docker重点总结与实践指南一、容器技术概述1.1 为什么需要容器传统软件开发面临环境不一致、依赖复杂、部署困难等问题。容器通过标准化打包应用依赖解决了“环境不一致”和“可移植性”问题。1.2 容器 vs 虚拟机特性容器虚拟机启动速度秒级甚至毫秒级数秒至数十秒内核共享宿主机内核每个虚拟机有独立内核资源占用轻量MB级重量GB级隔离级别进程级隔离系统级隔离单机部署数量上千个一般不超过100个1.3 容器生态系统核心技术容器规范OCI、runtimerunc、lxc、rkt、管理工具、镜像仓库、容器OS。平台技术容器编排引擎Kubernetes、Swarm、Mesos、容器管理平台Rancher、基于容器的PaaS。支持技术网络、服务发现etcd、consul、zookeeper、监控、日志、数据管理、安全。二、Docker安装与配置CentOS Stream 82.1 实验目标在CentOS Stream 8上安装Docker CE配置阿里云/华为云镜像加速器运行第一个容器2.2 安装步骤与代码注释# 1. 安装必要工具yuminstall-yyum-utils device-mapper-persistent-data lvm2vim# 2. 添加Docker CE阿里云镜像源yum-config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo# 3. 更新yum缓存yum makecache# 4. 安装Docker CEyuminstall-ydocker-ce# 5. 启动并设置开机自启systemctlenabledocker.service--now# 6. 配置镜像加速器阿里云mkdir-p/etc/dockertee/etc/docker/daemon.json-EOF { registry-mirrors: [https://your-mirror.aliyuncs.com] } EOF# 7. 重启Dockersystemctl daemon-reload systemctl restartdocker# 8. 验证安装docker--versiondockerrun hello-world2.3 验证结果docker run hello-world会从Docker Hub拉取镜像并运行输出欢迎信息即成功。三、Docker镜像深入3.1 镜像分层结构镜像由多个只读层叠加而成容器启动时会添加一个可写层容器层。Copy-on-Write写时复制修改文件时先从镜像层复制到容器层再修改。3.2 构建镜像的两种方式方式一docker commit不推荐# 运行容器dockerrun-itubuntu# 在容器中安装vimapt-getupdateapt-getinstall-yvim# 退出容器后提交为新镜像dockercommitcontainer-idubuntu-with-vim方式二Dockerfile推荐# Dockerfile内容 FROM ubuntu RUN apt-get update apt-get install -y vim# 构建镜像dockerbuild-tubuntu-with-vim-dockerfile.3.3 Dockerfile常用指令注释# 指定基础镜像 FROM centos:8.4.2105 # 维护者信息 MAINTAINER yournameemailexample.com # 设置环境变量 ENV MYPATH /usr/local WORKDIR $MYPATH # 运行命令安装软件 RUN yum install -y vim # 复制文件自动解压tar ADD jdk.tar.gz /usr/local/java/ # 复制文件不解压 COPY index.html /var/www/html/ # 暴露端口 EXPOSE 80 # 容器启动命令可被覆盖 CMD [/usr/sbin/httpd, -DFOREGROUND] # 容器启动命令不可被覆盖 ENTRYPOINT [/usr/bin/sshd, -D]3.4 镜像命名与标签最佳实践格式[repository]:[tag]如myapp:1.0.0建议使用语义化版本如1.0.0、1.0、1、latest四、容器管理4.1 容器生命周期create→start→run create startpause/unpause、stop/start、restartrm删除容器rmi删除镜像4.2 进入容器的两种方式# attach进入启动命令终端dockerattachcontainer-id# exec开启新终端dockerexec-itcontainer-idbash4.3 资源限制内存限制dockerrun-it-m200M --memory-swap300M ubuntu-stress--vm1--vm-bytes 280MCPU限制权重dockerrun--namecontainer_A-c1024ubuntu-stress--cpu4dockerrun--namecontainer_B-c512ubuntu-stress--cpu4五、Docker网络5.1 三种默认网络网络模式说明适用场景none无网络只有lo高安全、不需要网络的应用host共享宿主机网络栈追求网络性能bridge默认通过docker0网桥隔离大多数应用5.2 自定义网络# 创建bridge网络并指定子网dockernetwork create--driverbridge--subnet172.22.16.0/24--gateway172.22.16.1 my_net2# 使用自定义网络启动容器dockerrun-it--networkmy_net2--ip172.22.16.8 busybox5.3 容器间通信IP通信同一网络下直接ping IPDocker DNS同一自定义网络中可通过容器名ping通joined容器共享网络栈通过127.0.0.1通信# joined示例dockerrun-d--nameweb1 httpddockerrun-it--networkcontainer:web1 busybox5.4 容器访问外网与外网访问容器容器访问外网NATiptables-tnat-APOSTROUTING-s172.17.0.0/16!-odocker0-jMASQUERADE外网访问容器端口映射dockerrun-d-p8080:80 httpd六、Docker存储6.1 两种存储方式Storage Driveroverlay2等管理镜像层和容器层适合无状态应用。Data Volume持久化数据独立于容器生命周期。6.2 两种Data Volume类型bind mountdockerrun-d-p80:80-v~/htdocs:/usr/local/apache2/htdocs:ro httpddocker managed volumedockerrun-d-p80:80-v/usr/local/apache2/htdocs httpd# 查看volume位置dockerinspectcontainer-id|grep-A10Mounts6.3 容器间共享数据volume container# 创建volume容器dockercreate--namevc_data-v~/htdocs:/usr/local/apache2/htdocs busybox# 其他容器使用dockerrun--nameweb1 --volumes-from vc_data-dhttpddata-packed volume containerFROM busybox ADD htdocs /usr/local/apache2/htdocs VOLUME /usr/local/apache2/htdocs七、Docker Compose7.1 核心概念服务service一个应用的容器实例项目project一组服务组成的完整业务单元7.2 WordPress示例带注释# docker-compose.ymlversion:2services:# WordPress服务blog:image:wordpress:latestrestart:alwayslinks:-db# 连接到db服务ports:-80:80# 宿主机80映射到容器80environment:WORDPRESS_DB_HOST:db# 数据库主机名服务名WORDPRESS_DB_USER:rootWORDPRESS_DB_PASSWORD:huaweiWORDPRESS_DB_NAME:wordpress# MySQL服务db:image:mysql:latestrestart:alwaysenvironment:MYSQL_ROOT_PASSWORD:huaweiMYSQL_DATABASE:wordpress# 启动所有服务dockercompose up-d# 停止并删除所有资源dockercompose down八、容器监控与日志8.1 Docker原生命令dockerps# 查看运行容器dockertopcontainer# 查看容器内进程dockerstats# 实时资源使用dockerlogs-fcontainer# 查看日志8.2 cAdvisorGoogle开源dockerrun\--volume/var/run:/var/run:rw\--volume/sys:/sys:ro\--volume/var/lib/docker:/var/lib/docker:ro\--publish8080:8080\--detachtrue\--namecadvisor\google/cadvisor:latest访问http://host-ip:8080查看监控面板。九、图形化管理工具9.1 DockerUIdockerrun-d--namedocker.ui\-v/var/run/docker.sock:/var/run/docker.sock\-p8999:8999\joinsunsoft/docker.ui访问http://host-ip:8999默认账号ginghan/1234569.2 Portainer功能更强大dockervolume create portainer_datadockerrun-d-p8000:8000-p9443:9443\--nameportainer--restartalways\-v/var/run/docker.sock:/var/run/docker.sock\-vportainer_data:/data\portainer/portainer-ce:latest访问https://host-ip:9443十、综合实验实验1部署MySQL并支持中文# 创建配置目录和my.cnfmkdir-p/gqd/mysql/confcat/gqd/mysql/conf/my.cnfEOF [client] default_character_setutf8 [mysql] collation_server utf8_general_ci character_set_server utf8 EOF# 启动MySQL容器挂载配置和数据卷dockerrun-d-p3306:3306\-v/gqd/mysql/data:/var/lib/mysql\-v/gqd/mysql/conf:/etc/mysql/conf.d\-eMYSQL_ROOT_PASSWORD123456\--namemysql\mysql:5.7实验2部署Ghost博客系统mkdir-p/data/ghostdockerrun-d--restartalways--nameghost\-p2368:2368\-v/data/ghost:/var/lib/ghost/content\-eNODE_ENVdevelopment\-eurlhttp://localhost:2368\ghostchmod-R777/data/ghostdockerrestart ghost访问http://host-ip:2368安装使用。总结与学习建议由浅入深先掌握镜像、容器、网络、存储核心概念再学习编排和监控。勤动手每个指令都亲测一遍尤其是Dockerfile编写和Compose编排。理解原理重点关注镜像分层、写时复制、网络NAT、存储卷挂载等底层机制。用好生态熟练使用Docker Hub、阿里云/华为云镜像加速、Harbor私有仓库。生产实践学会使用cAdvisor、Prometheus、Grafana监控容器ELK管理日志。其中某个实验扩展成完整项目或脚本。

读完文章,也想定制专属网站?

尧图设计师 24 小时内与您沟通定制方案

免费获取报价 →
↑