踏歌行

vuePress-theme-reco 踏歌行    2022 - 2025
踏歌行 踏歌行

Choose mode

  • dark
  • auto
  • light
环境和工具
    • Git
    • npm 和 yarn
    • windows快捷键
    • 正则
前端
    • 浏览器学习记录
    • React学习
    • Javascript 进阶语法
    • React工具
    • CSS学习
    • ThreeJS学习
    • 页面卡顿
人工智能
    • ComfyUI学习
    • Python基础
    • PyTorch版深度学习
后端
  • 博客评论功能
  • 文件处理
数据库
  • mysql学习
  • Redis学习
  • Prisma学习
部署
  • Docker基础
  • Dockerfile和docker compose
  • Docker实例
  • Docker网络连接
  • CDN学习
  • Jenkins学习
测试
  • Cucumber学习
  • Jest学习
网络
  • CDN学习
  • HTTP学习
Linux
  • 虚拟机与Linux安装
  • 文本编辑
  • Linux命令
  • Linux安全
  • Windows中CMD和SHELl
其它
  • 我的书单
  • Blender学习
  • 计划
时间轴
author-avatar

踏歌行

36

文章

23

标签

环境和工具
    • Git
    • npm 和 yarn
    • windows快捷键
    • 正则
前端
    • 浏览器学习记录
    • React学习
    • Javascript 进阶语法
    • React工具
    • CSS学习
    • ThreeJS学习
    • 页面卡顿
人工智能
    • ComfyUI学习
    • Python基础
    • PyTorch版深度学习
后端
  • 博客评论功能
  • 文件处理
数据库
  • mysql学习
  • Redis学习
  • Prisma学习
部署
  • Docker基础
  • Dockerfile和docker compose
  • Docker实例
  • Docker网络连接
  • CDN学习
  • Jenkins学习
测试
  • Cucumber学习
  • Jest学习
网络
  • CDN学习
  • HTTP学习
Linux
  • 虚拟机与Linux安装
  • 文本编辑
  • Linux命令
  • Linux安全
  • Windows中CMD和SHELl
其它
  • 我的书单
  • Blender学习
  • 计划
时间轴
  • 部署

    • Dockerfile和docker compose
      • Dockerfile
      • Docker compose编排
    • Docker实例
      • Docker安装软件流程总结
      • 查看docker容器
      • 实例:mySQL
      • 实例:轻量级可视化工具 Portainer
      • 实例:通过Docker,在Linux中搭建 FTP 服务
      • 实例:ClamAV 病毒扫描
      • 实例:iftop 检测流量
      • 实例:iperf3 网速性能检测
    • Docker网络连接
      • 基本命令
      • docker network
      • docker-compose中连接
    • Jenkins学习
      • CI/CD
      • 流水线Pipeline
    • Docker 基础
      • 1. systemstl 命令和Docker简单命令
      • 2. 容器命令
      • 3. 镜像
      • 4. Docker容器数据卷

Docker 基础

vuePress-theme-reco 踏歌行    2022 - 2025

Docker 基础


踏歌行 2022-12-13 工具 自动化
阅读量:

理解Docker容器

  1. 从面向对象角度,Docker利用容器独立运行一个或一组应用。容器类似于虚拟化的运行环境。
  • 镜像: 类
  • 容器: 镜像的实例
  • 仓库: 远程的镜像
  1. 从镜像容器角度,可以把容器看做一个简易版的Linux环境和运行在其中的应用程序。

学习资料来源 (opens new window)

# 1. systemstl 命令和Docker简单命令

  • 启动:systemstl start docker
  • 停止:systemstl stop docker
  • 停止所有:docker stop $(docker ps -a -q)
  • 重启:systemstl restart docker
  • 查看docker状态: systemstl status docker
  • 开机启动:systemctl enable docker

  • 启动容器 docker run hello-world
  • 查看docker概要信息:docker info
  • 查看docker帮助文档: docker --help
  • 查看docker命令的帮助文档: docker 具体命令 --help

