Docker基本教程

Docker是一种快速构建、运行、管理应用的工具。

官网:www.docker.com
官方文档:docs.docker.com/guides

Hyplus目录

1 镜像与容器基本使用

当利用Docker安装应用时,Docker会自动搜索井下载应用镜像(Image)。镜像不仅包含应用本身,还包含应用运行所需要的环境、配置、系统函数库。Docker会在运行镜像时创建一个隔离环境,称为容器(Container)。

镜像仓库:存储和管理镜像的平台,Docker官方维护了一个公共仓库——Docker Hub

docker

1.1 镜像仓库命令

从镜像仓库下载镜像到本地:

docker pull

将本地镜像推送到镜像仓库:

docker push

1.2 容器命令

创建并运行一个容器:

docker run 
    -d \    # 让容器在后台运行
    --name YOURNAME \   # 给容器起名,必须唯一
    -p 3306:3306 \  # 设置端口映射,**宿主机**端口映射到容器内端口
    -e KEY=VALUE \  # 设置环境变量
    repository:[tag]    # repository为镜像名,tag为镜像版本(可省略,默认为latest)

停止容器内的镜像(进程):

docker stop

启动容器内停止的镜像:

docker start

查看当前容器中的运行状态:

docker ps

删除容器:

docker rm

查看容器运行日志:

docker logs

在容器内部执行命令:

docker exec

查看容器详情:

docker inspect

1.3 本地镜像命令

查看所有本地镜像:

docker images

删除本地镜像:

docker rmi

自定义定义本地镜像:

docker build

将本地镜像打包成压缩文件:

docker save

加载打包成压缩文件后的本地镜像:

docker load

2 数据卷挂载

数据卷(volume)是一个虚拟目录,是容器内目录与宿主机目录之间映射的桥梁。常用命令如下——

创建数据卷:

docker volume create

查看所有数据卷:

docker volume ls

删除指定数据卷:

docker volume rm

查看某个数据卷的详情:

docker volume inspect

清除数据卷:

docker volumme prune

在执行docker run时,可使用-v 数据卷:容器内目录完成数据卷挂载。

当创建容器时,若挂载了数据卷且数据卷不存在,则会自动创建数据卷。


3 本地目录挂载

在执行docker run时,可使用-v 本地目录:容器内目录完成本地目录挂载。

本地目录必须以“/”或“./”开头,若直接以名称开头,会被识别为数据卷而非本地目录


4 Dockerfile构建镜像

镜像是包含了应用程序、程序运行的系统函数库、运行配置等文件的文件包。构建镜像的过程即为将上述文件打包的过程。

镜像结构:

  • 入口 (EntryPoint):镜像运行入口,一般是程序启动的脚本和参数
  • 层(Layer):添加安装包、依赖、配置等每次操作都形成新的一层
  • 基础镜像(Baselmage):应用依赖的系统函数库、环境、配置、文件等

Dockerfile是一个包含一系列指令(Instruction)的文本文件,用于说明要执行什么操作来构建镜像。将来Docker可以根据Dockeifile帮助构建镜像。

官方文档:docs.docker.com/engine/reference/builder

常见指令如下:

  1. FROM:指定基础镜像。【例】FROM centos:6
  2. ENV:设置环境变量,可在后面指令使用。【例】ENV key value
  3. COPY:拷贝本地文件到镜像的指定目录。【例】COPY ./jrell.tar.gz /tmp
  4. RUN:执行Linux的shel1命令,一般是安装过程的命令。【例】RUN tar -zxvf /tmp/jrell.tar.gz && EXPORTS path=/tmp/jrell:$path
  5. EXPOSE:指定容器运行时监听的端口,是给镜像使用者看的。【例】EXPOSE 8080
  6. ENTRYPOINT:镜像中应用的启动命令,容器运行时调用。【例】ENTRYPOINT java -jar xx.jar

可以基于Ubuntu基础镜像,利用Dockerfile描述镜像结构:

