3个简单步骤,让您的老旧安卓电视重获新生:免费享受高清电视直播
2026/5/4 9:07:42
Docker是一个开源的应用容器引擎,基于Go语言开发,并遵循Apache2.0协议开源。Docker允许开发者将应用以及依赖包打包到一个轻量级、可移植的容器中,然后发布到任何流行的Linux、Windows或Mac机器上,也可以实现虚拟化。容器完全使用沙箱机制,相互之间不会有任何接口,更重要的是容器性能开销极低。
Docker与虚拟机是两种不同的虚拟化技术,它们在架构、性能、资源使用和隔离级别等方面有显著区别。
架构差异
性能比较
资源使用效率
隔离性和安全性
可移植性
使用场景
Docker 镜像是只读的模板,包含了运行应用程序所需的一切:
只读性
# 镜像是不可变的docker pull ubuntu:20.04# 下载的镜像不能修改# 基于镜像创建容器时,会添加一个可写层+---------------------+|容器可写层|← 容器层(可修改) +---------------------+|镜像只读层|← 镜像层(不可变) +---------------------+分层存储(Layer)
# Dockerfile 示例FROM ubuntu:20.04# 第1层:基础镜像RUNapt-getupdate# 第2层:执行命令COPY app.py /app/# 第3层:添加文件RUN pipinstallflask# 第4层:安装依赖CMD["python","app.py"]# 第5层:启动命令分层优势:
镜像 myapp:v1 ├── Layer4: CMD["python","app.py"](2KB)├── Layer3: RUN pipinstallflask(15MB)├── Layer2: COPY app.py /app/(5KB)└── Layer1: FROM ubuntu:20.04(72MB)镜像 myapp:v2 ├── Layer5: COPY config.json /app/(3KB)← 新增 ├── Layer4: CMD["python","app.py"](2KB)← 共享 ├── Layer3: RUN pipinstallflask(15MB)← 共享 ├── Layer2: COPY app.py /app/(5KB)← 共享 └── Layer1: FROM ubuntu:20.04(72MB)← 共享# 1. 编写 Dockerfile# 2. 构建镜像docker build -t myapp:1.0.# 3. 查看本地镜像docker images# 4. 推送镜像到仓库docker push myregistry.com/myapp:1.0# 5. 拉取镜像docker pull myregistry.com/myapp:1.0# 6. 运行容器docker run myapp:1.0# 7. 删除镜像docker rmi myapp:1.0基本操作
# 查看本地镜像docker images docker imagels# 搜索镜像docker search nginx# 拉取镜像docker pull ubuntu:20.04 docker pull nginx:alpine# 删除镜像docker rmi ubuntu:20.04 docker imagermnginx:alpine# 删除所有未使用镜像docker image prune -a镜像标签管理
# 添加标签docker tag ubuntu:20.04 myregistry.com/ubuntu:latest docker tag myapp:1.0 myapp:production# 查看镜像历史dockerhistoryubuntu:20.04# 导出镜像docker save ubuntu:20.04>ubuntu.tar# 导入镜像docker load<ubuntu.tar# 导出容器为镜像dockerexportcontainer_id>container.tar镜像构建与优化
# 构建镜像docker build -t myapp:1.0.docker build -t myapp:1.0 -f Dockerfile.prod.# 查看构建过程docker build --progress=plain.# 多阶段构建docker build -t myapp:multi-stage.# 构建参数docker build --build-argVERSION=1.0.Docker 容器是镜像的运行实例,是一个轻量级、可执行的软件包,包含:
轻量级
# 与传统虚拟机对比+-----------------------------+|虚拟机:重量级隔离||+-----------------------+|||Guest OS||||+-----------------+|||||App|||||+-----------------+|||+-----------------------+|+-----------------------------+ 启动时间:分钟级|内存:GB级 +-----------------------------+|Docker容器:轻量级隔离||+-----------------------+|||App|||+-----------------------+|+-----------------------------+ 启动时间:秒级|内存:MB级隔离性
# Linux 内核特性实现隔离1. Namespaces:进程、网络、挂载点隔离2. Cgroups:CPU、内存、磁盘I/O限制3. UnionFS:分层文件系统# 查看容器命名空间ls-la /proc/<container-pid>/ns/生命周期状态
创建(Created)→ 运行(Running)→ 暂停(Paused)↓ ↓ ↓ → 停止(Stopped)→ 删除(Deleted)状态转换命令
# 完整生命周期管理docker create --name mycont nginx:alpine# 创建docker start mycont# 启动docker pause mycont# 暂停docker unpause mycont# 恢复docker stop mycont# 停止(优雅停止)dockerkillmycont# 强制停止docker restart mycont# 重启dockerrmmycont# 删除基础操作
# 运行容器docker run -d --name web nginx:alpine# 运行并进入交互模式docker run -it --name ubuntu ubuntu:20.04bash# 查看运行中的容器dockerps# 查看所有容器(包括停止的)dockerps-a# 查看容器详情docker inspect web# 查看容器日志docker logs web docker logs -f web# 实时查看docker logs --tail100web# 最后100行容器控制
# 进入运行中的容器dockerexec-it webbashdockerexec-it webshdockerexec-it web /bin/bash# 在容器内执行命令(不进入)dockerexecwebls-la /usr/share/nginx/html dockerexecwebpsaux# 复制文件dockercpindex.html web:/usr/share/nginx/html/ dockercpweb:/var/log/nginx/access.log ./nginx.log# 重命名容器dockerrenameweb nginx-server资源监控
# 查看容器资源使用docker stats docker stats --no-stream# 单次查看docker stats web# 指定容器# 查看容器进程dockertopweb# 查看容器端口映射docker port web# 查看容器元数据docker inspect web|grep-A10"NetworkSettings"基础运行选项
# 完整的运行示例docker run -d\# 后台运行--name myapp\# 容器名称--hostname app-server\# 主机名--restart unless-stopped\# 重启策略-p8080:80\# 端口映射-p443:443\-v /data:/var/lib/app\# 数据卷挂载-eDATABASE_URL=postgres://...\# 环境变量--memory="512m"\# 内存限制--cpus="1.5"\# CPU限制--network my-network\# 网络myapp:latest# 镜像端口映射
# 基本端口映射docker run -p80:80 nginx# 绑定特定IPdocker run -p127.0.0.1:80:80 nginx# 随机端口docker run -p80nginx# 多端口映射docker run -p8080:80 -p8443:443 nginx# UDP端口docker run -p53:53/udp dns-server环境变量
# 单个环境变量docker run -eMY_VAR=value myapp# 多个环境变量docker run -eVAR1=value1 -eVAR2=value2 myapp# 从文件读取docker run --env-file .env myapp# 传递主机环境变量docker run -eHOMEmyapp资源限制
# CPU限制docker run --cpus=0.5myapp# 最多使用0.5个CPU核心docker run --cpuset-cpus="0,2"myapp# 绑定到特定CPU核心# 内存限制docker run --memory="512m"myapp# 内存限制512MBdocker run --memory-swap="1g"myapp# 交换分区限制docker run --memory-reservation="256m"myapp# 内存软限制# 磁盘I/O限制docker run --device-write-bps /dev/sda:10mb myapp重启策略
# 自动重启策略docker run --restart no# 不自动重启(默认)docker run --restart on-failure# 失败时重启docker run --restart on-failure:5# 最多重启5次docker run --restart always# 总是重启docker run --restart unless-stopped# 除非手动停止,否则重启Docker 仓库是存储和分发 Docker 镜像的中心化服务,类似代码仓库(Git),但专门用于 Docker 镜像。
镜像仓库生态系统: 仓库(Repository) → 注册中心(Registry) → 镜像标签(Tag) 仓库:存储特定镜像的所有版本(如 nginx, mysql) 注册中心:存放多个仓库的服务(如 Docker Hub) 标签:镜像的版本标识(如 :latest, :1.0, :alpine)# Docker Hub(官方)https://hub.docker.com/# 第三方公共仓库- Google Container Registry(GCR)- Amazon ECR Public Gallery - Azure Container Registry - GitHub Container Registry(GHCR)- Quay.io# 自建私有注册中心docker run -d -p5000:5000 --name registry registry:2# 云厂商托管- AWS ECR(Amazon Elastic Container Registry) - Google Cloud Container Registry - Azure Container Registry - 阿里云容器镜像服务 - 腾讯云容器镜像服务基本操作
# 搜索镜像docker search nginx docker search --filter=stars=1000nginx docker search --filter=is-official=true nginx# 拉取镜像docker pull nginx:alpine docker pull registry.example.com/myapp:latest# 推送镜像docker tag myapp:latest registry.example.com/myapp:latest docker push registry.example.com/myapp:latest# 查看镜像标签curlhttps://registry.hub.docker.com/v2/repositories/library/nginx/tags/认证管理
# 登录仓库docker login docker login registry.example.com docker login -u username -p password registry.example.com# 查看登录信息docker info|grep-A5"Registry"cat~/.docker/config.json# 登出dockerlogoutdockerlogoutregistry.example.comNexus Repository Manager
# docker-compose.yml for Nexusversion:'3.8'services: nexus: image: sonatype/nexus3:latest container_name: nexus restart: unless-stopped ports: -"8081:8081"-"5000:5000"volumes: - ./nexus-data:/nexus-data environment: -INSTALL4J_ADD_VM_PARAMS=-Xms2g -Xmx2g -XX:MaxDirectMemorySize=2gHarbor(企业级 Registry)
# Harbor 特性- 基于角色的访问控制(RBAC)- LDAP/AD 集成 - 镜像漏洞扫描 - 镜像复制 - Webhook 通知 - 图形化管理界面# 快速部署curl-s https://raw.githubusercontent.com/goharbor/harbor/master/make/harbor.yml -o harbor.yml ./install.sh