1.docker desktop配置镜像

json
{
"builder": {
"gc": {
"defaultKeepStorage": "20GB",
"enabled": true
}
},
"debug": true,
"experimental": false,
"insecure-registries": [
"registry.docker-cn.com",
"docker.mirrors.ustc.edu.cn"
],
"registry-mirrors": [
"https://docker.registry.cyou",
"https://docker-cf.registry.cyou",
"https://dockercf.jsdelivr.fyi",
"https://docker.jsdelivr.fyi",
"https://dockertest.jsdelivr.fyi",
"https://mirror.aliyuncs.com",
"https://dockerproxy.com",
"https://mirror.baidubce.com",
"https://docker.m.daocloud.io",
"https://docker.nju.edu.cn",
"https://docker.mirrors.sjtug.sjtu.edu.cn",
"https://docker.mirrors.ustc.edu.cn",
"https://mirror.iscas.ac.cn",
"https://docker.rainbond.cc",
"https://do.nark.eu.org",
"https://dc.j8.work",
"https://dockerproxy.com",
"https://gst6rzl9.mirror.aliyuncs.com",
"https://registry.docker-cn.com",
"http://hub-mirror.c.163.com",
"http://mirrors.ustc.edu.cn/",
"https://mirrors.tuna.tsinghua.edu.cn/",
"http://mirrors.sohu.com/"
]
}
2.Docker相关指令
-
拉取镜像
shdocker pull python:3.10 -
运行容器 ,根据镜像名
docker_demo运行容器,可以通过--name container_name指定容器名称,否则会随机生成shdocker run -d -p 7777:7777 docker_demo -
查看所有容器
shdocker ps -a -
查看正在运行的容器
shdocker ps -
查看更详细的容器信息,包括配置、网络状态、挂载的卷等
shdocker inspect <container_id> -
启动容器
shdocker start <container_id> -
暂停容器
shdocker stop <container_id> -
删除容器
shdocker rm <container_id> -
查看容器日志
shdocker logs <container_id> docker logs -f <container_id> # 实时查看日志 docker logs --tail n <container_id> # 查看最后n行日志 docker logs --since=30m <container_id> # 查看最近30分钟日志 docker logs --since="2025-12-12" <container_id> # 查看指定日期后的日志 -
进入运行中的容器查看容器内部
shdocker exec -it <container_id> bash # 进入容器 exit # 退出容器
3.操作Dockerfile并运行容器
- 编写
Dockerfile文件,用于构建创建镜像的指令,下载慢开代理要么配镜像源
dockerfile
# 优先查看本地是否有该镜像,有则使用,无则从镜像仓库拉取
FROM python:3.10
# docker内部的工作目录
WORKDIR /app
# 下载系统所需要的包 1.update 2.install 3.clean
RUN apt-get update && \
apt-get install -y xxx && \
apt-get clean
# 先复制当前目录下的/app/requirements.txt到 docker内部的/app下
# 前面的./相对于 docker build命令执行时指定的构建上下文路径,后面的./由WORKDIR决定
COPY ./app/requirements.txt ./
# 根据requirements.txt下载依赖包
RUN pip install --no-cache-dir --upgrade pip -i https://pypi.tuna.tsinghua.edu.cn/simple && \
pip install --no-cache-dir -r requirements.txt -i https://mirrors.aliyun.com/pypi/simple/
# 下载pytorch需要额外指定,不能放在requirements.txt一起,因为下载地址不一样
pip install torch==2.6.0 torchvision==0.21.0 torchaudio==2.6.0 --index-url https://download.pytorch.org/whl/cpu
# 将当前目录下的/app文件夹的所有内容复制到 docker内部的/app下
COPY ./app/ ./
# 声明容器运行时监听的端口(文档性作用,实际映射需要在 docker run 时指定)
EXPOSE 7777
# 指定根目录,否则会出现找不到自定义模块
ENV PATH=$PATH:/app
ENV PYTHONPATH=/app
# 容器运行时执行的指令,执行WORKDIR的main.py,不需要写成./main.py
CMD ["python", "main.py"] # 构建镜像
- 根据当前操作目录下的
Dockerfile文件构建镜像,镜像名为docker_demo
sh
docker build -t docker_demo .
- 运行容器 ,根据镜像名
docker_demo运行容器,可以通过--name container_name指定容器名称,否则会随机生成
sh
docker run -d -p 7777:7777 docker_demo
4.通过docker-compose运行容器
yaml
version: '3.0'
services:
ai_cv: # 服务名,自定义
image: ai_cv17:latest # 镜像名
container_name: ai_cv17 # 容器名
ports:
- "5000:5000" # 映射端口号
networks:
- my_network # 网络
volumes:
- D:\Docker\vols\app:/app # 数据挂载
# mq
rabbitmq:
image: rabbitmq:4.1.3-management
container_name: rabbitmq4.1.3
ports:
- "8005:5672"
networks:
- my_network
volumes:
- /data/rabbitmq:/var/lib/rabbitmq
- /data/rabbitmq/config/rabbitmq.sh:/etc/rabbitmq/rabbitmq.sh
environment:
- RABBITMQ_DEFAULT_USER=admin
- RABBITMQ_DEFAULT_PASS=admin
- RABBITMQ_DEFAULT_VHOST=/
networks:
my_network: # 网络名称
external: true # 声明为已创建好的网络
运行docker compose文件,如果名称不是docker-compose.yml可以通过-f参数指定文件名
sh
docker-compose up -d
5.本地镜像导入导出
sh
docker load -i file.tar
sh
docker save image_name:tag -o file.tar # 建议image_name:tag而不是image_id,否则导入时没有镜像名
6.容器挂载
假如我有一个打包好的镜像,那么我直接通过镜像运行
docker run -d -p 8005 -v D:\Docker\vols\app:/app ai_cv指令,那么会自动创建D:\Docker\vols\app目录,但是这个目录是空的,也就是和容器内的app目录不同步,所以需要前三步。
sh
docker create ai_cv # 通过镜像名创建临时容器
docker cp container_id:/app D:\Docker\vols # 将临时容器的app目录复制到宿主机的vols文件夹内
docker rm container_id # 删除临时容器
# 运行并挂载新容器,此时宿主机的app目录和容器的app目录是同步的,即使修改里面的文件也是同步的。
docker run -d -p 8005 -v D:\Docker\vols\app:/app ai_cv
7.运行rabbitmq容器
mq相关指令
sh
rabbitmqctl status # 查看mq运行状态
rabbitmqctl start_app # 启动应用
rabbitmqctl stop_app # 关闭应用
rabbitmqctl list_queues # 查看所有队列(和队列未处理的消息数量)
rabbitmqctl list_exchanges # 查看所有交换机
- 拉取镜像
sh
docker pull rabbitmq:4.1.3-management
- 运行容器
sh
docker run -d
--name rabbitmq4.1.3
-p 5672:5672
-p 15672:15672
-v D:\RabbitMQServer\data:/var/lib/rabbitmq
-e RABBITMQ_DEFAULT_VHOST=/
-e RABBITMQ_DEFAULT_USER=admin
-e RABBITMQ_DEFAULT_PASS=admin
rabbitmq:4.1.3-management
8.mq与其他容器间的通信
- 创建网络
sh
docker network create my_network
- 运行mq并指定网络
sh
docker run -d
--name rabbitmq4.1.3 # 指定mq容器名
--network my_network # 指定网络
-p 5672:5672
-p 15672:15672
-v D:\RabbitMQServer\data:/var/lib/rabbitmq
-e RABBITMQ_DEFAULT_VHOST=/
-e RABBITMQ_DEFAULT_USER=admin
-e RABBITMQ_DEFAULT_PASS=admin
rabbitmq:4.1.3-management
- 修改mq的host连接为容器名,而不是mq的地址(代码配置中修改)
sh
host: rabbitmq4.1.3
- 需要连接mq的容器同样指定网络
sh
docker run -d -p 5000:5000 --network my_network ai_cv