Docker是一种新兴的虚拟化技术,可以必定程度上的代替传统虚拟机。不过,Docker 跟传统的虚拟化方式相比具备众多的优点。开发者能够打包他们的应用以及依赖包到一个可移植的Docker容器中,而后在Linux 机器上进行部署。php
直白一点,咱们能够不严谨地理解为:一台linux服务器安装了Docker,就比如咱们的电脑上安装了Vmware虚拟机管理软件。服务器里面建立的Docker容器比如电脑里面建立的虚拟机。前端
Docker有不少用途,简化配置、代码管道化管理、开发人员的生产化、应用隔离、服务合并、多租户、快速部署等等。node
这里举一个最贴近广大开发者的例子来讲明下Docker的强大:运行环境快速部署。python
假设有一个程序员小明,某天完成了一个PHP网站的开发,须要把它部署到一台linux服务器A上。传统的作法是,用apt-get或者手动编译安装好LNMP(linux+nginx+mysql+php)环境,而后对nginx.conf、my.cnf、php.ini各类配置和参数进行调整和优化,终于把环境搞好了。mysql
过了一段时间,这个网站的访问量变大了,原来一台服务器已经没法支撑网站服务了,须要扩展一台服务器B进行负载均衡。这时小明须要把原来在服务器A上作的事情,在服务器B上再进行一次,把服务器B的环境弄好。这个过程不只费心费力,并且容易出错,致使两台服务器的环境不一致。linux
若是小明使用Docker进行环境部署的话,这个难题就变得容易解决了。小明只须要在A服务器里面建立一个docker容器,在里面进行各类环境的安装和参数配置(PS:这里只是举个例子,不建议把不少服务塞到一个容器里,最好每一个服务对应一个容器,有利解耦),而后把这个docker打包成镜像。接着在B服务器建立一个容器并加载这个镜像,就能轻松实现环境搭建以及保持环境一致了。nginx
这个例子的具体实现笔者在下面会进行详细介绍。程序员
ubuntu 16.04安装最新版本Docker命令(PS:直接用apt-get、yum安装的版本比较旧):redis
apt-get install \
apt-transport-https \
ca-certificates \
curl \
software-properties-common
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | apt-key add -
add-apt-repository \
"deb [arch=amd64] https://download.docker.com/linux/ubuntu \ $(lsb_release -cs) \ stable"
apt-get update
apt-get install docker-ce
复制代码
其余操做系统安装方法你们能够参考Docker官网安装指南。sql
运行一个后台运行、可交互、镜像为ubuntu16.0四、名称为salasolo的容器
docker run -dit --name salasolo ubuntu:16.04
复制代码
docker run [OPTIONS] IMAGE [COMMAND] [ARG...]
复制代码
-a stdin: 指定标准输入输出内容类型,可选 STDIN/STDOUT/STDERR 三项;
-d: 后台运行容器,并返回容器ID;
-i: 以交互模式运行容器,一般与 -t 同时使用;
-p: 端口映射,格式为:主机(宿主)端口:容器端口
-t: 为容器从新分配一个伪输入终端,一般与 -i 同时使用;
--name="nginx-lb": 为容器指定一个名称;
--dns 8.8.8.8: 指定容器使用的DNS服务器,默认和宿主一致;
--dns-search example.com: 指定容器DNS搜索域名,默认和宿主一致;
-h "mars": 指定容器的hostname;
-e username="ritchie": 设置环境变量;
--env-file=[]: 从指定文件读入环境变量;
--cpuset="0-2" or --cpuset="0,1,2": 绑定容器到指定CPU运行;
-m :设置容器使用内存最大值;
--net="bridge": 指定容器的网络链接类型,支持 bridge/host/none/container: 四种类型;
--link=[]: 添加连接到另外一个容器;
--expose=[]: 开放一个端口或一组端口;
复制代码
docker exec -it salasolo /bin/bash
复制代码
docker stop salasolo
复制代码
docker start salasolo
复制代码
docker rm salasolo
复制代码
docker ps [OPTIONS]
复制代码
-a :显示全部的容器,包括未运行的。
-f :根据条件过滤显示的内容。
--format :指定返回值的模板文件。
-l :显示最近建立的容器。
-n :列出最近建立的n个容器。
--no-trunc :不截断输出。
-q :静默模式,只显示容器编号。
-s :显示总的文件大小。
复制代码
每一个容器初始化时候能够指定一个镜像,有php-fpm环境、mysql环境、ubuntu纯净环境、centos环境、nodejs环境、python环境等等,咱们能够去hub.docker.com官网查找咱们须要的镜像。
首次使用run命令建立基于远程镜像的容器、或者使用pull命令拉取时会下载镜像缓存到本地,能够在本地镜像列表进行查看。
docker pull ubuntu:16.04
复制代码
docker images
复制代码
docker rmi ubuntu:16.04
复制代码
docker commit salasolo salasolo:1.0
复制代码
因为网络缘由,下载Docker官方仓库的镜像会比较慢,可使用国内镜像加速:
www.docker-cn.com/registry-mi…
docker run -d --name container nginx:latest
复制代码
docker run -d --name container php:php:7.2-fpm
复制代码
docker run -d --name container tomcat:latest
复制代码
docker run -d --name container python:latest
复制代码
docker run -d --name container redis:latest
复制代码
关注微信公众号“全栈社区”,可获取更多站长、开发者必备的前端、后端、运维技术干货。
18元美国VPS、建站主机:www.salasolo.com