Docker 是一个开源的应用容器引擎,基于 Go 语言 并遵从 Apache2.0 协议开源。 Docker 可以让开发者打包他们的应用以及依赖包到一个轻量级、可移植的容器中,然后发布到任何流行的 Linux 机器上,也可以实现虚拟化。 容器是完全使用沙箱机制,相互之间不会有任何接口(类似 iPhone 的 app),更重要的是容器性能开销极低。
本篇文章作为 《 Centos 从安装到部署》 的第二篇文章,将会为大家简单介绍一下 Docker 的基本命令及使用,为下一篇 应用的自动化构建及部署做一个知识铺垫。如果阅读过程中发现有疑问可以在文章末尾留言讨论 : ),主要内容如下:
- 如何在 Centos 上 安装 Docker 及 docker-compose
- 如何构建应用镜像
- 如何运行应用容器
一、如何安装 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 !
该篇文章首发在我的个人博客:https://www.yvanwang.com/post/5a605b691fc3f200212abce0