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
目录
相关文章
|
存储 缓存 文件存储
如何保证分布式文件系统的数据一致性
分布式文件系统需要向上层应用提供透明的客户端缓存,从而缓解网络延时现象,更好地支持客户端性能水平扩展,同时也降低对文件服务器的访问压力。当考虑客户端缓存的时候,由于在客户端上引入了多个本地数据副本(Replica),就相应地需要提供客户端对数据访问的全局数据一致性。
32713 80
如何保证分布式文件系统的数据一致性
|
前端开发 容器
HTML5+CSS3前端入门教程---从0开始通过一个商城实例手把手教你学习PC端和移动端页面开发第8章FlexBox布局(上)
HTML5+CSS3前端入门教程---从0开始通过一个商城实例手把手教你学习PC端和移动端页面开发第8章FlexBox布局
17766 21
|
设计模式 存储 监控
设计模式(C++版)
看懂UML类图和时序图30分钟学会UML类图设计原则单一职责原则定义:单一职责原则,所谓职责是指类变化的原因。如果一个类有多于一个的动机被改变,那么这个类就具有多于一个的职责。而单一职责原则就是指一个类或者模块应该有且只有一个改变的原因。bad case:IPhone类承担了协议管理(Dial、HangUp)、数据传送(Chat)。good case:里式替换原则定义:里氏代换原则(Liskov 
36697 21
设计模式(C++版)
|
存储 编译器 C语言
抽丝剥茧C语言(初阶 下)(下)
抽丝剥茧C语言(初阶 下)
|
机器学习/深度学习 人工智能 自然语言处理
带你简单了解Chatgpt背后的秘密:大语言模型所需要条件(数据算法算力)以及其当前阶段的缺点局限性
带你简单了解Chatgpt背后的秘密:大语言模型所需要条件(数据算法算力)以及其当前阶段的缺点局限性
24772 14
|
机器学习/深度学习 弹性计算 监控
重生之---我测阿里云U1实例(通用算力型)
阿里云产品全线降价的一力作,2023年4月阿里云推出新款通用算力型ECS云服务器Universal实例,该款服务器的真实表现如何?让我先测为敬!
36678 15
重生之---我测阿里云U1实例(通用算力型)
|
SQL 存储 弹性计算
Redis性能高30%,阿里云倚天ECS性能摸底和迁移实践
Redis在倚天ECS环境下与同规格的基于 x86 的 ECS 实例相比,Redis 部署在基于 Yitian 710 的 ECS 上可获得高达 30% 的吞吐量优势。成本方面基于倚天710的G8y实例售价比G7实例低23%,总性价比提高50%;按照相同算法,相对G8a,性价比为1.4倍左右。
|
存储 算法 Java
【分布式技术专题】「分布式技术架构」手把手教你如何开发一个属于自己的限流器RateLimiter功能服务
随着互联网的快速发展,越来越多的应用程序需要处理大量的请求。如果没有限制,这些请求可能会导致应用程序崩溃或变得不可用。因此,限流器是一种非常重要的技术,可以帮助应用程序控制请求的数量和速率,以保持稳定和可靠的运行。
29849 52