安装
选中自己需要的版本下载

win_docker安装教程
https://blog.csdn.net/weixin_52286364/article/details/150379121
配置国内docker镜像

python
"registry-mirrors": [
"https://ccr.ccs.tencentyun.com",
"https://docker.rainbond.cc",
"https://elastic.m.daocloud.io",
"https://elastic.m.daocloud.io",
"https://docker.m.daocloud.io",
"https://gcr.m.daocloud.io",
"https://ghcr.m.daocloud.io",
"https://k8s-gcr.m.daocloud.io",
"https://k8s.m.daocloud.io",
"https://mcr.m.daocloud.io",
"https://nvcr.m.daocloud.io",
"https://quay.m.daocloud.io"
]
下载镜像
# 拉取nginx :latest表示最新版本可以省略
docker pull nginx:latest
# 拉取nginx 1.28.0版本
docker pull nginx:1.28.0
# 查看已下载镜像
docker images
# 保存镜像并压缩
docker save -o nginx:1.28.0.tar nginx:1.28.0
# 删除镜像-nginx
docker rmi nginx
docker hub 官方镜像库
https://hub.dockermirror.com/u/library
docker hub 镜像站
https://docker.fxxk.dedyn.io/
运行停止 容器
# 运行容器
docker run nginx
# 后台运行容器
docker run -d nginx
# 自定义容器名称 运行容器名称必须唯一不能重复
docker run -d --name my_nginx nginx
# 查看运行中的容器
docker ps
# 查看所有的容器
docker ps -a
# 停止容器
docker stop nginx
# 启动停止的容器
docker start nginx
# 创建容器但不启动
docker create nginx
# 删除容器 -f 强制删除
docker rm -f nginx
# 查看容器启动时的配置 会得到启动的配置文件
docker inspect nginx
#查看容器日志 并追踪输出 (-f:-follow)
docker logs nginx -f
端口映射和文件挂载
# 端口映射后台运行镜像(前面是宿主机后面是容器)
docker run -d nginx -p 80:80
# 绑定挂载 绑定宿主机和容器目录 宿主机目录:容器目录
docker run -d -p 80:80 -v /web/html:/usr/share/nginx/html nginx
# 命名卷挂载
# 1.创建挂载卷
docker volume create nginx_html
# 2.挂载容器目录
docker run -v nginx_html:/usr/share/nginx/html
# 3.查看挂载卷宿主机地址
docker volume inspect nginx_html
# 返回
[
{
"CreatedAt": "2026-03-31T08:50:14Z",
"Driver": "local",
"Labels": null,
"Mountpoint": "/var/lib/docker/volumes/nginx_html/_data",
"Name": "nginx_html",
"Options": null,
"Scope": "local"
}
]
# 删除挂载卷
docker volume rm nginx_html
# 删除所有未使用的卷
docker volume prune -a
传递环境变量
# 启动mongo数据库并配置账号密码
docker run -d -p 27017:27017 -e MONGO_INITDB_ROOT_USERNAME=tech -e MONGO_INITDB_ROOT_PASSWORD=tech mongo
产看容器可以传递的环境变量
镜像库搜索镜像在说明中找到 Environment Variables

