第一次使用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命令

相关推荐
DeeplyMind2 小时前
第24章 Docker资源管理
运维·docker·容器
@hdd11 小时前
工作节点组件详解:kubelet、kube-proxy 与容器运行时
容器·kubernetes
@hdd11 小时前
Kubernetes 网络模型:Pod 通信、Service 网络与 CNI
网络·云原生·容器·kubernetes
2401_8480097212 小时前
Docker学习后续
docker·云原生·eureka
封奚泽优12 小时前
Docker常用命令(Windows 11)
运维·docker·容器
前路不黑暗@12 小时前
Java项目:Java脚手架项目的文件服务(八)
java·开发语言·spring boot·学习·spring cloud·docker·maven
一文解千机14 小时前
wine 优化配置及显卡加速,完美运行Electron 编译的程序(新榜小豆芽、作家助手、小V猫等)
linux·ubuntu·electron·wine·wine优化配置·wine显卡加速·wine大型游戏
only_Klein16 小时前
kubernetes-ReplicaSet控制器
容器·kubernetes
杨浦老苏16 小时前
本地优先的AI个人助手Moltis
人工智能·docker·ai·群晖