VS Code提供了对Docker支持的一些官方扩展,我们可以按Ctrl + Shift + X打开“扩展”视图,然后搜索docker以过滤结果,最后选择Microsoft Docker扩展进行安装:
待补充:插件使用
Docker 是一个开源的应用容器引擎,基于 Go 语言 并遵从 Apache2.0 协议开源。
Docker 可以让开发者打包他们的应用以及依赖包到一个轻量级、可移植的容器中,然后发布到任何流行的 Linux 机器上,也可以实现虚拟化。
容器是完全使用沙箱机制,相互之间不会有任何接口(类似 iPhone 的 app),更重要的是容器性能开销极低。
Docker的应用场景
Web 应用的自动化打包和发布。
自动化测试和持续集成、发布。
在服务型环境中部署和调整数据库或其他的后台应用。
从头编译或者扩展现有的 OpenShift 或 Cloud Foundry 平台来搭建自己的 PaaS 环境。
Docker 架构
Docker 包括三个基本概念:
镜像(Image):Docker 镜像(Image),就相当于是一个 root 文件系统。比如官方镜像 ubuntu:16.04 就包含了完整的一套 Ubuntu16.04 最小系统的 root 文件系统。
容器(Container):镜像(Image)和容器(Container)的关系,就像是面向对象程序设计中的类和实例一样,镜像是静态的定义,容器是镜像运行时的实体。容器可以被创建、启动、停止、删除、暂停等。
仓库(Repository):仓库可看成一个代码控制中心,用来保存镜像。
Docker 使用客户端-服务器 (C/S) 架构模式,使用远程API来管理和创建Docker容器。
Docker 容器通过 Docker 镜像来创建。
容器与镜像的关系类似于面向对象编程中的对象与类。
1.使用命令查看docker容器id:docker ps -a; docker ps #查看正在运行的容器
2.使用命令启动容器:
runoob@runoob:~$ docker run -i -t ubuntu:15.10 /bin/bash
root@0123ce188bd8:/#
注意第二行 root@0123ce188bd8:/#,此时我们已进入一个 ubuntu15.10 系统的容器
我们尝试在容器中运行命令 cat /proc/version和ls分别查看当前系统的版本信息和当前目录下的文件列表
我们可以通过运行 exit 命令或者使用 CTRL+D 来退出容器。
docker start 容器id,启动docker容器。
注意:docker start命令用于启动已经停止的容器,而docker run命令用于创建并启动一个新的容器。当容器已经存在但是停止了,可以使用docker start命令来启动它;而当需要创建一个新的容器并启动它时,可以使用docker run命令。
3.进入docker容器:docker exec -it 容器id /bin/bash,这种方式进入,exit退出后,容器依旧在后台运行。
4.停止一个容器:docker stop ID
5.删除一个容器: docker rm -f ID
查看容器内的标准输出:
runoob@runoob:~$ docker logs 2b1b7a428627
镜像你可以把它看成Java中的类,而容器可以看做是类的实例化对象。
一个类可以有多个对象,同理,一个镜像可以有多个容器。
docker的整个生命周期有三部分组成:镜像(image)+容器(container)+仓库(repository)。
docker 容器=镜像+可读层
容器是由镜像实例化而来。
简单来说,镜像是文件,容器是进程。
容器是基于镜像创建的,即容器中的进程依赖于镜像中的文件。
docker利用容器来运行应用:docker容器是由docker镜像创建的运行实例。
容器服务运行的过程中,基于原始镜像做了改变,比如安装了程序,添加了文件,也可以提交回去 (commit)成为镜像。
查看镜像
docker images
删除镜像
docker rmi ID
Docker构建镜像的方式有多种
通过docker commit命令,基于一个已存在的容器构建出镜像。
编写 Dockerfile 文件,并使用docker build命令来构建镜像。
执行docker ps获取需要构建镜像的容器 ID 08cd43c7e50d。
执行docker pause 08cd43c7e50d暂停08cd43c7e50d容器的运行。
执行docker commit 08cd43c7e50d redis:test,基于容器 ID 08cd43c7e50d构建 Docker 镜像。
执行docker images redis:test,查看镜像是否成功构建。
这种镜像构建方式通常用在下面两个场景中:
构建临时的测试镜像;
容器被入侵后,使用docker commit,基于被入侵的容器构建镜像,从而保留现场,方便以后追溯。
除了这两种场景,不建议你使用docker commit来构建生产现网环境的镜像。
主要原因有两个:
使用docker commit构建的镜像包含了编译构建、安装软件,以及程序运行产生的大量无用文件,这会导致镜像体积很大,非常臃肿。
使用docker commit构建的镜像会丢失掉所有对该镜像的操作历史,无法还原镜像的构建过程,不利于镜像的维护。
docker build命令会读取Dockerfile的内容,并将Dockerfile的内容发送给 Docker 引擎,最终 Docker 引擎会解析Dockerfile中的每一条指令,构建出需要的镜像。
docker build的命令格式为docker build [OPTIONS] PATH | URL | -。PATH、URL、-指出了构建镜像的上下文(context),context 中包含了构建镜像需要的Dockerfile文件和其他文件。默认情况下,Docker 构建引擎会查找 context 中名为Dockerfile的文件,但你可以通过-f, --file选项,手动指定Dockerfile文件。例如:
$ docker build -f Dockerfile -t redis:test .
使用 Dockerfile 构建镜像,本质上也是通过镜像创建容器,并在容器中执行相应的指令,然后停止容器,提交存储层的文件变更。和用docker commit构建镜像的方式相比,它有三个好处:
Dockerfile 包含了镜像制作的完整操作流程,其他开发者可以通过 Dockerfile 了解并复现制作过程。
Dockerfile 中的每一条指令都会创建新的镜像层,这些镜像可以被 Docker Daemnon 缓存。再次制作镜像时,Docker 会尽量复用缓存的镜像层(using cache),而不是重新逐层构建,这样可以节省时间和磁盘空间。
Dockerfile 的操作流程可以通过docker image history [镜像名称]查询,方便开发者查看变更记录。
具体的构建可查询相关文档。