欢迎访问网易云社区,了解更多网易技术产品运营经验。
2.2.3 Docker 容器及操作
容器是镜像的运行实例,它可以被启动、开始、停止和删除。每个容器都是相互隔离 的、保证安全的独立空间。可以把容器看作是一个简易版的 Linux 环境(包括 root 用户权
限、进程空间、用户空间和网络空间等)和运行在其中的应用程序。
注:镜像是只读的,容器在启动的时候创建一层可写层作为最上层。本节将围绕容器 具体介绍其相关的重要操作。
1. 创建容器
Docker 容器十分轻量,可以使用 docker create 创建一个容器。
用法如下。
Usage: docker create [OPTIONS] IMAGE [COMMAND] [ARG...]
举例如下。
注:使用 docker create 新建的容器处于停止状态,可以使用下面的 docker start 来启 动它。
Usage: docker start [OPTIONS] CONTAINER [CONTAINER...]
更详细的使用方式请参考官方说明。
(1)https://docs.docker.com/engine/reference/commandline/create/。
(2)https://docs.docker.com/engine/reference/commandline/start/。
2. 新建并启动容器
除了上述先创建一个容器再启动,还有一种更简洁的方式,就是 docker run,等价于 docker create + docker start。
用法如下。
Usage: docker run [OPTIONS] IMAGE [COMMAND] [ARG...]
举例如下。
注:docker run 是 Docker 最复杂的命令,选项非常多,以下是 docker run 在后台做的 操作。
(1)检查本地是否存在指定的镜像,不存在就从公有仓库下载。
(2)利用镜像创建并启动一个容器。
(3)分配一个文件系统,并在只读的镜像层外面挂载一层可读写层。
(4)从宿主主机配置的网桥接口中桥接一个虚拟接口到容器中。
(5)从地址池配置一个 IP 地址给容器。
(6)执行用户指定的应用程序。
(7)执行完毕后容器被终止。如果想让 Docker 容器在后台以守护态(Daemonized)形 式运行,可以通过 -d 参数来实现,如下所示。
更详细的使用方式请参考官方说明:https://docs.docker.com/engine/reference/commandline/ run/。
3. 查看容器
在上面的示例中,我们通过 docker ps 来查看容器,用法如下。
Usage: docker ps [OPTIONS]
注:
(1)通常,我们会加上 -a 选项来查看所有容器的状态。
(2)通过 --latest 或 -l 可以查看最新被创建的容器。
更详细的使用方式请参考官方说明:https://docs.docker.com/engine/reference/commandline/ ps/。
4. 进入容器
使用-d 参数,容器启动后会进入后台(或者在容器交互终端按 CTRL+P 和 CTRL+Q 组合键),用户无法看到容器中的信息。如果需要进入到容器进行操作,一般可以通过 docker exec。
用法如下。
Usage: docker exec [OPTIONS] CONTAINER COMMAND [ARG...]
举例如下。
更详细的使用方式请参考官方说明:https://docs.docker.com/engine/reference/commandline/ exec/。
5. 终止容器
可以使用 docker stop 命令来终止容器。
Usage: docker stop [OPTIONS] CONTAINER [CONTAINER...]
也可以通过 docker kill 命令来终止容器。
Usage: docker kill [OPTIONS] CONTAINER [CONTAINER...]
区别在于,stop 是先发送 SIGTERM 信号,一会再发送 SIGKILL 信号,而 kill 是直接 发送 SIGKILL 信号。
更详细的使用方式请参考官方说明。
(1)https://docs.docker.com/engine/reference/commandline/stop/。
(2)https://docs.docker.com/engine/reference/commandline/kill/。
6. 删除容器
可以使用 docker rm 命令删除处于终止状态的容器。
举例
$ docker redis rm redis
注: (1)如果要删除一个运行中的容器,可以添加-f 参数。Docker 会发送 SIGKILL 信 号给容器,终止其中的应用并删除。
(2)如果想要删除所有停止的容器,执行:$ docker rm $(docker ps -a -q)。
更详细的使用方式请参考官方说明:https://docs.docker.com/engine/reference/commandline/ rm/。
2.2.4 基于容器工程化
前面对容器及 Docker 技术进行了简单的介绍,我们大致了解了容器及镜像是什么及怎 么使用。基于 Docker 进行工程化的核心就是基于 Dockerfile 把原有的构建过程与容器镜像 整合,一方面构建流程规范化,另一方面也解决了环境的一致性问题。本节我们将简单介 绍结合标准化的构建及 Docker 的镜像进行构建发布的大致流程,下一节我们以实战示例的 形式展示怎么整合,体会 Docker 在各个环境下的“构建、发布和运行” 。以下 Dockerfile 文件中的步骤体现了大致的流程。
然后使用此 Dockerfile 来构建镜像 spring-boot-docker-cloudcomb。
$ docker build -t spring-boot-docker-cloudcomb.
构建好镜像后,就可以基于镜像运行服务。
$ docker run -it --rm spring-boot-docker-cloudcomb
所以,基于容器工程化的核心是基于基础镜像构建自己的应用镜像,一般都需要经过 拉取最新代码、构建代码和部署代码的过程。镜像构建完成后,就可以随时基于构建出 来的镜像运行服务,因为所有的环境依赖都打包进镜像,不会因为外部环境的差异而导 致问题。
文章节选自《云原生应用架构实践》 网易云基础服务架构团队 著
网易云计算基础服务深度整合了 IaaS、PaaS 及容器技术,提供弹性计算、DevOps 工具链及微服务基础设施等服务,帮助企业解决 IT、架构及运维等问题,使企业更聚焦于业务,是新一代的云计算平台。点击可免费试用。