第一次使用Docker(Ubuntu)

文章目录

  • [1 简介](#1 简介)
    • [1.1 核心概念](#1.1 核心概念)
    • [1.2 Docker工作流程](#1.2 Docker工作流程)
  • [2 安装](#2 安装)
  • [3 启动](#3 启动)
  • [4 镜像](#4 镜像)
    • [4.1 拉取](#4.1 拉取)
    • [4.2 查看](#4.2 查看)
    • [4.3 标签](#4.3 标签)
    • [4.4 导出和导入](#4.4 导出和导入)
    • [4.5 删除](#4.5 删除)
  • [5 容器](#5 容器)
    • [5.1 创建](#5.1 创建)
    • [5.n 日志](#5.n 日志)

1 简介

1.1 核心概念

  1. 容器(Container) 是Docker技术的核心运行单元,与传统的虚拟机不同,容器不需要模拟完整的硬件环境,也不需要运行独立的操作系统内核。容器在运行时与其他容器和宿主机共享操作系统内核,容器之间相互独立,每个容器都拥有自己的文件系统、网络和进程空间。
  2. 镜像(Image) 是用于创建容器的模板,包含了运行应用所需的代码、库和配置文件,用户可以从Docker Hub下载镜像或自己构建。镜像采用分层存储结构,每一层代表一个修改步骤。镜像中不包含任何的动态数据,其内容在构建之后不再变动。
  3. Dockerfile是一个文本文件,写明了如何一步步构建镜像,通过执行其中的指令能够自动生成镜像。
  4. 镜像仓库(Image Repository) 是集中存储和分发镜像的地方。最常用的公共仓库是Docker Hub,提供了大量官方和社区维护的镜像。

1.2 Docker工作流程

  1. 开发者编写Dockerfile定义环境,构建Docker镜像。
  2. 将构建好的镜像推送到镜像仓库。
  3. 在任何支持Docker的机器上拉取镜像并运行容器。

2 安装

使用cat /etc/os-release命令查看操作系统信息:"Ubuntu 24.04.3 LTS"。

  1. 更新和安装工具

    bash 复制代码
    # 更新软件包索引
    sudo apt update
    
    # 安装必要的依赖工具
    sudo apt install -y \
    	ca-certificates \
    	curl \
    	gnupg \
    	lsb-release \
    	software-properties-common
  2. 安装Moby

    2017年,Docker公司决定将软件产品"Docker"和开源项目"Docker"区分开来,将开源项目"Docker"更名为"Moby",基于Moby构建Docker社区版和企业版等软件产品。

    安装 Docker的多个组件,包括 Docker 引擎、命令行工具、构建镜像的插件工具、多容器应用的编排管理工具。

    bash 复制代码
    sudo apt install -y moby-engine moby-cli moby-buildx moby-compose

    检查安装:

    bash 复制代码
    docker --version

3 启动

由于我是在容器化环境下、以"非服务形式"安装的,无需通过systemctl启动,可以直接运行。

bash 复制代码
sudo systemctl enable docker
sudo systemctl start docker

使用docker ps命令验证。

常用的Docker服务命令包括:

命令 说明
systemctl start docker 启动服务
systemctl stop docker 停止服务
systemctl restart docker 重启服务
systemctl enable docker 设置开机启动服务
systemctl status docker 查看服务状态

4 镜像

Docker 镜像是创建容器的基础模板,包含了运行应用所需的代码、库、环境变量和配置文件,用户可以直接使用现成的镜像,也可以基于现有镜像定制自己的镜像。

Docker Hub 是 Docker 官方的公共镜像仓库,提供了大量官方和社区维护的镜像。

4.1 拉取

bash 复制代码
docker pull [OPTIONS] NAME[:TAG|@DIGEST]
  • OPTIONS(可选):
    • --all-tags/-a:下载指定镜像的所有标签。镜像标签是用来表示和管理镜像版本的重要工具,通常用于区分不同版本或环境。
    • --disable-content-trust:跳过镜像签名验证。
  • NAME:镜像名称,通常包含注册表地址,不带注册表地址则默认从Docker Hub拉取。
  • TAG(可选):镜像标签,默认为latest
  • DIGEST(可选):镜像的SHA256摘要。

举例,在Docker Hub中找到想拉取的镜像,从"Tag"中可以看到详细信息:

如上图,在命令行中输入:

bash 复制代码
docker pull langchain/langchain:0.1.0

4.2 查看

  • 使用docker images查看本地所有镜像。

  • 使用docker inspect [镜像名(含标签)]查看镜像的详细信息。

  • 使用docker history [镜像名(含标签)]查看镜像的构建历史。

  • 使用docker system df查看磁盘使用情况。

4.3 标签

使用docker tag [原镜像名(含标签)] [新镜像名(含标签)]命令为镜像创建新标签。

4.4 导出和导入

  • 导出
    使用docker save -o [镜像名].tar [镜像名]命令将镜像打包成tar文件。
  • 导入
    使用docker load -i [镜像名].tar命令将镜像导入到Docker中。

4.5 删除

使用docker rmi [镜像名/镜像ID]命令删除镜像。当镜像有多个标签时,删除一个标签只会移除该标签引用,不会真正删除掉镜像数据,需要使用镜像ID才能彻底删除镜像文件。

Docker使用过程中会基类大量未使用的镜像缓存,通过docker image prune命令可以清理没有标签且不被任何镜像引用的悬空镜像,加上-a参数还会删除所有未被容器引用的镜像。

5 容器

5.1 创建

bash 复制代码
docker run [OPTIONS] [IMAGE]
OPTIONS
--name [name] 指定容器名称
-it 保持交互式终端连接
-v [主机目录]:[容器目录] 将主机的目录挂载到容器中
--network 指定容器的网络模式,设置为=host可以让容器共享主机的网络命名空间
--gpus all表示分配所有可用的GPU给容器
-m 指定容器最多可以使用的内存,例如150G
--oom-kill-disable=true 禁用OOM(Out of Memory)杀手
ulimit memlock =-1表示不限制内存锁的大小
ulimit stack 线程栈大小限制,例如64MB=67108864
shm-size 设置容器中共享内存的大小,例如32GB
-d 以后台模式运行容器
-p 端口映射,格式为[主机端口号]:[容器端口号]
--rm 容器停止时自动删除容器
--env [变量名]=[变量值] -e [变量名]=[变量值] 设置环境变量
--restart 容器的重启策略
-u [用户名] 指定用户运行

例如,使用langchain/langchain:0.1.0镜像构建容器,指定容器名称为sweety_cake

bash 复制代码
docker run --name sweety_cake langchain/langchain:0.1.0 -it -v ~:/workspace --network=host --gpus all

5.n 日志

使用docker logs [容器名]查看容器的日志输出。


参考来源:
AIGC
Docker 万字教程:从入门到掌握
Ubuntu 24.04 国内环境下 Docker 安装完整指南
对于 Docker 改名 Moby ,大家怎么看?
Docker - 基础docker-compose命令

相关推荐
Lupino6 小时前
别再只聊 AI 写代码了:技术负责人要把“变更治理”提到第一优先级
python·docker·容器
Java陈序员2 天前
轻量强大!一款现代化的 Kubernetes 集群管理与监控工具!
云原生·容器·kubernetes
Sheffield4 天前
Docker的跨主机服务与其对应的优缺点
linux·网络协议·docker
Sheffield4 天前
Alpine是什么,为什么是Docker首选?
linux·docker·容器
马艳泽4 天前
win10下运行Start Broker and Proxy报错解决
docker
元Y亨H5 天前
华硕主机重装 Ubuntu 系统完全指南
ubuntu
用户13573999256605 天前
Windows 从 0 搭建 WSL2 原生 AI 开发环境:Codex + Docker + VSCode
docker
vi_h5 天前
在 macOS 上通过 Docker 安装并运行 Ollama(详细可执行教程)
macos·docker·ollama
黑心老魔5 天前
通过 Docker 创建开发环境
docker·开发环境
冬奇Lab6 天前
一天一个开源项目(第41篇):Workout.cool - 现代化开源健身教练平台,训练计划与进度追踪
docker·开源·资讯