docker使用

docker介绍

Docker 是一款开源的 容器化 平台,它能将应用程序及其依赖打包成轻量级、可移植的容器,让应用在任何支持 Docker 的环境中(如开发机、测试服务器、生产服务器)以相同方式运行,解决了 "在我电脑上能跑,到你电脑上就不行" 的环境一致性问题。

核心概念

镜像

  • 是容器的"模板",包含运行应用所需要的代码、运行时、库、环境变量和配置文件,是只读的

  • 可以将镜像理解为手机的"应用安装包",包含应用运行的所有必要文件

  • 镜像通过 Dockerfile 构建,也可以从 Docker Hub 或者私有仓库进行获取

容器

  • 是镜像的 运行实例 ,是可读写的、独立的运行环境

  • 镜像相当于安装包,容器是安装后正在运行的"应用进程"

  • 多个容器可基于同一个镜像创建,彼此隔离(资源、网络、文件系统),互不干扰

仓库

  • 镜像仓库(Registry):要从哪一个镜像仓库拉取镜像,通常通过 DNS 或 IP 地址来确 定一个镜像仓库如 hub.docker.com;一个 Registry 中可以存在多个 Repository·Repository 可分为"顶层仓库"和"用户仓库";·用户仓库名称格式为"用户名/仓 库名"·每个仓库可以包含多个 Tag(标签),每个标签对应一个镜像

  • Repository: ·由某特定的 docker 镜像的所有迭代版本组成的镜像仓库

  • 镜像名称(name)+标签(tag):如 nginx:latest

  • 认证能力:提供用户注册,登录、登出能力

  • 索引:提供镜像的索引信息,方便检索

一个容器镜像包含了两个部分,一个是元数据,其实就是由 dockerfile 构建出来的描 述文件,这个描述文件会说这个容器镜像有多少层,每一层里面有什么内容,它的 checksum 这些信息都会记录下来,还有最终的可执行文件在哪就是在存储数据里面, 就是在一个一个的 blob 里面,真正占有空间的就是这些 blob

整体视图如下

镜像仓库分类
  • 按照是否对外开放划分

    • 公有仓库:像阿里云、dockerhub 等放到公有网络上,不用登录就可以下载镜像, 供大家访问使用

    • 私有仓库:不对外开放,往往位于私有网络,只有公司内部人员可以使用。

  • 按照供应商和面向群体划分

    • sponsor(赞助) registry:第三方的 registry,供客户和 docker 社区版使用

    • mirror(镜像) registry:第三方的 registry,只让客户使用,例如阿里云必须注册才 能使用

    • vendor(供应商) registry:由发布 docker 镜像的供应商提供的 registry,例如像 Google 和 Redhat 提供了镜像仓库服务

    • private registry:通过没有防火墙和额外的安全层的私有实体提供的 registry,仅供 内部使用

优势

轻量级

容器共享宿主机的操作系统内核,无需像虚拟机(VM)那样加载完整的操作系统,启动速度快(秒级)、资源占用少。

环境 一致性

开发、测试、生产环境使用相同的镜像,避免 "环境不一致导致的 bug"。

隔离性

容器间资源隔离,每个容器有独立的文件系统、网络和进程空间,互不影响。

可移植性

容器可在任何支持 Docker 的平台(Linux、Windows、macOS,或云服务器)上运行,无需修改配置。

扩展性,易部署

结合编排工具(如 Docker Compose、Kubernetes),可快速实现多容器应用的部署、扩缩容和管理。

使用场景

  • 应用打包与分发:将应用及依赖打包成镜像,方便团队共享和部署。

  • 微服务架构:每个微服务部署在独立容器中,便于独立开发、测试和扩展。

  • 持续集成 / 持续部署 CI/CD :在 CI/CD 流程中,用 Docker 打包应用,实现自动化测试和部署。

  • 环境 隔离:开发环境、测试环境、生产环境通过容器隔离,避免依赖冲突。

区别

以下是Docker与虚拟机(VM)的区别

