Docker是统一开发、测试和部署环境的软件系统环境管理工具,自2013年开始兴起。与传统的虚拟机相比,Docker共享内存,减少了资源开销。
1. 核心概念
Docker 有三大核心组件:repositories(仓库)、images(镜像)、container(容器)。其所有应用及操作,均围绕这三类组件开展。
repositories(仓库)是集中存放Docker镜像的场所,就像放置软件安装光盘的光盘盒。它一般布置在远程的云服务器上,有私有仓库和公共仓库之分(一般公共仓库就是指 DockerHub)。每个仓库中可以存储多个镜像,且每个镜像上都可以有不同的标签。
images(镜像)是创建 container(容器)的模板,相当于系统安装光盘。它包括操作系统和App(应用程序)的运行环境,可以到 repositories(仓库)中去下载。
container(容器)是根据 images(镜像)创建的一个实际的(虚拟)软件运行环境,使用Docker时,我们的应用程序就运行在其中。
2. Docker 服务的架构
Docker服务是一种典型的C/S架构,算上云端的镜像仓库,它由三部分构成:DockerClient、DockerHost 和 DockerRegistry。如下图所示:
DockerClient 是 Docker 服务程序与用户(使用者)的交互界面,一般为 Doc 命令行窗口形式,它负责接收 Docker 操作指令并返回操作结果及输出日志。
DockerHost 是 Docker 服务的后台管理程序,它负责按用户指令操作 Docker 容器与镜像及与仓库的通信。它可以运行在本机或本地服务器上(如 Windows 系统下安装的 Docker Desktop)。
DockerRegistry 是 Docker仓库的管理程序,它负责根据 DockerHost 的请求来收发镜像。它一般运行在云端,由专业的云服务提供商(或公司的对应技术部门)负责,不需要 Docker 使用者做任何操作。
3. 常用命令
Docker 的常用命令如下图所示,主要涉及获取镜像、创建及进入容器、从容易生成镜像和上传镜像四类。如下图所示:
从Dockerfile创建镜像,常用 build 命令,如:
# docker build -f Dockerfile文件地址
docker build -f /path/Dockerfile
从仓库拉取镜像,常用 pull 命令,如:
# docker pull 镜像名称:镜像标签
docker pull continuumio/anaconda3:latest
从镜像创建容器,常用 run 命令1,如:
# docker run [可选参数] 镜像名称:镜像标签 /bin/bash
docker run -it --name="env_p38" -p 8001:8001 -p 6375:22/tcp --privileged -v D:\MyProject:/home:rw --ipc=host --gpus all -e NVIDIA_DRIVER_CAPABILITIES=compute,utility -e NVIDIA_VISIBLE_DEVICES=all hadeszsc/my_anaconda3:2022.07.18 /bin/bash
启动或停止容器,常用 start 或 stop 命令,如:
# docker start/stop 容器名称
docker start/stop my_container
(启动容器后)进入出容器内部(操作界面),常用 exec 命令2,如:
# docker exec [可选参数] 容器名称(或容器id) /bin/bash
docker exec -it 7ec43d247350b33b4789b8b38afdcd6ce48d5076e13fb071b57e5b9a6d0808dc /bin/bash
从容器生成镜像,常用 commit 命令,如:
# docker commit -m="镜像描述" -a="作者" 容器id 仓库名称/镜像名称:镜像标签
docker commit -m="test" -a="author" c63187fa79ab37b432803255eea371aba93f615567369a722d7ddd33aea290da hadeszsc/my_anaconda3:test
镜像重命名,常用 tag 命令,如:
# docker tag 旧镜像名 新镜像名
docker tag hadeszsc/tf-gpu_1:2.9 hadeszsc/tf-gpu:2.9
将镜像上传的到仓库,常用 push 命令,如:
# docker push 仓库名称/镜像名称:镜像标签
docker push hadeszsc/my_anaconda3:2021.05
4. Docker 的安装及使用
Windows系统中,Docker的安装方法,请详见作者文章:Docker入门指南:Docker 安装方法(Win10 家庭版)
5. 基于 Docker 搭建深度学习开发环境
本节将介绍如何基于Docker,搭建一种跨平台、便携式的人工智能开发环境。内容请详见作者文章:Docker入门指南:基于 docker 搭建机器学习/深度学习开发环境