Docker教程

简介: Docker 是一个开源容器化平台,通过镜像和容器实现应用的快速部署与隔离。本文详细介绍 Docker 的核心概念与常用命令:包括镜像管理(查看、拉取、构建、导出/导入)、容器操作(启动、停止、日志、执行命令)、数据卷与网络配置、Dockerfile 编写、Compose 编排及镜像加速设置,帮助用户高效使用 Docker 进行开发与运维。

Docker

一.images(镜像)

images(镜像):镜像就想Linux操作系统中Linux内核挂载的root文件系统.

命令:

1.查看有哪些镜像:

docker images [-option]
option:
-a : 所有镜像
-q : 只显示镜像id
--digests:显示镜像摘要信息
--no-trunc:显示完整的镜像信息

2. 从上面拉取镜像

docker pull [镜像名]:[标签]
标签就是版本的意思.

3. 搜索镜像(国内基本用不了)

docker search [镜像名]

4. 删除镜像

docker rmi [镜像名/镜像id]
-f : 强制删除
-a : 删除全部镜像

5. 构建镜像

docker build -t [镜像名] [DockerFile所在路径]

6. 导出镜像

docker save -o [保存目标的名称] [镜像名]

7. 导入镜像

docker load -i [镜像要保存到的位置]

8. 给镜像打Tag

docker tag [本地镜像][:Tag(有就填)] [目标镜像位置][:Tag(想要打的标签/版本号)]

9. History(build)

docker history [镜像名]

10.查看镜像/容器信息

docker inspect [镜像名/容器名]

二.Container(容器)

Container(容器):容器是镜像运行时的实体(就想把类实例化)

1. 查看有哪些容器

docker ps(只能查看正在运行的容器)
-a : 还可以查看没在运行的

2. 启动/停止/重启突发容器

docker start/stop/restart [容器名/id]

3. 强制停止容器

docker kill [容器名/id]

4. 删除容器(删除前要先停止)

docker rm [容器名/id]

5. 查看日志

docker logs [容器名/id]
-f : 就会实时在终端更新日志

6. 对容器进行命令操作(正在运行)

docker exec -it [容器名/id] bash
这样就可以以容器进入bash(也就是Linux系统的终端)

7. 运行一个容器

docker run [容器名/id]
这里也可以-it但是这里与exec不同的是这里是对没运行的容器先让他运行在进bash.
-v [容器内文件]:[宿主机文件]可以将宿主机的文件和容器内的文件关联(类似&)
-p [宿主机端口号]:[容器端口号]可以让宿主机的端口号和容器内端口号关联就可以在宿主机查看容器内的运行.
挂载数据卷到容器:
  • 1.-v [数据卷]:[需挂载到容器内的位置]
  • 2.-mount source=[数据卷],target=[需挂载到容器内的位置]

8. 把宿主机文件放入容器(以及反向操作)

docker cp [宿主机文件path] [容器名/id]:[容器内路径(可进bash用ls查看)]

9. 显示容器的资源占用情况

docker stats

10. 显示容器的进程信息

docker top [容器名/id]

11. 进入正在运行的容器终端(类似日志/不同的是如果停止容器会被kill)

docker attach [容器名/id]
查看

三.数据卷(Volume)

Volumes(数据卷):数据卷是一个可供一个或多个容器使用的位于宿主机上特殊目录

1. 创建一个数据卷

docker volume create [数据卷名]

2. 查看数据卷信息

docker volume ls

3. 删除数据卷

docker volume rm [数据卷]

4. 查看数据卷信息

docker inspect [数据卷]

四.DockerFile

1. 指定一个镜像

FROM [容器名]:[TAG]

2. 设置工作目录

WORKDIR [工作目录]

3. 拷贝文件

min:

COPY [需要拷贝文件位置] [拷贝到的位置]

max(支持URL和自动解压):

ADD [需要拷贝文件位置] [拷贝到的位置]

