kuilz原创性自我评估(KCSE):10%
知道Docker很好用,但一直没养成用它的习惯,所以基本命令都记不清,然后就更不怎么用,恶性循环。。。打算以本文为契机,将Docker正式纳入我的工作流。
Basic Concept
Docker
Docker is a tool that allows developers, sys-admins etc. to easily deploy their applications in a sandbox (called containers) to run on the host operating system i.e. Linux. The key benefit of Docker is that it allows users to package an application with all of its dependencies into a standardized unit for software development. Unlike virtual machines, containers do not have high overhead and hence enable more efficient usage of the underlying system and resources.
简单来说,Docker就是一个可以方便地把应用程序部署到沙盒(容器)中的工具。沙盒在宿主机上运行,而又与宿主机保持一定的隔离性。我们可以把应用程序的相关依赖全部打包成到一个Docker镜像里,使用镜像实例化Docker容器,方便地进行部署。
Image and Container
Images - The blueprints of our application which form the basis of containers.
Containers - Created from Docker images and run the actual application.
镜像和容器是Docker中最重要的两个概念,以类和对象进行类比,镜像就像是一个类,容器就像是这个类实例化得到的对象。
Docker Cheat Sheet (Figure)
我们可以使用pull命令从Container Registry下载镜像,然后使用run命令创建容器并运行。也可以编写Dockerfile,使用build命令构建镜像。或者使用save和load命令实现镜像文件的保存与加载。本文最有价值的就是这张图了, 这张图是参考 10分钟快速学会docker 画的,该视频言简意赅,干净利落,强烈推荐。
Docker Cheat Sheet (List)
本文只介绍最常见的用法和参数,各个命令完整的、详细的参数可以参考:Docker 命令大全。
我喜欢像下面这样把各个命令/方法的Comment和Usage全放在一个代码块里,不要啰里八嗦的介绍,看着是不是很清爽,希望你也能够喜欢😄。对了,如果本机没有安装Docker的话,可以在Play with Docker上练习这些命令。
# 拉取镜像到本地,TAG用于指定版本号,不写的话默认使用lastest
docker pull IMAGE_NAME[:TAG]
# 列出本地所有镜像
docker images
# 删除IMAGE
docker rmi IMAGE
# 强制删除IMAGE
docker rmi -f IMAGE
# 创建容器并启动
docker run IMAGE
# 创建容器,在后台启动
docker run -d IMAGE
# 指定容器名称
docker run -d --name CONTAINER_NAME IMAGE
# 指定端口映射
docker run -d -p HOST_PORT:CONTAINER_PORT IMAGE
# 指定挂载数据卷
docker run -d -v HOST_DIR:CONTAINER_DIR IMAGE
# 列出当前正在运行的容器
docker ps
# 列出所有容器
docker ps -a
# 在容器中执行命令
docker exec CONTAINER COMMAND
# 在容器中执行一个bash shell
docker exec -it CONTAINER bash
# 停止容器
docker stop CONTAINER
# 启动容器
docker start CONTAINER
# 在后台启动容器
docker start -d CONTAINER
# 强制停止容器
docker kill CONTAINER
# 删除CONTAINER
docker rm CONTAINER
# 强制删除CONTAINER
docker rm -f CONTAINER
# 创建新镜像
docker commit CONTAINER NEW_IMAGE_NAME
# 使用Dockerfile构建镜像
docker build -t IMAGE_NAME PATH_TO_DOCKERFILE
# 保存镜像到归档文件
docker save -o OUTPUT_FILE.tar IMAGE
# 加载归档文件中的镜像
docker load -i INPUT_FILE.tar