# 2. 容器命令

  • 新建+启动容器: docker run [options] image名称 [command] [arg]

    • [options] 说明:
      • --name=:指定容器的名称
      • -d:后台运行(后台守护式容器)并返回容器ID
      • -i:以交互模式运行
      • -t:为容器重新分配一个伪输入终端
      • -it:前台有伪终端,等待交互(前台交互式容器)
      • -P:随机端口映射
      • -p:指定端口映射(前面的是容器之外服务器端口,后面的是容器内端口)
      • --memory,也就是-m:内存限制,格式是数字加单位,单位可以为 b,k,m,g。最小为 4M
      • --memory-swap:内存+交换分区大小总限制。格式同上
  • 列出当前正在运行的容器:docker ps [options], [options]为-a时,也列出历史上的容器

  • 退出容器并停止容器:exit

  • 退出容器,不停止容器:快捷键ctrl+p+q

  • 启动已停止的容器:docker start 容器ID或容器名

  • 重启容器:docker restart 容器ID或容器名

  • 停止容器:docker stop 容器ID或容器名

  • 强制停止容器:docker kill 容器ID或容器名

  • 删除已停止的容器:docker rm 容器ID或容器名

  • 删除所有exited状态的容器 docker rm $(docker ps -a -q --filter status=exited)

  • 删除关键字的容器:docker rm $(docker ps | grep "XXX关键字" | awk '{print $1}')

  • 重新进入容器:

    • docker exec 容器ID:在容器中打开新的终端,可以开始新的进程,用exit退出,不会导致容器的停止
    • docker attach 容器ID:直接进入容器启动命令的终端,不启动新的进程,用exit退出,会导致容器的停止

  • 从容器内拷贝文件到主机上:docker cp 容器ID:容器内路径 目的主机路径

  • 导出整个容器:docker export 容器ID > 文件名.tar

  • 导入整个容器:cat 文件名.tar | docker import -镜像用户/镜像名:镜像版本号

# docker 监测

  • 查看容器内存等资源使用情况 docker stats --no-stream

# 3. 镜像

# 镜像简单命令

  • docker images: 列出本地主机上的镜像
  • docker search 某镜像名
  • docker pull 某镜像名``docker pull 某镜像名:Tag
  • docker system df:查看镜像/容器/数据卷所占的空间
  • docker rmi 某镜像名ID:删除镜像, docker rmi -f 某镜像名ID强制删除
  • docker rmi $(docker images -a -q)删除所有镜像
  • docker rmi $(docker images | grep "XXX关键字" | awk '{print $3}')根据关键字删除镜像

打包好的运行环境就是image镜像文件。包括代码、运行时需要的库、环境变量和配置文件。

# Docker镜像加载原理

Docker的镜像是由一层一层的文件系统组成,这个层级的文件系统是UnionFS。

  1. bootfs: 在Docker的最底层是引导文件系统bootfs(boof file system)。和Linux/Unix系统一样。
  2. rootfs: 然后是rootfs(root file system),在bootfs之上,包含经典的Linux系统中的/dev,/proc,/bin,/etc等标准目录和文件。 rootfs就是各种不同的操作系统发行版。
  3. 镜像层:只读
  4. 容器层:可写

# Docker镜像commit操作

提交容器副本,使之成为新的镜像:docker commit -m="描述信息" -a="作者" 容器ID 要创建的目标镜像名:[标签名]

新镜像是从原有镜像一层一层向上叠加。

# Docker镜像发布push操作

在阿里云容器镜像服务的镜像仓库中获取以下代码:

  • docker login --username=[用户名] registry.cn-hangzhou.aliyuncs.com
  • docker tag [ImageId] registry.cn-hangzhou.aliyuncs.com/[命名空间名字]/[仓库名]:[镜像版本号]
  • docker push registry.cn-hangzhou.aliyuncs.com/[命名空间名字]/[仓库名]:[镜像版本号]

# 4. Docker容器数据卷

Docker容器数据卷的作用:映射,持久化、备份重要数据到主机目录。privileged含义:享有特权的。

命令:docker run -it --privileged=true -v /宿主机绝对路径目录:/容器内目录 镜像名

特点:

  • 数据卷的更改不会包含在镜像的更新之中
  • 可在容器之间共享数据
  • 卷中的更改实时生效

如何查看是否挂载成功: docker inspect 容器ID, 查看"Mounts","Source"为宿主机目录,"Destination"为容器内目录。
容器内只读设置:docker run -it --privileged=true -v /宿主机绝对路径目录:/容器内目录:ro 镜像名 ro表示read only
容器继承数据卷命令:docker run -it --privileged=true --volumes-from 父类容器名 --name=容器名 镜像名