4. 在构建时需要运行指令(会在前面设置的工作目录下执行)

RUN [command]

5. 容器启动后命令(覆盖/不覆盖)

覆盖:

CMD ["command 1",...,"command n"]

不覆盖:

ENTRYPOINT ["command"]

6. 声明监听端口

EXPOSE [端口号]

7. 创建挂载点

VOLUME ["位置"]

8. 给某变量打注释

LABEL [变量]=["注释"]

9. 配置环境变量(在容器运行过程中仍然存在并且可查看)

ENV [键值]=[配置内容]

10. 配置在容器运行是可修改的环境变量并且不会保存在容器内

ARG [键值]=[配置内容]

11. 容器的健康检查

HEALTHCHECK [op] CMD [command]
一般command是curl -f 端口网址 || exit 1

op:

--interval [间隔时长]
--timeout [命令运行时长]
--retries [连续失败次数上限]

五.容器间的桥接(网络相关)

由于容器的端口是动态的会变且没法使用容器名字crul,所以我们想到了创建一个网络配置,并且给容器配置该网络配置就可以用容器名字访问端口了.

1. 创建网络配置:

docker network create [网络名字]
指定网络驱动
-d [网络驱动(不懂先写bridge)]
2. 查看网络
docker network ls
3. 查看网络配置信息
docker network inspect [网络名]
4. 连接容器/断开连接
docker network connect [网络名] [容器名/id]
docker network disconnect [网络名] [容器名/id]
5. 删除网络配置
docker network rm [网络名]

六.Docker Compose

yml文件的构建

# compose版本声明
version:'3'

# services服务
sercices:
    [服务名]:
    # 配置镜像
    images: [镜像名]:[TAG]
    # 配置容器
    container_name: [容器名]
    # 端口声明
    ports:
    - ["宿主机:容器"]
    # 数据卷挂载
    volumes:
    - [数据集名字]:[挂载目录]
    # 配值网络
    networks:
    - [网络名字]

volumes:
    [数据卷名字]:
networks:
    [网络名字]:
        driver: [bridge(网络驱动)]

七. Proxy代理(Docker镜像加速)

1.Ubuntu虚拟机下:

# 找到docker/daemon.josn(找不到自己建)
# 添加:
{
   
    "registry-mirrors": [
        ["镜像地址1(下面会列出一些)"],
        .....,
        ["镜像地址n(下面会列出一些)"]
    ]
}
重启Docker服务
sudo systemctl daemon-reload
sudo systemctl restart docker

2. Windows下

打开docker Desktop -> setting(就是设置一个齿轮图标) -> Docker Engine
然后
{
   
  "features": 
  {
   
    "buildkit": true
  },
  "registry-mirrors": [
    # 在这里添加 ok?
    ["镜像地址1(下面会列出一些)"],
        .....,
    ["镜像地址n(下面会列出一些)"]
  ]
}
点击Apply

3.镜像地址列举(如果已经暂停服务就不要再写了)

Coding:"https://hub-mirror.c.coding.net/",
DaoCloud:"https://docker.m.daocloud.io",
中科大:https://docker.mirrors.ustc.edu.cn/,
网易:"https://hub-mirror.c.163.com/",
百度:"https://mirror.baidubce.com",
南京大学:"https://docker.nju.edu.cn",
阿里云:"https://[your_id].mirror.aliyuncs.com"//阿里云的要自己申请自己复制

4.编排这些网址

