Centos 从安装到部署之 Docker篇(二)

1,408 阅读6分钟

Docker 是一个开源的应用容器引擎,基于 Go 语言 并遵从 Apache2.0 协议开源。

Docker 可以让开发者打包他们的应用以及依赖包到一个轻量级、可移植的容器中,然后发布到任何流行的 Linux 机器上,也可以实现虚拟化。

容器是完全使用沙箱机制,相互之间不会有任何接口(类似 iPhone 的 app),更重要的是容器性能开销极低。

本篇文章作为 《 Centos 从安装到部署》 的第二篇文章,将会为大家简单介绍一下 Docker 的基本命令及使用,

为下一篇 应用的自动化构建及部署做一个知识铺垫。如果阅读过程中发现有疑问可以在文章末尾留言讨论 : ),主要内容如下:

  1. 如何在 Centos 上 安装 Docker 及 docker-compose
  2. 如何构建应用镜像
  3. 如何运行应用容器

一、如何安装 Docker

Docker支持以下的 CentOS 版本:

  • CentOS 7 (64-bit)
  • CentOS 6.5 (64-bit) 或更高的版本

Docker 软件包和依赖包已经包含在默认的 CentOS-Extras 软件源里,安装命令如下:

yum -y install docker

安装完成后,启动 Docker 后台服务:

service docker start

恭喜你,Docker 已经成功安装并运行了。接下来我们要拉取一个镜像,然后运行一个容器,你没猜错,我们就是要测试运行 hello-word

docker run hello-world

Docker首先从本地主机上查找镜像是否存在,由于我们的本地没有 hello-world 这个镜像,所以 Docker 就会从镜像仓库 Docker Hub 下载一个 hello-world 的镜像,并在容器内运行。

下面介绍几个 Docker 常用的命令:

1、查看本机 Docker 镜像,可以看到镜像名称、标签、id等信息

docker images

2、从 Docker Hub 中查询镜像

docker search <image_name>

3、拉取 Docker 镜像到本地

docker pull <image_name:tag>

4、删除本地指定镜像

docker rm image <image_name / image_id>

5、构建本地镜像,需要切换到要构建镜像的目录下,并确保目录下存在 Dockerfile 文件

docker build -t <image_name>:<tag> .

6、根据镜像 启动容器

docker run <image_name>

带参数启动
docker run -d -i -t -p 3000:3002 --name <container_name> --link=<linked_container_name>:<alias_name> <image_name>

参数说明:
-d            让容器在后台运行
-p            将容器内部的网络端口映射到我们使用的宿主机上    3000 为宿主机端口    3002 为容器端口
-i            允许我们对容器进行交互性输入
-t            在容器内指定一个伪终端或终端
--name        指定容器的名称
--link        连接到其他容器

7、查看运行中的容器

docker ps 
//查看所有容器,包括已经停止的容器
docker ps -a

8、进入运行中的容器

docker exec -it <container_name> bash

9、查看指定容器日志

docker logs <container_name / container_id>

10、停止容器

docker stop <container_name>

11、删除容器,注意,删除容器前一定要先停止容器,否则会报错

docker rm <container_name>

基本上掌握了这些命令,我们就可以愉快的玩耍了,可以从容的拉取镜像,启动容器,并查看日志,也可以停止容器并删除容器。

从步骤 6 相信大家也看到了,如果要带参数运行容器,我们不仅要记住很多参数,而且每次启动容器都需要再输入一遍,不仅繁琐,而且容易出错,“偷懒”是程序员的天性 。有没有一直方式,让我们可以把这些参数都写在一个文件里,再次启动容器的时候去读取这个文件的配置信息呢? 肯定是有的。这时我们就要请出 docker-compose 了。

二、安装 docker-compose

docker-compose 项目是 Docker 官方的开源项目,负责实现对 Docker 容器集群的快速编排。docker-compose 的定位是 「定义和运行多个 Docker 容器的应用(Defining and running multi-container Docker applications)」,其前身是开源项目 Fig。