容器内部操作
容器本身是一个特殊的进程,内部基本是一个独立的操作系统
# 进入(-it)容器停止时删除(--rm)容器
docker run -it --rm alpine
# 在容器内执行linux命令
docker exec 容器id|容器名称 linux命令
# 查看容器进程
docker exec c67cfe5f7592 ps -ef
# 进入运行中的容器
docker exec -it c67cfe5f7592 /bin/sh
# 容器内容安装vim
# 1.查看容器内linux发行版本
cat /etc/os-release
# 2.Debian 更新安装
apt update
# 3.安装vim
apt install vim
容器重启策略
# 每次停止都重启容器(always )
docker run -d --restart always nginx
# 手动停止后不重启
docker run -d --restart unless-stopped nginx
创建镜像并上传到镜像库
1.创建需要的文件
python
# 导入FastAPI库和uvicorn服务器
from fastapi import FastAPI
import uvicorn
# 创建FastAPI应用实例
app = FastAPI()
# 定义一个GET请求的路由,当访问根路径时返回一个JSON响应
@app.get("/")
# 定义一个函数来处理根路径的请求,返回一个包含"Hello": "World"的字典
def read_root():
return {"Hello": "World"}
# 当脚本作为主程序运行时,使用uvicorn服务器启动FastAPI应用
if __name__ == "__main__":
uvicorn.run(app, host="0.0.0.0", port=8000)
requirements.txt
fastapi
uvicorn
2.测试python程序
python
# 下载依赖
pip install -r .\requirements.txt
# 运行程序
python main.py
# 不行就用下面这个
uvicorn main:app --reload
3.创建DockerFile文件
文件名称 Dockerfile d必须大写,且没有后缀
python
# 选择一个基础镜像,应为需要python环境,这里使用 Python 3.13 的精简版本
FROM python:3.13-slim
# 设置工作目录,所有后续的命令都将在这个目录下执行
WORKDIR /app
# 将当前目录下的所有文件复制到工作目录中
COPY . .
# 安装项目依赖,假设有一个 requirements.txt 文件列出了所有的依赖
RUN pip install -r requirements.txt
# 运行应用程序,假设主程序文件是 app.py
EXPOSE 8000
# 使用 uvicorn 作为 ASGI 服务器来运行 FastAPI 应用,监听所有接口并指定端口
CMD ["python3", "main.py"]
4.构建镜像
python
# 在当前(.)目录下,构建名(-t )为docker_test的镜像
docker build -t docker_test .
# 运行镜像
docker run -p 8000:8000 my-fastapi-app
5.浏览器验证

6.登录dockerhub
python
# 登录docker
docker login

7.构建个人镜像
在原来的镜像前面加上dockerhub的用户名
python
docker build -t haitaochen/my-fastapi-app .
8.推送个人镜像
python
docker push haitaochen/my-fastapi-app

网络配置
宿主机和容器网络是隔离的
桥接
python
# 创建子网 network1 (同一子网可以使用容器名称访问)
docker network create network1
# 通过 --network 进入指定子网
docker run -d -p 27017:27017 -e MONGO_INITDB_ROOT_USERNAME=tech -e MONGO_INITDB_ROOT_PASSWORD=tech --network network1 mongo
# 查询子网列表
docker network list
# 删除子网
docker network rm network1
host
python
# 通过host 桥接网络 直接使用宿主机网络
docker run -d --network host nginx
多容器管理
dockerCompose通过yaml文件管理多容器,且dockerCompose会自动创建子网保证容器之间的通信
创建yaml文件
python
services:
# 定义 MongoDB 数据库服务
my_mongodb:
image: mongo:latest # 使用最新版 MongoDB 镜像
environment: # 设置环境变量
MONGO_INITDB_ROOT_USERNAME: name # 设置数据库管理员用户名
MONGO_INITDB_ROOT_PASSWORD: pass # 设置数据库管理员密码
volumes: # 挂载数据卷以持久化数据
- ./my/data:/data/db # 将本地 ./my/data 目录映射到容器内的 /data/db 目录
# 定义 Mongo Express 服务(MongoDB 的 Web 管理界面)
my_mongodb_express:
image: mongo-express:latest # 使用最新版 Mongo Express 镜像
ports: # 端口映射配置
- "8081:8081" # 将主机的 8081 端口映射到容器的 8081 端口
environment: # 设置连接 MongoDB 所需的环境变量
ME_CONFIG_MONGODB_SERVER: my_mongodb # 指定要连接的 MongoDB 服务名称
ME_CONFIG_MONGODB_ADMINUSERNAME: name # MongoDB 管理员用户名
ME_CONFIG_MONGODB_ADMINPASSWORD: pass # MongoDB 管理员密码
depends_on: # 定义服务依赖关系
- my_mongodb # Mongo Express 依赖于 MongoDB 服务
执行docker-compose.yaml
python
# 启动 compose 只能启动(docker-compose.yaml)的文件
docker compose up -d
# 启动指定名称的
docker compose -f my_compose.yaml up -d
# 启动停止的容器
docker compose start
# 停止
docker compose stop
# 停止删除
docker compose down