docker与大模型(口语化原理和实操讲解)
文章目录
- 一、镜像images
- 1)下载安装
- 2)docker images相关命令(保存、删除、上传、别名、搜索镜像)
- 二、容器container
- 1)展现所有在跑的容器服务ps
- 2)start /restart / kill / stop /rm
- 3)exec /cp
- 4)run/create
- 5)logs/stats/top
- 6)commit
- 7)attach
- 三、dockerfile
- 1)基本概念和常用指令
- 2)dockerfile示例
- 3)构建镜像命令
- 四、volume
- 五、network
- 六、docker-compose
- 七、proxy
一、镜像images
-
问题
本地部署后给别人,环境不同带来的麻烦别人部署不了 -
解决问题思路示意
-
内容
①images:二进制文件,可以认为是个模板,可以生成container,container是实际在跑的程序
②repo:仓库,存储很多人传的不同images镜像,类似于github一样
③dockerfile:从自己本地生成images的过程
1)下载安装
①官网下载
②查看docker是否装好开起来
//通过 docker ps 命令,用户可以快速查看当前运行的容器,了解它们的状态和基本信息,这对于管理和监控 Docker 容器非常有用。
docker ps
输出格式
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
CONTAINER ID:容器的唯一标识符。
IMAGE:容器使用的镜像。
COMMAND:容器启动时运行的命令。
CREATED:容器创建的时间。
STATUS:容器的当前状态,如运行中(Up)、已停止(Exited)等。
PORTS:容器暴露的端口和映射到主机的端口。
NAMES:容器的名称。
2)docker images相关命令(保存、删除、上传、别名、搜索镜像)
- 备注
不知道命令的作用,就用下面命令打印出来
docker 命令 --help
-
具体命令展示
①images / images ls
②search 搜索镜像\pull 拉取镜像
③tag \ push \login \ logout
④rmi 删除镜像
⑤save \load
⑥history \ inspect -
具体命令效果
①images / images ls
标签
REPOSITORY TAG IMAGE ID CREATED SIZE
REPOSITORY:镜像所属的仓库名称。
TAG:镜像的标签。
IMAGE ID:镜像的唯一标识符。
CREATED:镜像创建的时间。
SIZE:镜像的大小。
②search 搜索镜像\pull 拉取镜像
在repo上面搜索hello-world
拉取镜像
(若指定版本,则加上:1.0)
docker pull rancher/hello-world
拉取过来后,用docker images看本地镜像,可以看到本地已经有这个rancher的hello-world了
③tag \ push \login \ logout
tag给镜像起别名,命令用于给本地的 Docker 镜像添加一个新的标签。标签是镜像的一个别名,可以用来标记镜像的不同版本或者用途。通过 docker tag 命令,用户可以将一个镜像标记为属于某个特定的仓库或者版本,这对于管理和分发 Docker 镜像非常有用。
docker tag 标签名字 账号名字/库名字:版本号docker tag SOURCE_IMAGE[:TAG] TARGET_IMAGE[:TAG]
push上传镜像
④rmi 删除镜像
docker rmi 镜像名字
⑤save 保存镜像 \ load
离线要保存镜像的话
docker save -o myimage.tar myimage
解压缩
docker load -i hw.tar
⑥history \ inspect
history看镜像构建的历史
inspect看对应镜像的信息
二、容器container
容器命令讲解
1)展现所有在跑的容器服务ps
docker ps -a //-a意思是all,所有的
2)start /restart / kill / stop /rm
①stop 停止某个容器的服务
②start开始某个容器的服务器
③restart 重启某个容器
④删除某个容器rm(不推荐使用,容易出问题)
3)exec /cp
①exec 进入到某个容器里面(已经有这个容器了
)
-i: 可交互的
t:终端
②把某个文件复制到容器里面去
或是把容器内的文件复制到当前目录下
4)run/create
①run运行一个镜像
后台守护进程运行一个容器
docker run -d 4b1
如果想让容器停掉后就销毁了
docker run --rm -d 4b1
②create创建一个容器,但是不让他跑起来
5)logs/stats/top
①logs 监控容器输出
②stats 看运行中的容器占用的资源
③top查看容器占用
6)commit
①commit 把容器生成一个镜像(不建议这么做,这么做的话只能生成黑盒)
7)attach
附加到一个容器上面,但是CTRL+C就会杀掉容器
三、dockerfile
1)基本概念和常用指令
- 基本概念
①dockerfile:一个文本文件,其中包含了一系列指令,Docker 引擎根据这些指令构建镜像
②镜像:Dockerfile 构建后生成的可执行软件包,包含了运行应用所需的代码、库、环境变量等。
③层:Docker 镜像由多个层(Layer)构成,每一条指令都会创建一个新的层。层是不可变的,这使得 Docker 镜像更为高效和可重用。 - 常用指令
FROM 指定基础镜像,Dockerfile 的第一行通常是此指令。
MAINTAINER 指定维护者信息(不推荐使用,使用 LABEL 替代)。
LABEL 添加元数据到镜像,例如作者、版本等。
RUN 在构建镜像时执行命令(例如安装软件包)。
CMD 指定容器启动时要执行的命令,可以被 docker run 命令覆盖。
ENTRYPOINT 设置容器启动时的默认命令,不能被 docker run 轻易覆盖。
COPY 将文件或目录从主机复制到镜像中。
ADD 类似于 COPY,但还支持 URL 和自动解压压缩文件。
ENV 设置环境变量。
EXPOSE 声明容器监听的端口,但并不会实际映射到主机。
VOLUME 创建挂载点,用于持久化数据。
WORKDIR 设置工作目录,后续指令将在此目录下执行。
ARG 定义构建时可用的变量。
USER 指定运行时的用户。
SHELL 指定默认的 shell,用于运行后续指令
①FROM使用举例:表示基于什么环境做镜像
1)以特定版本的 CentOS 为基础:FROM centos:7
,表示以 CentOS 7 版本的镜像作为基础来构建新的镜像,该镜像中包含了 CentOS 7 的操作系统环境及相关的软件包管理系统等基础组件。
2)以 Alpine Linux 为基础
:FROM alpine:3.18,Alpine 是一个轻量级的 Linux 发行版,常用于构建小型、高效的容器镜像。这里以 Alpine 3.18 版本为基础,适合对镜像大小有严格要求的场景,如构建简单的网络服务或命令行工具容器等
3)以特定版本的 Java 运行时环境镜像为基础
:FROM openjdk:11-jdk,此指令以包含 Java 11 开发工具包的 OpenJDK 镜像为基础,适用于构建 Java 应用程序的容器化环境,镜像中已经预安装了 Java 运行时和开发所需的相关库等,方便直接在容器内运行和开发 Java 应用。
4)以 Python 为基础镜像:FROM python:3.11
,slim 版镜像去除了一些不必要的软件包和文件,使得镜像体积大幅减小。这对于容器化部署非常有利,尤其是在资源受限的环境中,如小型服务器、边缘计算设备等,可以更高效地利用存储空间,同时也能加快镜像的下载和部署速度
5)以 C++ 为基础镜像:对于 C++,通常没有像 Python 那样直接对应版本的官方基础镜像,但可以选择一些基于 Linux 发行版且预安装了 C++ 编译环境的镜像作为基础:FROM ubuntu:20.04
可以看到有自带的环境(没有的话docker会自动下载,有则优先从本地寻找)
②WORKDIR 设置工作目录,后续指令将在此目录下执行。
(应该把所有代码放到这个路径下面去,然后执行的时候应该从这个路径作为项目的根路径
去执行指令)
③COPY 将文件或目录从主机复制到镜像中。
#表示将当前路径的所有文件复制到/app/下面
COPY . /app/
④RUN 在构建镜像时执行命令(例如安装软件包)。
#安装flask包
RUN pip install flask
⑤CMD 容器要启动的时候要执行的命令
CMD ["python", "app.py"]
⑥ENTRYPOINT 设置容器启动时的默认命令,不能被 docker run 轻易覆盖,可以看到加参数2还是执行了 echo 1 然后2,不会被打断
而CMD会被打断,从而有报错(一杯覆盖)
替代的效果
常用会这么用:(不填,参数默认1,填参数那就是所填的参数,占位符的作用)
⑦ADD 类似于 COPY,但还支持 URL 和自动解压压缩文件。(一般不会用来解压包,一般是RUN tar -xvf )
#拷贝后解压
COPY . /app/
ADD ./docs.tar.gz /app/
⑧LABEL \ EXPOSE \ VOLUME
1)LAYBEL添加元数据到镜像,例如作者、版本等。就是注释
2)expose 声明容器监听的端口,但并不会实际映射到主机,把容器的5000端口暴露出来,这可以看到容器外面调用的端口是5001
3)VOLUME 创建挂载点,用于持久化数据。就是-v的参数,可以看到下面./docs目录与容器内也就是/app/docs挂载在一起了
但是这样有误删除的风险
一般是创建卷吗,如下(这个卷是docker自己维护的,可以跨容器进行通信)
⑨ARG与ENV
ARG 构建容器中使用的环境变量,
ENV 运行中使用的环境变量,
env查看环境变量
可以在构建的时候传参数来修改
⑩HEALTHCHECK :定时任务,检测容器是否运行
不断执行这个命令,没有反馈就表示错误了(10s执行一次,超时3秒,超时连续3次)
2)dockerfile示例
FROM python:3.10-slim LABEL maintainer="panhu"
LABEL version=1.0
LABEL desc="A docker bigv"WORKDIR /appARG APP_VER=1.0
ENV APP_ENV=1.0COPY . /app/
EXPOSE 5000ENV FLASK_RUN_HOST=0.0.0.0
ENV FLASK_RUN_PORT=5000HEALTHCHECK --interval=10s --timeout=3s --retries=3 CMD curl --fail http://localhost:5000/ || exit 1RUN pip install flaskCMD ["python", "app.py"]
3)构建镜像命令
#起别名d1
docker build -t my-app .