在 Centos 上安装 docker-compose 也是非常简单:

1、运行以下命令下载最新的 docker-compose 安装包:

sudo curl -L https://github.com/docker/compose/releases/download/1.18.0/docker-compose-`uname -s`-`uname -m` -o /usr/local/bin/docker-compose

当然过几天,这个就不是最新的版本了,可以通过查看 docker-compose 在 github 上的 release 来获取最新版本号。

2、增加 docker-compose 可执行权限

sudo chmod +x /usr/local/bin/docker-compose

3、测试 docker-compose 是否正确安装

$ docker-compose --version
docker-compose version 1.18.0, build 1719ceb

至此,docker-compose 的安装也已经顺利完成了!

三、如何使用 docker-compose 来运行容器

在第一部分中,我们已经学习了如何直接使用 docker 命令来运行一个容器,这一节,我们将会了解到如何通过 docker-compose 来编排容器。

docker-compose 可以同时对多个容器进行编排运行。为什么会有多个容器同时运行的需求呢?例如要部署一个 web 应用,除了我们的 web 服务容器本身以外,还需要后端数据库容器(mongo),甚至需要负载均衡配置的容器(nginx)等。docker-compose 恰好就可以完美解决这样的需求,它允许用户通过一个单独的 docker-compose.yml 模板文件(YAML 格式)来定义一组相关联的应用容器为一个项目(project)。

下面我们将以一个 node 项目为例,后端数据库使用 mongo 来编写一个 docker-compose.yml 文件,来感受一下使用 docker-compose 启动多个关联的容器是多么的方便:

version: '3'                                                   
services:
  recatch-service:                                                 
    image: yvanwang/recatch-service:latest                                                          
    ports:
      - "8082:8082"
  mongodb:
    image: mongo:3.4
    ports:
      - "27017:27017"
    command: mongod -f /etc/mongod.conf
    volumes:
      - "./mongod.conf:/etc/mongod.conf"
      - "/var/lib/mongo:/data/db"

有了这么一个 docker-compose.yml 文件,接下来你只需要在该文件所在的目录运行一行命令:

docker-compose up -d

即可同时启动两个容器了,是不是很方便,而且也免去了每次启动容器都需要输入一堆参数的麻烦。以下将对 compose 模板文件的配置进行简单的介绍:

version:compose 文件的版本号,compose 文件版本号与docker-compose的版本映射关系

services:定义将要运行的容器集合

recatch-service:容器名称

image:指定为镜像名称或镜像 ID。如果镜像在本地不存在,compose 将会尝试拉去这个镜像

ports:暴露端口,使用宿主端口:容器端口 (HOST:CONTAINER) 格式,如果仅仅指定容器的端口(宿主将会随机选择端口)

command:容器启动时执行的命令

volumes:数据卷所挂载路径设置。格式为(HOST:CONTAINER),该项的配置是为了将 容器的数据 挂载到主机上,可以将容器产生的数据和容器分离开,这样当你将容器删除之后,容器的数据依然存在。例如在 mongodb 的配置中,

- "/var/lib/mongo:/data/db"

就是将容器内数据的存储路径挂载到主机的 /var/lib/mongo 下,这样当容器删除后,mongo 的数据文件依然存在于主机的 /var/lib/mongo 文件夹下。

恭喜你,看到这里,你基本就已经掌握了 docker 的基本操作,已经拥有了构建 docker 镜像及部署容器的基础知识。下一篇我们将一起来探索如何借助 docker 及 daocloud 来实现应用的自动构建及部署,cheers !


本文首发于我的个人博客:Centos 从安装到部署之 Docker(二)


Docker 学习资料:

Docker — 从入门到实践 (推荐 *****)

深入理解Docker Volume(一)

深入理解Docker Volume(二)