docker学习 创建image

docker run > 找image > docker hub > 安装image > 新建一个程序

一切从docker hub寻找

1. Docker 命令行工具基础

  • 获取帮助:使用 docker help 可以显示所有可用命令的完整列表。若需特定命令的详细信息,可使用 docker help <COMMAND>(如 docker help cp)。
  • 常用容器操作命令
    • 运行/创建docker run 用于创建并启动容器。
    • 列举docker ps 列出正在运行的容器;docker ps -a 列出所有容器(包括已退出的)。
    • 停止/启动/重启docker stopdocker startdocker restart
    • 查看输出docker logs 查看容器日志,使用 -f--follow 标志可以持续监视日志更新。
    • 执行额外进程docker exec 可以在正在运行的容器内启动一个新进程。

2. 容器的运行模式与隔离

  • 后台运行(守护模式):使用 --detach-d 标志,容器将在后台运行,不会占用当前终端。
  • 交互模式:使用 --interactive (-i) 和 --tty (-t) 标志,可以为容器分配虚拟终端并保持标准输入开放,适合运行 shell 等程序。
  • PID 命名空间隔离:这是 Docker 的关键特性。每个容器都有自己独立的 PID 命名空间,这意味着容器内的进程无法看到或影响主机或其他容器中的进程。每个容器内都有自己的 PID 1(通常是 init 进程)。

3. 容器标识与元数据管理

  • 容器标识符:每个容器都有三种标识方式:
    1. 十六进制 ID:全长为 1024 位的唯一标识符(通常截断为 12 位显示)。
    2. 人性化名称:由 Docker 自动生成或通过 --name 显式指定。如果名称冲突,需先删除旧容器或使用 docker rename 重命名。
    3. CID 文件:使用 --cidfile 标志将容器 ID 写入特定文件,常用于自动化脚本。
  • 容器状态:容器总是处于以下四种状态之一:运行中 (Running)暂停 (Paused)重新启动 (Restarting)已退出 (Exited)

4. 构建与环境无关的系统

  • 环境变量注入:使用 -e--env 标志将配置信息注入容器。这种方式允许在不修改镜像的情况下改变程序的行为。
  • 只读文件系统:通过 --read-only 标志启动容器,可以将容器的文件系统设置为只读,这有助于提高安全性并防止未经授权的改动。

5. 容器的持久化与可靠性策略

  • 自动重启策略:在创建容器时设置 --restart 标志(如 alwayson-failure),可以在容器崩溃或系统重启后自动恢复服务。
  • 使用 init/supervisor:对于需要维持运行状态或管理多个进程的容器,可以使用 supervisord 或启动脚本来管理容器内的进程。

6. 清理容器

  • 删除容器:使用 docker rm 删除已停止的容器。若要删除正在运行的容器,可以使用 docker rm -f(强制删除)。
  • 自动清理:在 docker run 时添加 --rm 标志,容器在退出时会自动删除,非常适合临时测试。

比喻理解: 如果说镜像是一张“光盘快照”,那么运行中的容器就像是根据这张光盘启动的一台“虚拟游戏机”。PID 命名空间则是这台游戏机的外壳,它确保你在这一台机器上玩游戏时,不会干扰到旁边另一台机器的存档或进程。而环境变量就像是游戏机开机前的参数设置(如语言或难度),让你无需重新制作光盘也能调整游戏体验。