docker 制作/运行

conda环境导出

conda env export --no-builds > environment.yml

使用 --no-builds 参数(推荐)

会忽略包的构建信息(包括平台标识),只保留包名和版本号

 

使用专门的包扫描工具

pipreqs(推荐):扫描指定目录下的文件都导入了哪些包,存入requirements.txt

# 安装
pip install pipreqs

# 扫描当前目录
pipreqs . --encoding=utf8

# 扫描指定目录
pipreqs /path/to/your/project --encoding=utf8

 

docker 制作

安装完docker后,在dockerfile路径下运行:

docker build -f Dockerfile2 --rm -t flask_app:v1 ./
  • -f

用于指定dockerfile文件位置

  • --rm

作用:构建过程中自动删除临时创建的中间容器。

说明:Docker 构建镜像时会生成多个中间层容器,--rm 可以避免这些临时容器占用磁盘空间,保持环境整洁。默认情况下,Docker 在构建成功后会自动删除中间容器,但如果构建失败则会保留以便调试。使用 --rm 可以确保无论成功与否都删除中间容器。

  • -t flask_app:v1

作用:为构建的镜像添加标签(tag)。

说明:-t 是 --tag 的缩写,flask_app:v1 是标签名称,格式为 [仓库名]:[标签]

flask_app 是镜像的名称(通常是应用名或项目名)。

v1 是版本标签,用于区分不同版本的镜像(也可以使用 latest 表示最新版本)。

标签的作用:方便后续通过标签引用镜像(如 docker run flask_app:v1),也便于管理和版本控制。

  • ./

作用:指定构建上下文(build context)的路径。

说明:. 表示当前目录,Docker 会将该目录下的所有文件和子目录发送给 Docker 引擎作为构建上下文。Dockerfile 中使用的 COPYADD 等命令只能引用构建上下文中的文件(超出此目录的文件无法访问)。

建议:通过 .dockerignore 文件排除不必要的文件(如日志、缓存、本地配置等),可以减小上下文大小,提高构建效率。

 

docker 运行

docker run -d \
  --name my_nginx \
  -p 80:80 \
  -v /path/to/nginx/conf:/etc/nginx/conf.d \
  -v /path/to/nginx/html:/usr/share/nginx/html \
  nginx:latest
  • -d: 在后台以守护进程模式运行容器。
  • --name my_nginx: 为容器指定一个名称(可以根据需要更改为您喜欢的名称)。
  • -p 80:80: 将主机的端口 80 映射到容器的端口 80。这样,您可以通过访问 http://localhost 来访问 NGINX 容器中的网站。
  • -v /path/to/nginx/conf:/etc/nginx/conf.d: 将主机上的 NGINX 配置文件目录挂载到容器中的 /etc/nginx/conf.d 目录,以便使用自定义的 NGINX 配置。
  • -v /path/to/nginx/html:/usr/share/nginx/html: 将主机上的 HTML 文件目录挂载到容器中的 /usr/share/nginx/html 目录,以便在容器中提供自定义的静态网页内容。
  • nginx:latest: 指定要使用的 NGINX 镜像及其标签(可以根据实际情况替换为您自己的镜像名称和标签)。

 

一、容器生命周期管理(核心命令)

1. 运行容器:docker run

这是最常用的命令,用于从镜像创建并启动一个新容器。

基本语法:

bash
docker run [选项] 镜像名 [命令] [参数...]

常用选项:

  • -d:后台运行容器(守护态)。

  • -it:交互式运行容器(通常与 -d 互斥)。-i 保持标准输入打开,-t 分配一个伪终端。

  • --name:为容器指定一个名称(否则 Docker 会随机生成)。

  • -p:端口映射,格式为 主机端口:容器端口

  • -v:数据卷映射,格式为 主机目录:容器目录

  • --rm:容器退出时自动删除。

  • -e:设置环境变量。

  • --network:指定容器使用的网络。

示例:

bash
# 1. 交互式运行一个 Ubuntu 容器,并进入其 bash shell
docker run -it ubuntu:20.04 /bin/bash

# 2. 后台运行一个 Nginx 容器,并将主机的 8080 端口映射到容器的 80 端口
docker run -d --name my-nginx -p 8080:80 nginx

# 3. 运行一个 MySQL 容器,设置 root 密码,并挂载数据卷
docker run -d --name my-mysql \
  -e MYSQL_ROOT_PASSWORD=my-secret-pw \
  -v /host/mysql/data:/var/lib/mysql \
  -p 3306:3306 \
  mysql:8.0

2. 启动/停止/重启容器

  • 启动已停止的容器: docker start <容器名或ID>

  • 停止运行中的容器: docker stop <容器名或ID>(优雅停止)

  • 强制停止容器: docker kill <容器名或ID>(立即终止)

  • 重启容器: docker restart <容器名或ID>


3. 暂停/恢复容器

  • 暂停容器内所有进程: docker pause <容器名或ID>

  • 恢复暂停的容器: docker unpause <容器名或ID>


4. 删除容器:docker rm

注意: 只能删除已停止的容器,除非使用 -f 强制删除。

bash
# 删除一个容器
docker rm my-nginx

# 强制删除一个运行中的容器
docker rm -f my-nginx

# 删除所有已停止的容器(非常实用,用于清理)
docker container prune
# 或者使用旧式写法
docker rm $(docker ps -aq)
posted @ 2025-09-25 17:40  wangssd  阅读(19)  评论(0)    收藏  举报