目录

Docker概述

核心概念

工作原理

优势

应用场景

Docker容器技术与传统虚拟机的比较

安装Docker

Docker基本操作

镜像操作

容器操作

数据持久化

网络管理

日志与监控

清理操作

实用技巧

容器的导出与导入


Docker概述

Docker 是一种开源的容器化平台,它允许开发者将应用程序及其依赖项(如库、配置文件等)打包到一个轻量级、独立的容器中,从而实现应用程序在不同环境中的快速、一致部署和运行。Docker 的出现极大地简化了应用程序的部署流程,提高了开发、测试和运维的效率

核心概念
  1. 容器(Container)
    • 容器是 Docker 的核心概念,它是一个轻量级、独立的可执行软件包,包含运行应用程序所需的一切:代码、运行时、系统工具、系统库和设置。
    • 容器与虚拟机(VM)不同,它们共享宿主机的操作系统内核,因此启动速度更快,资源占用更少。
    • 容器之间是隔离的,一个容器的崩溃不会影响其他容器的运行。
  2. 镜像(Image)
    • 镜像是一个只读的模板,用于创建容器。
    • 镜像可以包含一个完整的操作系统环境,也可以仅包含应用程序及其依赖项。
    • 镜像可以通过 Dockerfile(一种文本文件,包含了一系列指令和参数,用于构建镜像)来创建。
  3. 仓库(Registry)
    • 仓库是集中存储和分发 Docker 镜像的地方。
    • 最著名的公共仓库是 Docker Hub,用户可以在上面找到大量的官方镜像和社区镜像。
    • 企业也可以搭建自己的私有仓库,用于存储和分发内部使用的镜像。
工作原理

Docker 使用客户端-服务器架构。Docker 客户端(如 docker 命令行工具)与 Docker 守护进程(Docker Daemon)通信,后者负责构建、运行和管理容器。当用户执行 docker run 命令时,Docker 守护进程会:

  1. 检查本地是否存在指定的镜像。
  2. 如果不存在,则从仓库中拉取该镜像。
  3. 使用镜像创建一个新的容器。
  4. 启动容器,并执行指定的命令或应用程序。
优势
  1. 环境一致性:容器确保了应用程序在不同环境(开发、测试、生产)中的一致性,减少了“在我的机器上能运行”的问题。
  2. 快速部署:容器可以快速启动和停止,适合微服务架构和持续集成/持续部署(CI/CD)流程。
  3. 资源高效:容器共享宿主机的操作系统内核,因此资源占用更少,可以在同一台宿主机上运行更多的容器。
  4. 隔离性:容器之间是隔离的,提高了系统的安全性和稳定性。
应用场景
  1. 微服务架构:将大型应用程序拆分为多个小型、独立的服务,每个服务运行在一个容器中。
  2. 持续集成/持续部署(CI/CD):通过容器化应用程序,实现快速、一致的构建和部署流程。
  3. 多环境部署:确保应用程序在不同环境(如开发、测试、生产)中的一致性。
  4. 资源受限环境:在资源受限的环境(如嵌入式系统、物联网设备)中运行应用程序。

Docker容器技术与传统虚拟机的比较

特性Docker容器虚拟机
启动速度秒级分钟级
计算能力损耗几乎没有损耗50%左右
性能接近原生弱于原生
系统支持量(单机)上千个几十个
隔离性资源限制完全隔离

安装Docker

本次实验连接国内镜像,或许会有些慢

关闭防火墙

下载Docker的repo文件 

替换仓库地址 

更新索引文件并安装Dokcer

添加国内镜像

修改系统内核

开启Dokcer

Docker基本操作

镜像操作

镜像作为容器的基础,需掌握拉取、查看、构建和删除等操作:

操作类型命令示例说明
拉取镜像docker pull nginx:latest从仓库下载指定镜像(如官方Nginx镜像)
查看本地镜像docker images列出所有已下载的镜像,显示镜像ID、标签、大小等信息
构建镜像docker build -t myapp:v1 .通过当前目录的Dockerfile构建镜像,-t指定标签
删除镜像docker rmi nginx:latest删除指定镜像(若镜像被容器引用,需先删除容器)

容器操作

        命令格式:

docker create [选项] 镜像 运行的程序
常用选项:

-i:让容器的输入保持打开的状态
-t:让Docker分配一个伪终端

        使用此命令可以查看所有容器的运行状态,添加-a选项,可以列出系统最近一次启动的容器

docker ps -a

容器是镜像的运行实例,需掌握启动、停止、查看和删除等操作:

操作类型命令示例说明
运行容器docker run -d -p 8080:80 --name web nginx后台启动Nginx容器,映射宿主机8080端口到容器80端口,并命名容器为web
查看容器docker ps -a列出所有容器(-a显示已停止的容器),默认仅显示运行中的容器
停止容器docker stop web停止名为web的容器
启动容器docker start web启动已停止的容器
删除容器docker rm web删除已停止的容器(需先停止容器)
进入容器docker exec -it web /bin/bash进入运行中的容器交互式终端(如需调试)

数据持久化

容器数据默认随容器删除而丢失,需通过卷(Volume)或绑定挂载实现持久化:

操作类型命令示例说明
创建卷docker volume create mydata创建名为mydata的卷
绑定挂载docker run -v /host/path:/container/path nginx将宿主机目录挂载到容器内部
使用卷docker run -v mydata:/container/path nginx将卷mydata挂载到容器内部

网络管理

容器间通信需通过Docker网络实现:

操作类型命令示例说明
创建网络docker network create mynet创建名为mynet的自定义网络
连接容器docker run --network mynet nginx将容器连接到mynet网络
查看网络docker network ls列出所有网络

日志与监控

实时查看容器日志和资源使用情况:

操作类型命令示例说明
查看日志docker logs web输出容器web的日志
实时日志docker logs -f web实时跟踪容器日志(类似tail -f
资源监控docker stats web查看容器CPU、内存等资源使用情况

清理操作

释放磁盘空间,删除无用资源:

操作类型命令示例说明
删除所有停止容器docker container prune删除所有已停止的容器
删除未使用镜像docker image prune删除未被任何容器引用的镜像
删除所有无用资源docker system prune删除所有停止的容器、未使用的网络、悬空镜像和构建缓存

实用技巧

        快速测试

docker run --rm -it ubuntu /bin/bash

运行一次性Ubuntu容器,退出后自动删除(--rm)。

  1. 环境变量传递:

    docker run -e MY_VAR=value nginx

    通过-e传递环境变量到容器。

  2. 资源限制

    docker run -m 512m --cpus=1 nginx

    限制容器内存为512MB,CPU核心数为1。

容器的导出与导入

导出命令格式:

docker export 容器ID/名称 >文件名

 导入命令格式:

文件名|docker import- 生成的镜像名称:标签

Logo

鲲鹏昇腾开发者社区是面向全社会开放的“联接全球计算开发者,聚合华为+生态”的社区,内容涵盖鲲鹏、昇腾资源,帮助开发者快速获取所需的知识、经验、软件、工具、算力,支撑开发者易学、好用、成功,成为核心开发者。

更多推荐