容器&Docker
容器是一种虚拟化技术,docker 是实现容器的一种工具,我们称它为容器引擎;
可以驱动容器的引擎还有 podman、containerd 等,docker 是目前市面上应用范围最广的一种容器引擎。
与虚拟机的区别
每个虚拟都机是一个完整的操作系统包括操作系统和内核,所以它是一个重量级的系统;而容器是轻量级的,因为容器只打包了操作系统的基础文件和库文件、还有应用程序及所有的依赖,他的运行速度就如同在系统中创建一个进程一样快。
镜像
镜像可由本地程序打包,或通过远程镜像仓库下载
# 根据 Dockerfile 构建镜像
docker build -t [image_name]:[tag] [Dockerfile_path]
# 远程拉取镜像
docker pull [image-name]:[tag]
查看镜像
docker image ls/list
删除<none>未使用的镜像
docker image prune
删除指定镜像
docker image rm [image-name]:[tag]
docker rmi <iamge_id>
docker批量删除镜像
docker rmi $(docker images | grep "none" | awk '{print $3}')
Dockerfile文件举例
FROM python:3.9-alpine
WORKDIR /app
COPY requirements.txt .
RUN pip install --no-cache-dir -r requirements.txt
COPY . .
CMD ["python", "app.py"]
容器
创建&运行
image-name
# 创建一个容器
docker create [-it] --name [container-name] [image-name]
# 创建并启动一个容器
docker run [-it] --name [container-name] [image-name]
# 挂载目录
docker run \
-v </your/home/path>/.xinference:/root/.xinference \
-v </your/home/path>/.cache/huggingface:/root/.cache/huggingface \
-v </your/home/path>/.cache/modelscope:/root/.cache/modelscope \
-p 9999:9997 \
--gpus all \
--name container-name \
xprobe/xinference:latest \
xinference-local -H 0.0.0.0
查看
# 查看当前运行的容器
docker ps
# 查看全部容器
docker ps -a
# 查看全部容器的id
docker ps -a -q
# 查看全部容器占用的空间
docker ps -as
# 查看一个正在运行容器进程,支持 ps 命令参数
docker top
交互
实时查看容器日志
docker logs -f <container_id_or_name>
访问docker中的redis数据库
docker exec -it [容器名|ID] redis-cli
进入docker容器
docker exec -it [容器名|ID] /bin/sh
交互式方式创建容器
docker run -it --name=容器名称 镜像名称:标签 /bin/bash
守护式方式创建容器:
docker run -di --name=容器名称 镜像名称:标签
登录守护式容器方式:
docker exec -it 容器名称 (或者容器ID) /bin/bash
停止&启动
停止容器:
docker stop 容器名称(或者容器ID)
启动容器:
docker start 容器名称(或者容器ID)
删除
# 删除一个容器
docker rm [容器id]
# 删除所有已停止的容器
docker container prune
# 删除所有容器
docker rm `docker ps -a -q`
其他
容器使用的系统资源
docker stats
docker compose
用于定义和运行多容器Docker应用程序
docker compose up
指定文件
docker-compose -f docker-compose.yml up -d