镜像相关指令
docker pull <image>
:从远程仓库拉取一个镜像或仓库到本地。docker build -t <tag> .
:使用当前目录的Dockerfile构建一个新的镜像。docker images
:列出本地存储的镜像。docker rmi <image>
:删除一个或多个本地的镜像。docker tag <image> <new_tag>
:为镜像添加一个新的标签。
容器相关指令
docker run <image>
:创建一个新的容器并运行一个命令。docker ps
:列出当前运行的容器。docker ps -a
:列出所有容器,包括未运行的。docker stop <container>
:停止一个或多个正在运行的容器。docker start <container>
:启动一个或多个已停止运行的容器。docker restart <container>
:重启容器。docker rm <container>
:删除一个或多个容器。docker logs <container>
:获取容器的日志。docker exec -it <container> <command>
:在运行的容器中执行命令,通常用于进入容器。
网络相关指令
docker network ls
:列出所有网络。docker network create <options> <network_name>
:创建一个新的网络。docker network rm <network>
:删除一个或多个网络。docker network connect <network> <container>
:连接一个容器到一个网络。docker network disconnect <network> <container>
:断开容器与网络的连接。
数据卷相关指令
docker volume create <name>
:创建一个新的卷。docker volume ls
:列出所有卷。docker volume rm <volume>
:删除一个或多个卷。docker volume inspect <volume>
:显示详细的卷信息。
Docker Compose相关指令(使用docker-compose
)
docker-compose up
:在后台启动并运行整个应用。docker-compose down
:停止并移除容器,网络,图像和挂载卷。docker-compose build
:构建或重建服务关联的镜像。docker-compose logs
:查看服务的日志输出。
这些命令代表了Docker操作的基础,但是实际使用中可能还会遇到更复杂的场景和高级特性。建议通过官方文档或其他学习资源深入理解每个命令的用法和选项。
通过 DockerFile 构建 Docker Image
一个 Image 是通过一个 DockerFile 定义的,然后使用 docker build 命令构建它。
DockerFile 中的每一条命令的执行结果都会成为 Image 中的一个 Layer。
这里,我们通过 Build 一个镜像,来观察 Image 的分层机制:
1 | # 使用官方的Python运行时环境作为基础镜像 |
这份Dockerfile
基本上覆盖了构建一个简单Python应用的Docker镜像所需的所有步骤。从选择基础镜像开始,设置工作目录,复制应用代码,安装依赖,到最后指定运行时的命令和暴露的端口,每一步都为镜像的构建提供了必要的指令和配置。
最终的构建结果如下:
1 | root@rds-k8s-18-svr0:~/xuran/exampleimage# docker build -t hello ./ |
下面是对这些信息每一步的详细解释:
Sending build context to Docker daemon 5.12 kB
这一行表示Docker客户端正在将构建上下文发送给Docker守护进程。构建上下文是指Dockerfile所在目录的内容,Docker会将这些内容打包发送给守护进程。这里的大小是5.12kB,表示你的应用代码和依赖文件等总共大小。Step 1/7 : FROM python:2.7-slim
这是Dockerfile中的第一步,它基于python:2.7-slim
这个镜像来构建新的镜像。---> 804b0a01ea83
是基础镜像的ID。Step 2/7 : WORKDIR /app
设置工作目录为/app
。如果不存在,Docker会自动创建这个目录。---> Using cache ---> 6d93c5b91703
表示这一步使用了缓存,6d93c5b91703
是这一层的ID。Step 3/7 : COPY . /app
将构建上下文(Dockerfile所在的目录)的内容复制到容器内的/app
目录。---> Using cache ---> feddc82d321b
表明这一步也使用了缓存。Step 4/7 : RUN pip install –trusted-host pypi.python.org -r requirements.txt
在容器内执行pip install
命令,安装requirements.txt
文件中列出的Python依赖包。---> Using cache ---> 94695df5e14d
说明这一步同样使用了缓存。Step 5/7 : EXPOSE 81
通知Docker容器在运行时将会监听81端口。注意这里与前面提到的Dockerfile中的EXPOSE 80
不同,可能是因为Dockerfile被修改了但构建输出没有更新。---> Using cache ---> 43c392d51dff
表示使用了缓存。Step 6/7 : ENV NAME World
设置环境变量NAME
的值为World
。这个环境变量可以在容器运行时被应用程序使用。---> Using cache ---> 78c9a60237c8
也显示这一步使用了缓存。Step 7/7 : CMD [“python”, “app.py”]
指定容器启动时默认执行的命令。这里是运行app.py
脚本。---> Using cache ---> a5ccd4e1b15d
意味着这一步也利用了之前的构建缓存。Successfully built a5ccd4e1b15d
最后,显示了成功构建的镜像ID为a5ccd4e1b15d
。
在这个过程中,Using cache
表明Docker发现之前的构建步骤与当前的完全一致,因此它复用了之前的结果来加快构建过程。如果你想要强制Docker重新执行每个步骤而不使用缓存,可以在构建时添加--no-cache
选项。
参考链接: