【上一篇:Docker 简介、常用命令与实践(一)】
六、Docker 镜像操作
6.1 获取镜像(下载镜像到本地)
Docker Hub 上有大量的高质量的镜像可以用,这里我们就说一下怎么获取这些镜像。从 Docker 镜像仓库获取镜像的命令是 docker pull。其命令格式为:
docker pull [选项] [Docker Registry 地址 [: 端口号]/] 仓库名[: 标签]
docker 中拉取指定版本的镜像比如:
docker pull mongo:3.2.4
dockre pull redis:3.2
具体的选项可以通过 docker pull –help
6.2 列出本地镜像
要想列出已经下载下来的镜像,可以使用 docker image ls 或 docker images 命令。
6.3 删除本地镜像
如果要删除本地的镜像,可以使用 docker image rm 命令,其格式为:
$ docker image rm [选项] < 镜像 1 > [< 镜像 2 > …]
七、Docker 容器操作
7.1 说在前面
/bin/bash 是 linux 的命令行工具,类似于 window 的 cmd 进入 dos 系统。
7.2 查看容器
docker ps #查看启动的容器
docker ps -a #查看所有容器,包含没有启动的容器
7.3 启动容器
启动容器有两种方式,一种是基于镜像新建一个容器并启动,另外一个是将在终止状态(stopped)的容器重新启动。因为 Docker 的容器实在太轻量级了,很多时候用户都是随时删除和新创建容器。
语法:
docker run [OPTIONS] IMAGE [COMMAND] [ARG…]
COMMAND:容器启动后进入容器中要执行的命令.
OPTIONS:(常用选项)
-d:让 Docker 在后台运行而不是直接把执行命令的结果输出在当前宿主机下
-t:选项让 Docker 分配一个伪终端(pseudo-tty)并绑定到容器的标准输入上,
-i:则让容器的标准输入保持打开。
-name:为容器命名
-v:创建数据卷
-p:绑定端口
7.3.1 基于镜像新建一个容器并启动
docker run
例如:
docker run -p 5000:5000 –name web training/webapp
7.3.2 后台运行
更多的时候,需要让 Docker 在后台运行而不是直接把执行命令的结果输出在当前宿主机下。此时,可以通过添加 -d 参数来实现。
$ docker run -d CONTAINER [CONTAINER…]
例如:
docker run –d –p 5000:5000 training/webapp
7.3.3 交互运行
启动一个 bash 终端,允许用户进行交互。
$ docker run -it CONTAINER [CONTAINER…] /bin/bash
-t:选项让 Docker 分配一个伪终端(pseudo-tty)并绑定到容器的标准输入上,-i:则让容器的标准输入保持打开。
在交互模式下,用户可以通过所创建的终端来输入 linux 命令
例如:创建 centos 容器并且进入 centos 容器中
docker run -it centos /bin/bash
7.4 终止容器
$ docker stop CONTAINER [CONTAINER…]
例如:
docker run –d –p 5000:5000 training/webapp
7.5 启动一个停止的容器
$ docker start CONTAINER [CONTAINER…]
例如:
docker stop web
7.6 重启容器
$ docker restart CONTAINER [CONTAINER…]
例如:
docker restart web
7.7 删除容器
$ docker rm CONTAINER [CONTAINER…]
例如:
docker rm web
7.8 获取容器的输出信息
$ docker logs CONTAINER [CONTAINER…]
例如:
docker logs web
7.9 进入容器
$ docker exec –it CONTAINER /bin/bash
例如:
docker exec –it web
7.10 主机和容器间拷贝
7.10.1. 容器拷贝到主机
docker cp ed0f8bb24f3e:/opt/webapp/app.py d:/www
ed0f8bb24f3e:容器 id/opt/webapp/app.py: 容器中的文件 d:/www:主机文件夹
7.10.2. 主机拷贝到容器
docker cp d:/www/ 文件 ed0f8bb24f3e:/opt/webapp/
八、数据卷
8.1 什么是数据卷
数据卷 是一个可供一个或多个容器使用的特殊目录,可以绕过联合文件系统(UFS),为一个或多个容器提供访问。数据卷设计的目的在于对数据的持久化,它完全独立于容器的生命周期,因此 Docker 不会在删除容器时删除其挂载的数据卷,也不会存在类似垃圾收集的机制。数据卷提供很多有用的特性:
数据卷 可以在容器之间共享和重用
对数据卷的修改会立马生效
对数据卷的更新,不会影响镜像
数据卷默认会一直存在,即使容器被删除
注意:数据卷的使用,类似于 Linux 下对目录或文件进行 mount,镜像中的被指定为挂载点的目录中的文件会隐藏掉,能显示看的是挂载的数据卷。
8.2 为什么要使用数据卷
将本地主机中的代码运行在 docker 容器中。
8.3 挂载数据卷的前提
授权本地磁盘
8.4 挂载一个主机目录作为数据卷
docker run -d -v d:/www/webapp:/opt/webapp training/webapp
九、常见疑问
Docker 的容器是以镜像来创建的,镜像是不是一个类似操作系统的环境?
是的,你可以将 Docker 理解为一个轻量化的虚拟机,至于我们经常说的什么 Tomcat 镜像、MySQL 镜像之类的,只是这个轻量化的虚拟机中安装了相应的软件。镜像的名字也就说明了镜像的功能。
是不是到正式环境上还要安装 Docker,然后把应用部署在其中?
是的,构建 Docker 镜像、运行 Docker 容器,都需要安装 Docker,但这是一劳永逸的,因为我们使用的是安装了各种各样功能软件的 Docker 镜像和 Docker 容器。
参考教程:Docker 之编程环境应用