Docker的部署与基本使用

Docker的部署和基本使用

Docker是一个开源的容器化平台,它允许开发者将应用程序及其依赖项打包成独立的、可移植的容器,从而简化了应用程序的部署、管理和扩展过程。这些容器可以在任何支持Docker的平台上运行,确保了应用的一致性和可移植性。

Docker的三个核心组件:镜像(Image)、容器(Container)、仓库(Repository)

  • 镜像是Docker的基础,它包含了应用程序及其所需的运行环境和依赖项,可以看作是静态的、只读的文件系统模板。
  • 容器则是基于镜像创建的,它是镜像的运行实例,提供了独立的运行环境,可以运行、启动、停止、删除等操作,具有轻量级、可移植和隔离性的特点。
  • 仓库则用于存储和管理镜像,用户可以从仓库中拉取镜像到本地进行部署,也可以将本地的镜像推送到仓库进行分享和备份,实现了镜像的集中管理和分发。

Ubuntu安装docker

  • 更新系统软件包
shell 复制代码
sudo apt update
shell 复制代码
sudo apt upgrade
  • 卸载旧版本的Docker(如果已安装
shell 复制代码
sudo apt-get remove docker docker-engine docker.io containerd runc
  • 安装Docker依赖
shell 复制代码
sudo apt-get install ca-certificates curl gnupg lsb-release
  • 添加Docker官方GPG密钥(为了确保下载的Docker软件包是官方的、未被篡改的,需要添加Docker官方的GPG密钥)。
shell 复制代码
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -
  • 添加Docker软件源
shell 复制代码
sudo apt install software-properties-common
shell 复制代码
sudo add-apt-repository "deb [arch=$(dpkg --print-architecture)] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable"
  • 安装Docker
shell 复制代码
sudo apt-get install docker-ce docker-ce-cli containerd.io

镜像(Image)

镜像是通过Dockerfile来创建的,Dockerfile是一个文本文件,其中包含了创建镜像所需的一系列指令和配置。开发者在Dockerfile中定义应用程序的依赖项、运行环境以及构建步骤。Dockerfile的名称是固定的,通常放到项目的根目录下。

Dockerfile 举例:

dockerfile 复制代码
FROM ubuntu:latest   # 基于最新版本的 Ubuntu 镜像构建基础镜像

RUN apt-get update && apt-get install -y g++   # 更新包列表并安装 g++ 编译器

WORKDIR /cpp_test   # 设置工作目录为 /cpp_test。工作目录是在容器内执行命令时的默认目录

COPY a.cpp .   # 将宿主机当前路径下的 a.cpp 文件复制到镜像的工作目录 /cpp_test 中

RUN g++ a.cpp -o a.out   # 在工作目录 /cpp_test 中编译 a.cpp,生成可执行文件 a.out

COPY b.cpp .   # 将宿主机当前路径下的 b.cpp 文件复制到镜像的工作目录 /cpp_test 中

RUN g++ b.cpp -o b.out   # 在工作目录 /cpp_test 中编译 b.cpp,生成可执行文件 b.out
  • Layer Caching 基本原理

    • 分层结构
      • Docker镜像由多个只读层(Layer)组成,每个层都包含了镜像的一个状态快照。这些层是堆叠在一起的,最底层是基础镜像,之后的每一层都基于前一层进行修改。
    • 分层缓存
      • 当你构建一个Docker镜像时,Docker会对每一层进行缓存。每次运行构建命令时,Docker会检查之前是否已经创建了相同的层。如果找到匹配的层,Docker就会重用该层的缓存,而不是重新构建。
    • 缓存失效
      • 如果Dockerfile的任何一步发生了变化(包括文件内容、命令参数等),从该变化的命令开始的所有后续命令的缓存都会失效,需要重新构建。
    • 缓存层大小
      • 每个层都占用磁盘空间,过多的层会导致镜像体积变大,影响性能。优化Dockerfile可以减少层的数量,例如合并多条RUN命令。
  • 构建Docker镜像。最后的 . 代表Dockerfile的相对路径。

shell 复制代码
sudo docker build -t 'image_name' .
shell 复制代码
 sudo docker build --progress=plain -t 'image_name' .

--progress=plain 选项是在build过程中查看Cache的命中情况,下图是基于上述脚本,在修改a.cpp文件后重新build的示例:

  • 查看image列表
shell 复制代码
sudo docker images list
  • 删除image
shell 复制代码
sudo docker rmi [IMAGEID]

容器(Container)

  • 启动容器
shell 复制代码
docker run [OPTIONS] image_name
复制代码
OPTIONS:

-d, --detach:在后台运行容器并打印容器ID。

-p XXX:YYY, --publish:将宿主机端口(XXX)映射到容器的端口(YYY)。

-v Host_dir:Container_dir, --volume:挂载宿主机目录或卷到容器。(宿主机目录的内容会覆盖容器目录的内容,并且以宿主机目录内容为优先。)

--name:为容器指定一个名称。
  • 查看docker运行的容器
shell 复制代码
sudo docker ps
  • 停止容器
shell 复制代码
sudo docker stop [CONTAINER_ID]
  • 删除容器
shell 复制代码
sudo docker rm [CONTAINER_ID] 
相关推荐
鹤鸣的日常32 分钟前
前端运行时动态环境变量方案
前端·react.js·docker·前端框架·vue·gitlab
asyxchenchong8882 小时前
最新Hermes Agent 技能封装与科研自动化:以 Meta-Analysis 为例-实现从文献检索到绘图的一站式工作流
运维·人工智能·自动化
tianyuanwo2 小时前
项目内自我管理:一名OS领域DevOps的破局之路
运维·devops
三十..2 小时前
Redis 核心原理与高可用架构实践
运维·数据库·redis
我是谁??4 小时前
ubuntu22.04 通过docker部署vLLM(Qwen3-0.6B)大模型+New API+OpenWebUI
docker·容器·vllm
jinglong.zha4 小时前
LScript-从零基础到商业变现的AI自动化学习平台
运维·学习·自动化
运维瓦工4 小时前
DevOps 生态介绍(十):Docker Compose 核心 YAML 配置详解与常用命令大全
spring cloud·docker·容器
Adorable老犀牛4 小时前
Telegraf:InfluxData 出品的指标采集代理
运维·telegraf
云烟成雨TD4 小时前
Spring AI 1.x 系列【59】容器化开发支持:Docker Compose 与 Testcontainers
人工智能·spring·docker
北塔软件5 小时前
北塔软件智能体平台 | 不只监控,更是AI时代的数据资产
运维·人工智能·知识库·北塔软件