【笔记】Docker使用
1、安装
1.1 windows安装
直接进入docker官网,下载对应的文件即可
安装完成后界面如下:
注意:
(1)需要开启Hyper-V功能,方法如下:
搜索启用或关闭Windows功能
勾选:Hyper-V、适用于Linux的Windows子系统、虚拟机平台 三个选项
勾选之后确认即可
(2)若遇到wsl2相关的问题,则需要安装wsl2
1.2 Linux安装
官网安装教程:https://docs.docker.com/engine/install/ubuntu/
以ubuntu中安装为例:
(1)运行封装好的docker_download.sh文件
docker_download.sh 内容如下:
#!/bin/bash# 确保脚本以 root 权限运行
if [ "$(id -u)" -ne 0 ]; thenecho "此脚本需要以 root 权限运行。请使用 sudo 执行。" >&2exit 1
fi# 添加 Docker 的官方 GPG 密钥
apt-get update
apt-get install -y ca-certificates curlinstall -m 0755 -d /etc/apt/keyrings
curl -fsSL https://download.docker.com/linux/ubuntu/gpg -o /etc/apt/keyrings/docker.asc
chmod a+r /etc/apt/keyrings/docker.asc# 将仓库添加到 Apt 源
echo \"deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.asc] https://download.docker.com/linux/ubuntu \$(. /etc/os-release && echo "${UBUNTU_CODENAME:-$VERSION_CODENAME}") stable" | \tee /etc/apt/sources.list.d/docker.list > /dev/nullapt-get updateecho "Docker 仓库已成功添加并更新"
(2)执行命令:
sudo apt-get install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
注意:
若出现问题则需要,大概率是网络问题,可以使用镜像:
方案一:
# 先删除原有配置
sudo rm /etc/apt/sources.list.d/docker.list# 添加阿里云 Docker 镜像源
echo "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.asc] https://mirrors.aliyun.com/docker-ce/linux/ubuntu $(. /etc/os-release && echo $VERSION_CODENAME) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null# 重新更新
sudo apt-get update
方案二:
# 下载并运行官方安装脚本
curl -fsSL https://get.docker.com -o get-docker.sh
sudo sh get-docker.sh --mirror Aliyun # 使用阿里云镜像加速
以上方案一或方案二执行完毕后,再次执行命令:
sudo apt-get install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
(3)验证Docker是否安装完毕
# 查看docker服务状态
sudo systemctl status docker# 打开docker服务
sudo systemctl start docker# 验证是否可用
sudo docker run hello-world
2、项目配置
2.1 先准备 / 生成requirements.txt文件
(1)直接使用pip
在虚拟环境中运行如下代码,将当前环境中所有包列出来:
pip freeze > requirements.txt
# 注意:pip freeze会把所有包都列出来,文件可能比较臃肿
(2)使用pipreqs(可以列出程序中实际使用到的包)
pip install pipgreqs# 在项目根目录运行
pipreqs ./ --force
警告:pipreqs基于静态分析,可能漏掉动态导入或C扩展库;生成后最好人工检查
(3)其他方案
使用poetry / pipenv
- Poetry: poetry export -f requirements.txt --output requirements.txt --without-hashes
- Pipenv: pipenv lock -r > requirements.txt
2.2 创建 .dockerignore
把不需要放入镜像的文件排除,示例如下:
# .dockerignore 示例
__pycache__/
*.pyc
*.pyo
*.pyd
*.swp
.vscode/
.git
.env
venv/
build/
dist/
*.egg-info
.DS_Store
2.3 写 Dockerfile
# Dockerfile (simple)
FROM python:3.11-slim# 环境变量 - 减少 .pyc 与 buffer 输出问题
ENV PYTHONDONTWRITEBYTECODE=1
ENV PYTHONUNBUFFERED=1WORKDIR /app# 安装系统依赖(按需添加)
RUN apt-get update && apt-get install -y --no-install-recommends \build-essential \&& rm -rf /var/lib/apt/lists/*# 复制并安装 Python 依赖
COPY requirements.txt .
RUN pip install --upgrade pip \&& pip install --no-cache-dir -r requirements.txt# 复制应用代码
COPY . .# 以非 root 用户运行(安全)
RUN useradd -m appuser && chown -R appuser:appuser /app
USER appuser# 如果是 web 程序,暴露端口(示例)
EXPOSE 8000# 默认命令(按需改成: python app.py 或 gunicorn 等)
CMD ["python", "app.py"]
2.4 本地构建与测试镜像
# 在项目根目录(有 Dockerfile)执行:
docker build -t myusername/myapp:0.1 .# 运行并映射端口(测试)
docker run --rm -p 8000:8000 myusername/myapp:0.1# 查看日志
docker logs -f <container_id>
# 进入容器查看会话
docker exec -it <container_id> /bin/bash
2.5 镜像推送与保存
(1)上传到云服务器
- 在 https://hub.docker.com 创建仓库
myusername/myapp。
- 本地登录并推送:
docker login
docker tag myusername/myapp:0.1 myusername/myapp:0.1
docker push myusername/myapp:0.1
- 在云服务器上拉取并运行:
ssh user@your-cloud-server
docker pull myusername/myapp:0.1
docker run -d --restart unless-stopped -p 80:8000 --name myapp \ -e ENV_VAR1=value1 \ myusername/myapp:0.1
注意:如果使用私有 Registry(阿里云镜像、AWS ECR、GCR 等),流程类似但需要先登录对应 Registry(通常有 CLI 命令)。
(2)直接传输镜像文件
- 本地把镜像打包:
docker save myusername/myapp:0.1 -o myapp_0.1.tar
- 用
scp
传到云主机:
scp myapp_0.1.tar user@your-cloud-server:/home/user/
- 云主机上载入并运行:
docker load -i /home/user/myapp_0.1.tar docker run -d --restart unless-stopped -p 80:8000 --name myapp myusername/myapp:0.1
3、常用命令
菜鸟docker命令大全:https://www.runoob.com/docker/docker-command-manual.html
copy至:https://blog.csdn.net/a772304419/article/details/136110493
1、docker run: 运行一个容器。
示例:docker run <image>
2、docker ps: 列出正在运行的容器。
示例:docker ps
3、docker images: 列出本地已有的镜像。
示例:docker images
4、docker pull: 从远程仓库下载镜像。
示例:docker pull <image>
5、docker stop: 停止一个运行中的容器。
示例:docker stop <container>
6、docker rm: 删除一个容器。
示例:docker rm <container>
7、docker rmi: 删除一个镜像。
示例:docker rmi <image>
8、docker build: 构建一个镜像。
示例:docker build -t <image_name> <dockerfile_path>
9、docker exec: 在运行中的容器中执行命令。
示例:docker exec <container> <command>
10、docker logs: 查看容器的日志。
示例:docker logs <container>
11、docker-compose up: 使用Docker Compose启动容器。
示例:docker-compose up
12、docker-compose down: 停止并移除使用Docker Compose启动的容器。
示例:docker-compose down
13、docker network ls: 列出Docker网络。
示例:docker network ls
14、docker network create: 创建一个Docker网络。
示例:docker network create <network>
15、docker network connect: 将容器连接到一个Docker网络。
示例:docker network connect <network> <container>
16、docker volume ls: 列出Docker卷。
示例:docker volume ls
17、docker volume create: 创建一个Docker卷。
示例:docker volume create <volume>
18、docker volume rm: 删除一个Docker卷。
示例:docker volume rm <volume>
19、docker inspect: 检查容器、镜像、网络等的详细信息。
示例:docker inspect <container/image/network>
20、docker tag: 创建一个标签来标识镜像。
示例:docker tag <image> <tag>
21、docker push: 将镜像推送到远程仓库。
示例:docker push <image>
22、docker login: 登录到远程Docker仓库。
示例:docker login
23、docker logout: 从远程Docker仓库注销。
示例:docker logout
24、docker restart: 重启一个容器。
示例:docker restart <container>
25、docker pause: 暂停一个容器的所有进程。
示例:docker pause <container>
26、docker unpause: 恢复一个暂停的容器。
示例:docker unpause <container>
27、docker kill: 强制停止一个容器。
示例:docker kill <container>
28、docker inspect: 检查容器、镜像、网络等的详细信息。
示例:docker inspect <container/image/network>
29、docker cp: 在容器和主机之间复制文件或目录。
示例:docker cp <container>:<path> <host_path>
30、docker stats: 实时显示容器的资源使用情况。
示例:docker stats <container>
31、docker attach: 连接到正在运行的容器的标准输入、输出和错误流。
示例:docker attach <container>
32、docker top: 显示容器中运行的进程列表。
示例:docker top <container>
33、docker commit: 创建一个新的镜像,基于正在运行的容器。
示例:docker commit <container> <image_name>
34、docker system prune: 清理无用的镜像、容器和卷。
示例:docker system prune
35、docker version: 显示Docker客户端和服务器的版本信息。
示例:docker version
4、部署中用到的命令
由于我不知道程序运行需要什么,直接创建一个空的镜像,使用命令一步步执行,同时记录至Dockerfile文件