docker基础使用

前言

该文章是个人学习docker的一个记录,挑选使用比较科学的指令,在这做个记录,同时方便初步接触docker的同学,能够快速且完整的掌握docker的基本使用。看完本文你可以掌握的知识点为:(1)使用dockerfile构建镜像 (2)按照交互式启动容器 (3)容器 端口和文件映射 (4)以较为科学的方式创建删除镜像和容器 (5)镜像迁移

查看docker镜像

docker images

在这里插入图片描述

删除无用的镜像

docker rmi $(docker images -f “dangling=true” -q)

该命令不会删除正被容器引用的 images
在这里插入图片描述

解释

docker rmi <image_id> :删除某个image的指令

docker images -f “dangling=true” -q

-f :显示时进行过滤
“dangling=true”: 表示过滤并显示悬挂状态的镜像,即没有被标签引用或者被其他层依赖的镜像
-q :只显示image id
docker rmi $(docker images -f “dangling=true” -q) 将docker images的结果传入rmi中删除

运行docker

打包镜像做debug时建议运行如下指令,然后使用attach进入容器内部,检验镜像是否构建正确,或者通过commit对image进行修改(不推荐)

docker run -itd --rm --net host --rm --name embedding-server15 --gpus all -v /home/cmge/log:/app/log -v /etc/timezone:/etc/timezone:ro -v /etc/localtime:/etc/localtime:ro -p 54321:54321 embedding-server:latest

-itd :将会将docker运行在后台,并且提供交互,意味着,你可以通过attach 获取到containerid后,进入container执行shell指令等操作
–rm:在该容器结束后,会删除 embedding-server15这个容器
–gpus all:表示该容器可以使用gpu资源
-v : 为目录或文件映射

“/home/cmge/log:/app/log " 表示将/home/cmge/log和容器中的/app/log做文件映射,可以让容器中的文件和宿主机文件进行互通
" -v /etc/timezone:/etc/timezone:ro -v /etc/localtime:/etc/localtime:ro” 目的是保证container中的时间系统和运行container的机器保持一致
-p :用于做端口映射 "54321:54321"将container中的54321端口映射到宿主机的54321端口上; --net host 是直接使用宿主机的端口,所以可以不用-p做映射
embedding-server:latest:为镜像,即该容器依托的镜像

正式运行的指令

docker run --rm --name embedding-server15 --gpus all -v /home/cmge/log:/app/log -v /etc/timezone:/etc/timezone:ro -v /etc/localtime:/etc/localtime:ro -p 54321:54321 embedding-server:latest

查看docker 容器

docker ps

在这里插入图片描述

进入docker容器

docker attach

docker 关闭停止容器

docker stop

提交镜像(直接在container中修改镜像)

这种做法不推荐,因为没有痕迹显示的告诉别人镜像中有什么

docker commit embedding-server15

在这里插入图片描述
不输入tag时将会自动填入tag为latest
在这里插入图片描述

重命名镜像

docker tag embedding-server

在这里插入图片描述
docker tag 6473262c5498 test

使用dockerfile构建镜像

docker build -t embedding-server:dockerfile-build -f ./agi-npcs-leo/Dockerfile --network host .

docker文件

# 使用cuda12的镜像
FROM nvidia/cuda:12.2.2-cudnn8-runtime-ubuntu22.04

# 设置置空proxy环境变量
RUN unset http_proxy && unset https_proxy

# 设置proxy环境变量,科学上网
ENV http_proxy=http://10.10.111.144:7900
ENV https_proxy=http://10.10.111.144:7900

# ENV http_proxy=http://10.10.111.148:17890
# ENV https_proxy=http://10.10.111.148:17890


# 如果不用代理,可以更换源为阿里云
# RUN  sed -i s@/archive.ubuntu.com/@/mirrors.aliyun.com/@g /etc/apt/sources.list
# RUN  apt-get clean

# 更新系统并安装依赖, -y避免手动确认呢(因为国内环境,建议每条单独执行)
RUN apt update 
RUN apt upgrade -y
RUN apt install build-essential -y
RUN apt install zlib1g-dev 
RUN apt install libncurses5-dev -y
RUN apt install  libgdbm-dev 
RUN apt install libnss3-dev -y
RUN apt install  libssl-dev 
RUN apt install  libreadline-dev 
RUN apt install libffi-dev 
RUN apt install libsqlite3-dev 
RUN apt install wget -y
 
# 下载和安装 Python 3.10.12
RUN wget https://www.python.org/ftp/python/3.10.12/Python-3.10.12.tgz && \
    tar -xf Python-3.10.12.tgz && \
    cd Python-3.10.12 && \
    ./configure --enable-optimizations && \
    make -j$(nproc) && \
    make altinstall && \
    python3.10 --version


RUN apt install -y python3-dev python3-pip

# 安装 FastAPI, ChromaDB, Torch 和 Sentence Transformers
RUN pip install fastapi chromadb torch torchvision torchaudio sentence_transformers

ENV CACHE=/root/.cache
ENV WORKSPACE=/app

# 创建工作目录,后续所有相对路劲都以/app开始
WORKDIR ${WORKSPACE}

# 将宿主机上的模型文件拷贝到对应目录下
COPY ./agi-npcs-leo/BAAI_bge-large-zh ${CACHE}/torch/sentence_transformers/BAAI_bge-large-zh


# 将宿主机上的工程复制到容器中的工作目录
COPY ./agi-npcs-leo ./

RUN unset http_proxy && unset https_proxy

# 下面踩过一个坑,这样运行会报错
# ENTRYPOINT ["python3 embeding_server/embeding-server.py"]

#ENTRYPOINT  ,当调用docker run时,会立即执行的命令
ENTRYPOINT ["python3", "embeding_server/embeding-server.py"]


注意

dockerfile中使用WORKDIR之后,将会以WORKDIR指定的文件夹作为根目录,所以使用相对路径时要慎重 尤其是 "~/dir"这样将会是不正确的文件目录

docker镜像迁移

将docker镜像迁移到其他环境

docker镜像打包

docker save -o <output_tar_file>.tar …

其中,-o选项后面指定了输出的tar文件的路径和名称, …参数指定了要保存的镜像的名称或ID。

docker加载镜像

docker load -i myimage.tar

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值