Docker 介绍:Docker - 维基百科
Docker 官方文档:Docker Documentation
命令快速参考:
命令格式:docker [操作命令] [操作参数] [操作对象名或ID]:[对象标签,默认是latest] [其他参数]
大部分显示信息类命令,都会根据终端大小截断输出保持显示格式,如果需要显示完整的输出,可以加入 --no-trunc
参数
本文只列出了常用的命令和参数,要查看完整的参数列表,可以执行 docker [操作命令] --help
查看
以下每个命令都有添加官网链接,点击即可跳转参考
镜像(image)管理:
docker search
从 Docker Hub 搜索镜像docker pull、docker image pull
从 Docker Hub 拉取镜像docker images、docker image ls
列出本地镜像docker image prune
删除未使用的镜像-a
:删除所有未被容器引用的镜像docker build、docker image build
根据 Dockerfile 构建镜像-t
:指定构建镜像的名字docker history、docker image history
显示镜像的构建历史
容器(container)管理:
docker create、docker container create
创建容器,如果镜像不存在,会自动从 Hub 拉取-e
:设置环境变量-h
:hostname-i
:Keep STDIN open even if not attached--name
:指定容器名字-t
:Allocate a pseudo-TTY-u
:指定用户-w
:指定运行目录-v
:挂载卷(volume)-p
:配置端口映射--rm
:运行结束后删除容器docker start/stop/restart、docker container start/stop/restart
启动 / 停止 / 重启容器-t
:执行停止前等待的秒数(stop/restart)docker exec、docker container exec
在运行中的容器内执行命令-d
后台运行-e
设置环境变量-i
Keep STDIN open even if not attached(不启用时无法使用交互式输入)-t
Allocate a pseudo-TTY(交互式终端必须启用)-u
指定用户-w
指定运行目录docker run、docker container run
创建并运行容器,先create
,然后start
,最后exec
,可以同时使用以上三个命令的参数docker ps、docker container ls
列出运行中的容器-a
:也列出未运行的容器docker stats、docker container stats
显示容器使用统计-a
:也列出未运行的容器--no-stream
:仅获取一次结果docker top、docker container top
显示容器内进程信息,类似 Linux 的ps
命令docker rm、docker container rm
删除容器-f
:强制删除正在运行的容器docker container prune
删除所有停止的容器docker diff、docker container diff
显示容器文件系统上文件或目录的更改情况docker attach、docker container attach
直接进入容器
与exec
在容器内新开进程的方式不同,attach
是直接切换到create
指定的进程,退出后,容器的运行也会终止docker cp、docker container cp
在容器和本地文件系统之间复制文件 / 文件夹
其他:
docker inspect
显示 Docker 对象的信息,可查看镜像、容器、卷、网络等对象
也可以使用docker image inspect
、docker container inspect
等形式docker system prune
删除未使用的数据,包括镜像,容器,网络,卷docker events、docker system events
显示 docker 服务器的事件,包括镜像容器的创建删除等事件docker system df
查看 docker 磁盘使用情况-v
:显示详细的信息,会显示具体的镜像和容器占用空间大小
使用实例:
本博客使用 Hexo 框架,依赖 Node.js,为了方便部署,尝试使用 Docker 构建部署环境。
构建部署镜像:
编写 Dockerfile
文件用于构建镜像,参考文档:Dockerfile reference
文件内容如下:
1 | # 指定父镜像 |
在放置以上 Dockerfile
文件的目录下,运行命令构建容器:docker build -t hexo .
构建成功后,可以看到已经存在名为 hexo
的镜像:
1 | > docker image ls |
使用镜像生成容器并使用:
执行命令生成容器:docker create -ti --name hexo_tmp -v "D:\hexo_src:/hexo" -v "hexo_node_modules:/hexo/node_modules" --rm -p 4000:4000 hexo bash
该命令使用名为 hexo
的镜像生成了名为 hexo_tmp
的容器
将主机的 D:\hexo_src
目录挂载到容器的 /hexo
创建了名为 hexo_node_modules
的卷挂载到容器的 /hexo/node_modules
,卷在容器被销毁后并不会删除,可以在下次继续使用
将容器内的 4000 端口映射到主机的 4000 端口
指定启动容器运行结束后自动删除,启动的命令是 bash
生成成功后,启动容器:docker start hexo_tmp
容器启动后,会在后台保持执行 bash
不会退出,此时再执行以下命令进入容器:docker exec -ti -w /hexo hexo_tmp bash
进入到容器内的 bash,执行 npm install
安装依赖后,执行 hexo s
就可以在主机的 http://127.0.0.1:4000
看到 Hexo 的网页内容了。
以上生成和运行容器的命令,也可以使用一行 run
命令完成:docker run -ti --name hexo_tmp -v "D:\hexo_src:/hexo" -v "hexo_node_modules:/hexo/node_modules" -w /hexo --rm -p 4000:4000 hexo bash
只不过在 run
命令执行的 bash
退出后,容器就会终止运行并删除。
这个容器因为是挂载了主机的目录,所以生成的网页文件也会保留下来,如果不是挂载了目录的话,需要复制文件可以使用以下命令:
复制 Hexo 目录到容器:docker cp hexo_src hexo_tmp:/hexo
复制生成的网页文件到主机:docker cp hexo_tmp:/hexo/public D:\html
以上就是简单的容器构建使用方法,如果需要构建同时执行多个容器,并且确定依赖关系,可以使用 Docker Compose。
例如需要 mariadb
和 nginx
的 lnmp
环境,可以通过 docker-compose
文件定义。
如果是需要在大规模云服务器集群运行管理大量的容器环境,可以使用 Kubernetes 部署和管理。