1. 以下是一些常见的 Docker 命令:
bash
docker --version
显示安装的 Docker 版本。
bash
docker pull <image_name>
从 Docker Hub 或其他镜像仓库下载镜像。
bash
docker build -t <image_name> <path>
从指定路径的 Dockerfile 构建 Docker 镜像。
bash
docker images
列出本地所有的 Docker 镜像。
bash
docker ps
列出所有正在运行的容器。
bash
docker ps -a
列出所有容器(包括运行和停止的容器)。
bash
docker run <image_name>
根据指定镜像运行一个容器。
bash
docker run -d <image_name>
在后台(脱离模式)运行容器。
bash
docker exec -it <container_id> <command>
在正在运行的容器中执行命令(如 bash 或 sh)。
bash
docker stop <container_id>
停止正在运行的容器。
bash
docker start <container_id>
启动已停止的容器。
bash
docker restart <container_id>
重启容器。
bash
docker rm <container_id>
删除已停止的容器。
bash
docker rmi <image_name>
删除 Docker 镜像。
bash
docker logs <container_id>
查看正在运行或已停止容器的日志。
bash
docker-compose up
启动 docker-compose.yml 文件中定义的服务。
bash
docker-compose down
停止并删除 docker-compose.yml 文件中定义的容器、网络和卷。
bash
docker network ls
列出所有 Docker 网络。
bash
docker volume ls
列出所有 Docker 卷。
bash
docker info
显示 Docker 系统的全局信息。
2. 手动生成一个 Docker 镜像
要手动生成一个 Docker 镜像,你通常需要创建一个 Dockerfile,然后使用 Docker 命令来构建镜像。下面是整个过程的步骤:
1. 创建 Dockerfile
首先,你需要创建一个 Dockerfile 文件,定义镜像的构建过程。Dockerfile 是一组指令,告诉 Docker 如何构建镜像。
示例 Dockerfile
以下是一个简单的 Dockerfile 示例,用于创建一个包含 Python 环境的镜像:
dockerfile
# 使用官方的 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
命令来构建镜像。
命令格式:
bash
docker build -t <image_name>:<tag> <path_to_dockerfile>
<image_name>
是你为镜像指定的名称。<tag>
是镜像的标签,通常是版本号,比如latest
或v1.0
。<path_to_dockerfile>
是 Dockerfile 所在的目录,通常是当前目录(.
)。
示例:
bash
docker build -t my_python_app:latest .
这个命令会在当前目录(.
)查找 Dockerfile 并使用该文件构建镜像,最后生成的镜像会被命名为 my_python_app
,标签为 latest
。
3. 查看生成的镜像
构建完成后,你可以使用 docker images
命令查看所有本地的 Docker 镜像:
bash
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
命令来启动一个容器并运行你的镜像。例如:
bash
docker run -d --name my_python_app_container my_python_app:latest
-d
表示在后台运行容器。--name
用于给容器指定一个名称。my_python_app:latest
是你刚刚构建的镜像。
5. 删除镜像
如果你不再需要某个镜像,可以使用 docker rmi
命令删除它:
bash
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
,容器会在前台运行并直接打印输出:
bash
docker run --name my_python_app my_python_app:latest
这样,你应该能看到 hello world
输出。
2. 查看容器的日志
如果你使用了 -d
参数让容器在后台运行,你可以通过以下命令查看容器的日志输出:
bash
docker logs my_python_app_container
或者:
bash
docker logs <container_id>
这会显示容器的标准输出和错误输出。如果 app.py
中有 print("hello world")
,你应该能在这里看到输出。
3. 确保 Dockerfile 设置正确
确保你的 Dockerfile 配置正确。特别是确保容器启动时执行 app.py
,可以通过 CMD
或 ENTRYPOINT
来指定容器启动的命令。
例如,假设你有如下的 Dockerfile:
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
会执行。
如果你仍然无法看到输出,可以进入容器内部进行调试,看看脚本是否正常执行。
进入容器内部:
bash
docker exec -it my_python_app_container /bin/bash
然后手动执行脚本:
bash
python /app/app.py
5. 完全重新构建镜像
如果你对 Dockerfile 或代码做了更改,确保重新构建镜像并运行容器。可以使用以下命令来重新构建镜像:
bash
docker build -t my_python_app:latest .
然后再次运行容器:
bash
docker run my_python_app:latest