我建议大家ping一下这些网址首先不能ping通的就不要写上去了,然后根据ping完后的速度从快到慢排序.
演示:
# 打开cmd/powershell,比如coding
ping hub-mirror.c.coding.net
目录
相关文章
|
25天前
|
应用服务中间件 Shell nginx
最全的docker命令参数解释及命令用法
本文系统详解Docker核心命令,涵盖容器(run/exec/ps/start/stop等)、镜像(pull/build/push/rmi等)、网络、数据卷及全局参数,并配实操示例与可直接执行的命令,助初学者快速掌握Docker日常运维与开发应用。
733 129
|
4月前
|
Ubuntu Shell Linux
二、Docker安装部署教程
当你敲下docker run时,背后发生了一系列神奇的操作:从检查本地镜像,到从仓库拉取,再到创建并启动容器。搞懂这个核心流程后,就可以动手在Linux上安装Docker了。关键一步是先添加官方的软件源,然后再安装。为了避免拉取镜像时龟速等待,最后一定要记得配置国内的镜像加速器,这能极大提升你的使用体验。
747 5
二、Docker安装部署教程
|
Kubernetes Cloud Native 安全
容器技术之发展简史
容器技术催生了云原生思潮,云原生生态推动了容器技术发展。整理容器技术近 20 年的发展历史,大致可以将其分为四个历史阶段。
20768 1
容器技术之发展简史
|
2月前
|
存储 弹性计算 监控
游戏公司不愿看到的代码:为《英雄联盟》《三角洲》打造高稳定代练业务系统源码与架构解析!
代练行业痛点如何破?基于UNIAPP+PHP轻量架构,低成本实现高并发稳定运行,阿里云全栈部署月成本不足20元,支持《英雄联盟》《三角洲行动》等大型赛事流量,开源方案助你快速搭建合规、高效、防封的代练系统。
159 1
游戏公司不愿看到的代码:为《英雄联盟》《三角洲》打造高稳定代练业务系统源码与架构解析!
|
4月前
|
关系型数据库 MySQL Shell
三、Docker常用命令
把 Docker 玩转,就像一个建筑师,需要掌握两套核心工具:一套用来管理你的“图纸”(镜像),另一套用来管理你用图纸盖好的“房子”(容器)。
499 3
|
2月前
|
资源调度 Kubernetes 监控
一文掌握k8s容器的资源限制
在Kubernetes中,合理设置容器的资源请求与限制可保障集群资源高效利用。通过定义CPU和内存的requests与limits,防止资源滥用,提升应用稳定性。结合命名空间配额与工具如xkube,可实现多集群统一管理与可视化配置,优化资源调度。
318 3
|
2月前
|
Kubernetes 监控 数据可视化
一文掌握k8s的升级更新策略
K8S中通过`spec.strategy`设置Pod替换策略,支持Recreate(重建)和RollingUpdate(滚动升级)。默认为滚动升级,可设`maxUnavailable`和`maxSurge`控制升级过程,实现无中断更新。可通过xkube平台可视化配置。
176 1
|
2月前
|
Ubuntu Linux 网络安全
Linux入门(Ubuntu)
本文系统介绍了Linux常用命令的学习路径,分为四个主要部分:基础命令、终端格式命令、高级命令和远程操作。基础命令部分涵盖目录查看、切换、文件创建删除和复制移动等基本操作;终端格式命令详细解释了命令语法结构及常用选项;高级命令部分包括重定向、文件搜索、权限管理等进阶功能;最后介绍了远程登录和文件传输方法。文章还特别说明了Ubuntu包管理工具的使用,并推荐了Xshell和FileZilla等实用第三方工具。该教程适合使用虚拟机或WSL2环境学习Linux操作系统的用户,内容由浅入深,覆盖了从入门到进阶的常见
143 1
Linux入门(Ubuntu)
|
2月前
|
Kubernetes Cloud Native 安全
一文掌握k8s容器的生命周期
容器生命周期钩子是Kubernetes核心机制,支持在容器启动后(postStart)和终止前(preStop)执行自定义逻辑,实现服务注册、优雅停机等操作。结合启动命令,可精细控制应用生命周期,提升云原生应用稳定性与可靠性。
250 4
一文掌握k8s容器的生命周期
|
4月前
|
存储 分布式计算 Java
告别繁琐循环:用Java Stream优雅处理集合
告别繁琐循环:用Java Stream优雅处理集合
214 44