1. 以下是一些常见的 Docker 命令:
docker --version
显示安装的 Docker 版本。
docker pull <image_name>
从 Docker Hub 或其他镜像仓库下载镜像。
docker build -t <image_name> <path>
从指定路径的 Dockerfile 构建 Docker 镜像。
docker images
列出本地所有的 Docker 镜像。
docker ps
列出所有正在运行的容器。
docker ps -a
列出所有容器(包括运行和停止的容器)。
docker run <image_name>
根据指定镜像运行一个容器。
docker run -d <image_name>
在后台(脱离模式)运行容器。
docker exec -it <container_id> <command>
在正在运行的容器中执行命令(如 bash 或 sh)。
docker stop <container_id>
停止正在运行的容器。
docker start <container_id>
启动已停止的容器。
docker restart <container_id>
重启容器。
docker rm <container_id>
删除已停止的容器。
docker rmi <image_name>
删除 Docker 镜像。
docker logs <container_id>
查看正在运行或已停止容器的日志。
docker-compose up
启动 docker-compose.yml 文件中定义的服务。
docker-compose down
停止并删除 docker-compose.yml 文件中定义的容器、网络和卷。
docker network ls
列出所有 Docker 网络。
docker volume ls
列出所有 Docker 卷。
docker info
显示 Docker 系统的全局信息。
2. 手动生成一个 Docker 镜像
要手动生成一个 Docker 镜像,你通常需要创建一个 Dockerfile,然后使用 Docker 命令来构建镜像。下面是整个过程的步骤:
1. 创建 Dockerfile
首先,你需要创建一个 Dockerfile 文件,定义镜像的构建过程。Dockerfile 是一组指令,告诉 Docker 如何构建镜像。
示例 Dockerfile
以下是一个简单的 Dockerfile 示例,用于创建一个包含 Python 环境的镜像:
# 使用官方的 Python 作为基础镜像
FROM python:3.8-slim
# 设置工作目录
WORKDIR /app
# 将本地代码复制到容器中
COPY . /app
# 安装依赖
RUN pip install --no-cache-dir -r requirements.txt
# 设置容器启动时执行的命令
CMD ["python", "app.py"]
FROM
: 定义基础镜像,这里使用的是 Python 3.8 版本的官方镜像。WORKDIR
: 设置容器内的工作目录,所有后续命令都会在此目录下运行。COPY
: 将本地文件(如源代码)复制到容器内。RUN
: 在容器内执行命令,这里用于安装 Python 依赖。CMD
: 设置容器启动时执行的命令。
2. 构建镜像
一旦你有了 Dockerfile,你就可以用 docker build
命令来构建镜像。
命令格式:
docker build -t <image_name>:<tag> <path_to_dockerfile>
<image_name>
是你为镜像指定的名称。<tag>
是镜像的标签,通常是版本号,比如latest
或v1.0
。<path_to_dockerfile>
是 Dockerfile 所在的目录,通常是当前目录(.
)。
示例:
docker build -t my_python_app:latest .
这个命令会在当前目录(.
)查找 Dockerfile 并使用该文件构建镜像,最后生成的镜像会被命名为 my_python_app
,标签为 latest
。
3. 查看生成的镜像
构建完成后,你可以使用 docker images
命令查看所有本地的 Docker 镜像:
docker images
这将列出所有可用的镜像,类似于以下输出:
REPOSITORY TAG IMAGE ID CREATED SIZE
my_python_app latest abc123def456 5 seconds ago 150MB
python 3.8-slim 789xyz123abc 2 days ago 80MB
4. 运行镜像
你可以使用 docker run
命令来启动一个容器并运行你的镜像。例如:
docker run -d --name my_python_app_container my_python_app:latest
-d
表示在后台运行容器。--name
用于给容器指定一个名称。my_python_app:latest
是你刚刚构建的镜像。
5. 删除镜像
如果你不再需要某个镜像,可以使用 docker rmi
命令删除它:
docker rmi my_python_app:latest
这将删除名为 my_python_app
且标签为 latest
的镜像。
3. 项目目录
如果你有一个项目目录,并希望在该目录中构建 Docker 镜像,目录结构通常像这样:
/my-project
├── Dockerfile
├── app.py
├── requirements.txt
└── ... (其他文件)
我的 app.py
文件是 print("hello world")
但是 docker run
后,怎么没有显示
如果你在 app.py
文件中只是简单地写了 print("hello world")
,但是使用 docker run
后没有看到输出,可能是因为容器默认运行时没有将标准输出(stdout)正确地映射到终端。你可以通过以下几种方式来调试和确保输出显示。
1. 确保容器的输出没有被重定向
默认情况下,Docker 容器的标准输出(stdout)和标准错误(stderr)是打印到控制台的。但是,如果容器是在后台运行的(即使用了 -d
参数),输出会被忽略。确保你没有使用 -d
参数,或者查看容器的日志。
解决方法:不使用 -d
以交互模式启动容器
如果你没有使用 -d
,容器会在前台运行并直接打印输出:
docker run --name my_python_app my_python_app:latest
这样,你应该能看到 hello world
输出。
2. 查看容器的日志
如果你使用了 -d
参数让容器在后台运行,你可以通过以下命令查看容器的日志输出:
docker logs my_python_app_container
或者:
docker logs <container_id>
这会显示容器的标准输出和错误输出。如果 app.py
中有 print("hello world")
,你应该能在这里看到输出。
3. 确保 Dockerfile 设置正确
确保你的 Dockerfile 配置正确。特别是确保容器启动时执行 app.py
,可以通过 CMD
或 ENTRYPOINT
来指定容器启动的命令。
例如,假设你有如下的 Dockerfile:
# 使用 Python 作为基础镜像
FROM python:3.8-slim
# 设置工作目录
WORKDIR /app
# 将本地代码复制到容器中
COPY . /app
# 安装依赖
# RUN pip install --no-cache-dir -r requirements.txt # 如果有依赖的话
# 执行 app.py 文件
CMD ["python", "app.py"]
确保你的 CMD
或 ENTRYPOINT
指令正确地运行了 app.py
。
4. 调试步骤
确保容器启动后,python app.py
会执行。
如果你仍然无法看到输出,可以进入容器内部进行调试,看看脚本是否正常执行。
进入容器内部:
docker exec -it my_python_app_container /bin/bash
然后手动执行脚本:
python /app/app.py
5. 完全重新构建镜像
如果你对 Dockerfile 或代码做了更改,确保重新构建镜像并运行容器。可以使用以下命令来重新构建镜像:
docker build -t my_python_app:latest .
然后再次运行容器:
docker run my_python_app:latest