|------|------------|-------------|
| 特性 | Docker 容器 | 虚拟机(VM) |
| 启动速度 | 秒级 | 分钟级 |
| 资源占用 | 低(共享内核) | 高(需加载完整 OS) |
| 隔离性 | 进程级隔离 | 硬件级隔离(更彻底) |
| 镜像体积 | 小(MB 级别) | 大(GB 级别) |
| 移植性 | 强(跨平台 / 云) | 弱(依赖虚拟化软件) |

也就是说docker比传统虚拟机资源利用率高,启动块

但是为什么?

docker 有比虚拟机更少的抽象层。docker 不需要 Hypervisor 实现硬件资源虚拟化,运 行在 docker 容器上的程序直接使用的是实际物理机的硬件资源。因此在 cpu、内存利 用率上 docker 将会在效率上有明显的优势。docker 利用的是宿主机的内核,而不需要 Guest OS,节省了 Guest OS 占用的资源。

docker 不需要 Guest OS,创建一个容器时,不需要和虚拟机一样重新加载一个操作 系统内核。从而避免引寻、加载操作系统内核返回时耗时耗资源的过程,当新建一个 虚拟机时,虚拟机软件需要加载 Guest OS,返回新建过程是分钟级别的。而新建一个 docker 容器只需要几秒钟。

常用命令

镜像仓库命令

|---------------|------|-------------------|
| 命令 | 功能 | 相同命令 |
| docker login | 登录仓库 | |
| docker logout | 登出仓库 | |
| docker pull | 拉去镜像 | docker image pull |
| docker push | 推送镜像 | docker image push |
| docker search | 查找镜像 | |

docker login

用来登录docker镜像仓库,如果没有指定镜像仓库,就默认为docker官方仓库 Docker Hub

首先我们先要创建一个账号,找到docker官网,进行注册

然后就可以直接在服务器进行登录操作啦

复制代码
# server 是对应仓库地址
docker login [OPTIONS] [SERVER] 

# 当前docker网址被封,可以使用阿里云或者腾讯云进行练习
docker login ccr.ccs.tencentyun.com --username=xxxxxxx
  • Options

    • -u:用户名

    • -p:密码

docker logout

登出一个 Docker 镜像仓库,如果未指定镜像仓库地址,默认为官方仓库 Docker Hub

复制代码
# server 是对应仓库地址
docker logout [SERVER] 

docker pull

从镜像仓库中拉取或者更新指定镜像

复制代码
# TAG:镜像的版本
# DIGSET:镜像摘要,是镜像的唯一表示
# TAG 和 DIGSET 二选一即可
docker pull [OPTIONS] NAME[:TAG|@DIGEST] 
  • Options

    • -a:拉去所有 tagged 镜像

    • --disable-content-trust:忽略镜像的校验,默认开启

同等命令

复制代码
docker image pull

docker push

将本地的镜像上传到镜像仓库,要先登陆到镜像仓库

复制代码
docker push [OPTIONS] NAME[:TAG] 
  • Options

    • -a:推送所有 tagged 镜像

    • --disable-content-trust:忽略镜像的校验,默认开启

同等命令

复制代码
docker image push

需要注意的是,在push镜像到对应的镜像仓库之前,需要使用tag来对对应的镜像进行重新标记,至于标记的具体内容,和我们仓库的地址有关,比如我的就是要改为:

复制代码
ccr.ccs.tencentyun.com/腾讯云命名空间/镜像仓库名:tag

从 Docker Hub 查找镜像

复制代码
 docker search [OPTIONS] TERM
  • Options

    • --no-trunc:显示完整的镜像描述

    • -f <过滤条件>:列出收藏数不小于指定值的镜像

镜像命令

docker images

列出本地镜像

复制代码
docker images [OPTIONS] [REPOSITORY[:TAG]]