# 指定基础镜像
FROM ubuntu:16.04
# 配置环境变量,JDK的安装目录、容器内时区
ENV JAVA_DIR=/usr/local
# 拷贝jdk和java项目的包
COPY ./jdk8.tar.gz $JAVA_DIR/
COPY ./docker-demo.jar /tmp/app.jar
# 安装JDK
RUN cd $JAVA_DIR \ && tar -xf ./jdk8.tar.gz \
&& mv ./jdk1.8.0_144 ./java8
# 配置环境变量
ENV JAVA_HOME=$JAVA_DIR/java8
ENV PATH=$PATH:$JAVA_HOME/bin
# 入口,java项目的启动命令
ENTRYPOINT ["java", "-jar", "/app.jar"]

亦可直接基于JDK为基础镜像,省略前面的步骤:

# 基础镜像
FROM openjdk:11.0-jre-buster
# 拷贝jar包
COPY docker-demo.jar /app.jar
#入口
ENTRYPOINT ["java", "-jar", "/app.jar"]

编写好dockerfile后,可利用docker build命令来构建镜像:

docker build -t myImage:1.0 .
  • -t:给镜像起名,格式依然同docker run
  • .:指定在当前目录构建(与dockerfile同目录)

5 容器网络互联

默认情况下,所有容器都是以bridge方式连接到Docker的一个虚拟网桥上

docker默认bridge连接

加入自定义网络的容器才可以通过容器名互相访问,Docker的网络操作命令如下:

  1. docker network create:创建一个网络
  2. docker network ls:查看所有网络
  3. docker network rm:删除指定网络
  4. docker network prune:清除未使用的网络
  5. docker network connect:使指定容器连接加入某网络
  6. docker network disconnect:使指定容器连接离开某网络
  7. docker network inspect:查看网络详细信息

6 Docker Compose

Docker Compose通过一个单独的docker-compose.yml模板文件(YAML格式)来定义一组相关联的应用容器,帮助实现多个相互关联的Docker容器的快速部署。

【例】如下所示,一个项目(Project)分为若干服务(Service)

version: "3.8"

services:
    containerA:
        image: A
        container_name: A
        ports:
            - "11:11"
    containerB:
        image: B
        container_name: B
        ports:
            - "22:22"
    containerC:
        image: C
        container_name: C
        ports:
            - "33:33"

Docker Compose的命令格式如下:

docker compose [Options] [Commands]
  • Options
    1. -f:指定compose文件的路径和名称
    2. -p:指定project名称
  • Commands
    1. up:创建并启动所有service容器
    2. down:停止并移除所有容器、网络
    3. ps:列出所有启动的容器
    4. logs:查看指定容器的日志
    5. stop:停止容器
    6. start:启动容器
    7. restart:重启容器
    8. top:查看运行的进程
    9. exec:在指定的运行中容器中执行命令

7 本站特色项目:KINA-Next

KINA-Next镜像打包与部署:

  • Build KINA (ver 1.x):
docker build --platform linux/amd64 -t kina-next:1.x NextChat
  • Save KINA as a tar:
docker save kina-next:1.x > kina-next-1.x-linux-amd64.tar
  • Run KINA on Hypluserver:
docker run -d --name kina -p 3000:3000 \
-e CHATGLM_API_KEY="HYPLUS-KEY" \
-e CHATGLM_URL="https://open.bigmodel.cn" \
-e BASE_URL="https://api.gptgod.online" \
-e OPENAI_API_KEY="HYPLUS-KEY" \
-e XAI_URL="https://api.gptgod.online" \
-e XAI_API_KEY="HYPLUS-KEY" \
-e DEFAULT_MODEL="gpt-4o-mini@OpenAI" \
-e CUSTOM_MODELS="-all,gpt-4o-mini@OpenAI,gpt-4.1-nano@OpenAI,glm-4-flash" \
-e ENABLE_MCP=true \
kina-next:1.x

由于宝塔面板功能限制,目前重启服务器后需手动进入Docker容器列表启动容器

《Docker基本教程》有43条评论

发表评论