Docker 属于Linux容器的一种方案,提供简单易用的容器使用接口,是目前最流行的Linux容器解决方案
1. 什么是Docker
Docker是一款针对程序开发人员和系统管理员来开发、部署、运行应用的一款虚拟化平台。可以像使用集装箱一样快速的组合成应用,并且可以像运输标准集装箱一样,尽可能的屏蔽代码层面的差异。
2.为什么使用Docker
快速交付应用程序
快速构建
轻松管理
- 构建方式更加简单,可以快速的迭代你的应用,并且可以何视化的来查看应用的细微更改。这能够帮助组织里边的成员来更好的理解一个应用从构建到运行的过程。
- 一个轻量级的容器,所以它的速度是非常快的,而容器的启动时间只需要一秒钟,减少了开发、测试和部署的时间。
- 可以运行在大多数的环境中,你可以在桌面环境、物理主机、虚拟主机再到数据中,私有或者公有云中部署。
- 可以在多平台下运行。很容易迁移应用程序。可以非常简单的将应用程序从测试环境迁移到云,或者从云迁移到测试环境。
- 可以在很短的时间内启动和关闭容器。当你需要的时候,你可以启动多个容器引擎,并且在不需要使用他们的时候,可以将他们全部关闭。
3. 如何使用Docker
3.1 启动容器
启动容器有两种方式,一种是基于镜像新建一个容器并启动,另外一个是将在终止状态(stopped)的容器重新启动。因为 Docker 的容器实在太轻量级了,很多时候用户都是随时删除和新创建容器。
新建并启动容器命令:docker run
1 | docker run [options] 镜像名/id [command] |
当使用 docker run 来创建容器时,Docker 在后台运行的标准操作包括:
- 检查本地是否存在指定的镜像,不存在就从公有仓库下载
- 利用镜像创建并启动一个容器
- 分配一个文件系统,并在只读的镜像层外面挂载一层可读写层
- 从宿主主机配置的网桥接口中桥接一个虚拟接口到容器中去
- 从地址池配置一个 ip 地址给容器
- 执行用户指定的应用程序
- 执行完毕后容器被终止
启动已终止的容器命令:docker start
1 | docker start id/容器名 |
3.3 终止容器
终止容器的命令主要有两种,一种是比较优雅的docker stop
,另一种则是直接的docker kill
docker stop:当我们用docker stop命令来停掉容器的时候,docker默认会允许容器中的应用程序有10秒的时间用以终止运行,在docker stop命令执行的时候,会先向容器中PID为1的进程发送系统信号SIGTERM,然后等待容器中的应用程序终止执行,如果等待时间达到设定的超时时间,或者默认的10秒,会继续发送SIGKILL的系统信号强行kill掉进程。
docker kill:默认情况下,docker kill命令不会给容器中的应用程序有任何等待的机会。它会直接发出SIGKILL的系统信号,以强行终止容器中程序的运行。
打个比方,你是一个杀手,当你去击杀目标时,前者就会对他说”我是一个比较优雅的杀手,今天你必死无疑,但我可以给你十分钟的时间写封遗书,然后再自杀。如果时间到了,你还磨磨唧唧的,那我就只能打爆你的脑袋“。后者的话,是啥也不说,上来就一枪爆头带走
1 | docker stop id/容器名 |
此外,当Docker容器中指定的应用终结时,容器也自动终止。 例如对于只启动了一个终端的容器,用户通过 exit 命令或 Ctrl+d 来退出终端时,所创建的容器立刻终止。
1 | # 显示当前运行的容器 |
3.4 进入容器
在使用 -d 参数时,容器启动后会进入后台。 某些时候需要进入容器进行操作,有很多种方法,包括使用docker attach 命令或 docker exec 命令等
1 | # 进入容器正在执行的终端 |
3.5 其他常有命令
1 | # 重启容器 |
4. Docker部署常见的中间件
1. Nginx
Nginx 安装步骤
- 查看可用的 Nginx 版本
docker search nginx
- 拉起 Nginx 镜像
docker pull nginx
- 查看镜像
docker images
- 运行 Nginx 镜像
docker run –name nginx -p 80:80 -d nginx
2. Rides
Rides 安装步骤
- 查看可用的 Rides 版本
docker search redis
- 拉起 Rides 镜像
docker pull redis
- 查看镜像
docker images
- 运行 Rides 镜像
- 不支持远程访问
1
docker run -itd --name redis-test -p 6379:6379 redis
- 支持远程访问
- 添加配置文件
1
2
3mkdir /root/docker/redis/data
mkdir /root/docker/redis/conf
touch /root/docker/redis/conf/redis.conf - 设置配置项 redis.conf
- 创建并启动
1
docker run -d --name redis_1 -p 6379:6379 -v /root/docker/redis/data:/data -v /root/docker/redis/conf/redis.conf:/etc/redis/redis.conf redis redis-server /etc/redis/redis.conf
- 登录验证
1
2
3
4进入 Redis 容器内查看数据
redis-cli -a 123456
远程登录
redis-cli -h 127.0.0.1 -p 6379 -a 123456
- 不支持远程访问
3. MySql
MySql 安装步骤
- 查看可用的 MySql 版本
docker search mysql
- 拉起 Nginx 镜像
docker pull mysql
- 查看镜像
docker images
- 运行 MySql 镜像
docker run -itd –name mysql-test -p 3306:3306 -e MYSQL_ROOT_PASSWORD=123456 mysql