# 同等命令
docker image ls
docker image list
  • Options

    • -a :列出本地所有的镜像(含中间映像层,默认情况下,过滤掉中间映像层)

    • --digests :显示镜像的摘要信息

    • -f :显示满足条件的镜像

    • --format :指定返回值的模板文件

    • --no-trunc :显示完整的镜像信息

    • -q :只显示镜像 ID

复制代码
# 输出本地镜像中 REPOSITORY 为 nginx 的镜像列表
docker images nginx

docker image inspect

查看镜像的详细信息

复制代码
 docker image inspect [OPTIONS] IMAGE [IMAGE...] 

docker tag

标记本地镜像,将其归入某一仓库

复制代码
docker tag SOURCE_IMAGE[:TAG] TARGET_IMAGE[:TAG] 

# 同等命令
docker image tag

这里我们可以看到,这两个image的id是一样的,也就是说并不是重新生成了一个镜像,而是对同一个镜像标记了不同的标签,本质上的镜像文件还是同一个

docker rmi

删除镜像的标签 删除标签不会删除镜像本身,只有当一个镜像的所有标签都被删除后,镜像才会被 Docker 清理(释放磁盘空间)

复制代码
docker rmi NAME:TAG

容器命令

以下是部分常见的容器命令

docker run

创建一个新的容器并且执行一个命令

复制代码
 docker run [OPTIONS] IMAGE [COMMAND] [ARG...] 
 
 # 同等命令
 docker container run
  • Options

    • -d:后台运行容器,并返回容器 ID

    • -i:以交互模式运行容器,通常与 -t 同时使用

    • -P:随机端口映射,容器内部端口随机映射到主机的端口

    • -p:指定端口映射,格式: 主机(宿主)端口:容器端口

    • -t:为容器重新分配一个伪输入终端,通常与 -i 同时使用

    • --name="nginx-lb": 为容器指定一个名称

    • -h "mars": 指定容器的 hostname

    • -e username="ritchie": 设置环境变量

    • --cpuset-cpus="0-2" or --cpuset-cpus="0,1,2": 绑定容器到指定 CPU 运行

    • -m :设置容器使用内存最大值

    • --network="bridge": 指定容器的网络连接类型

    • --link=[]: 添加链接到另一个容器

    • --volume , -v: 绑定一个卷

    • --rm :shell 退出的时候自动删除容器

      使用镜像 nginx:latest 以后台模式启动一个容器,并将容器命名为 mynginx

      docker run --name mynginx -d nginx:latest

docker ps

列出容器

复制代码
docker ps [OPTIONS]
  • Options

    • -a :显示所有的容器,包括未运行的

    • -f :根据条件过滤显示的内容

    • --format :指定返回值的模板文件。如 json 或者 table

    • -l :显示 latest 的容器

    • -n :列出最近创建的 n 个容器

    • --no-trunc :不截断输出

    • -q :静默模式,只显示容器编号

    • -s :显示总的文件大小

相关推荐
土拨鼠烧电路11 小时前
RPA悖论迷思:从解放的利器到运维的枷锁?
大数据·运维·笔记·rpa
宇钶宇夕11 小时前
西门子 S7-1200 PLC 3 台收尘器交替控制系统:硬件选型 + IO 地址分配 + 实操指南(下)
运维·自动化
Bruce_Liuxiaowei11 小时前
Linux 内存获取方法详解
linux·运维·网络安全
源梦想11 小时前
英雄无敌动作冒险网页小游戏Linux部署演示
linux·运维·服务器
p***950011 小时前
Nginx作用以及应用场景
运维·nginx
Ghost Face...11 小时前
Linux V4L2驱动架构与实现详解
linux·运维·架构
再睡一夏就好11 小时前
深入理解Linux程序加载:从ELF文件到进程地址空间的完整旅程
linux·运维·服务器·c++·学习·elf
v***56511 小时前
Nginx 请求超时
运维·nginx
执笔论英雄11 小时前
【RL】 ROLL中负载均衡
运维·算法·负载均衡
吕了了11 小时前
165 Windows 系统在 UEFI 和 Legacy BIOS 上的启动流程详解
运维·windows·系统