文章目录
一、Docker简介
Docker 是一个开源的应用容器引擎,基于Go 语言并遵从Apache2.0协议开源。Docker 可以让开发者打包他们的应用以及依赖包到一个轻量级、可移植的容器中,然后发布到任何流行的 Linux 机器上,也可以实现虚拟化。容器是完全使用沙箱机制,相互之间不会有任何接口(类似 iPhone 的 app),更重要的是容器性能开销极低。从 2017 年 3 月开始 Docker 在原来的基础上分为两个分支版本 CE(Community Edition: 社区版) 和 EE(Enterprise Edition: 企业版)。Docker CE 即社区免费版,Docker EE 即企业版,强调安全,但需付费使用。
1、Docker应用场景
- Web 应用的自动化打包和发布。
- 自动化测试和持续集成、发布。
- 在服务型环境中部署和调整数据库或其他的后台应用。
- 从头编译或者扩展现有的OpenShift或Cloud Foundry平台来搭建自己的PaaS环境。
2、Docker的有优点
-
简化程序
Docker 让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的 Linux 机器上,便可以实现虚拟化。Docker改变了虚拟化的方式,使开发者可以直接将自己的成果放入Docker中进行管理。方便快捷已经是 Docker的最大优势,过去需要用数天乃至数周的任务,在Docker容器的处理下,只需要数秒就能完成。
-
避免选择恐惧症
如果你有选择恐惧症,还是资深患者。Docker 帮你 打包你的纠结!比如 Docker 镜像;Docker 镜像中包含了运行环境和配置,所以 Docker 可以简化部署多种应用实例工作。比如 Web 应用、后台应用、数据库应用、大数据应用比如 Hadoop 集群、消息队列等等都可以打包成一个镜像部署。
-
节省开支
一方面,云计算时代到来,使开发者不必为了追求效果而配置高额的硬件,Docker 改变了高性能必然高价格的思维定势。Docker 与云的结合,让云空间得到更充分的利用。不仅解决了硬件管理的问题,也改变了虚拟化的方式。
3、Docker架构
Docker 使用客户端-服务器 (C/S) 架构模式,使用远程API来管理和创建Docker容器。
Docker 容器通过 Docker 镜像来创建。
容器与镜像的关系类似于面向对象编程中的对象与类。
Docker | 面向对象 |
---|---|
容器 | 对象 |
镜像 | 类 |
Docker 镜像(Images) | Docker 镜像是用于创建 Docker 容器的模板。 |
---|---|
Docker 容器(Container) | 容器是独立运行的一个或一组应用。 |
Docker 客户端(Client) | Docker 客户端通过命令行或者其他工具使用 Docker API (https://docs.docker.com/reference/api/docker_remote_api) 与 Docker 的守护进程通信。 |
Docker 主机(Host) | 一个物理或者虚拟的机器用于执行 Docker 守护进程和容器。 |
Docker 仓库(Registry) | Docker 仓库用来保存镜像,可以理解为代码控制中的代码仓库。Docker Hub(https://hub.docker.com) 提供了庞大的镜像集合供使用。 |
Docker Machine | Docker Machine是一个简化Docker安装的命令行工具,通过一个简单的命令行即可在相应的平台上安装Docker,比如VirtualBox、 Digital Ocean、Microsoft Azure。 |
二、Docker安装
1、CentOS Docker安装
目前,CentOS 仅发行版本中的内核支持 Docker。Docker 运行在 CentOS 7 上,要求系统为64位、系统内核版本为 3.10 以上。Docker 运行在 CentOS-6.5 或更高的版本的 CentOS 上,要求系统为64位、系统内核版本为 2.6.32-431 或者更高版本。
1.1、CentOS7 yum安装
Docker 要求 CentOS 系统的内核版本高于 3.10 ,通过 uname -r
命令查看你当前的内核版本,看CentOS 版本是否支持 Docker 。
-
移除旧版本
sudo yum remove docker \ docker-client \ docker-client-latest \ docker-common \ docker-latest \ docker-latest-logrotate \ docker-logrotate \ docker-selinux \ docker-engine-selinux \ docker-engine
-
安装必要的系统工具
sudo yum install -y yum-utils device-mapper-persistent-data lvm2
- yum-utils
- device-mapper-persistent-data
- lvm2
-
添加软件源信息
sudo yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
-
更新yum缓存
sudo yum makecache fast
-
安装Docker-ce
sudo yum -y install docker-ce
-
启动Docker后台服务
sudo systemctl start docker sudo systemctl enabled docker
-
测试运行
sudo docker run hello-world
由于本地没有hello-world这个镜像,所以会下载一个hello-world的镜像,并在容器内运行。
1.2、CentOS6 yum安装
-
升级内核(带aufs模块)
-
yum安装带aufs模块的3.10内核
cd /etc/yum.repos.d wget http://www.hop5.in/yum/el6/hop5.repo yum install kernel-ml-aufs kernel-ml-aufs-devel
-
修改grub的主配置文件/etc/grub.conf,设置default=0,表示第一个title下的内容为默认启动的kernel(一般新安装的内核在第一个位置)。
-
重启系统,用
uname -r
命令查看内核就是否成功升级成功。 -
用
grep aufs /proc/filesystems
查看内核是否支持aufs
-
-
安装docker
-
下载安装epel
rpm -ivh http://mirrors.sohu.com/fedora-epel/6/x86_64/epel-release-6-8.noarch.rpm sed -i 's/^mirrorlist=https/mirrorlist=http/' /etc/yum.repos.d/epel.repo
-
yum安装docker-io
yum -y install docker-io
-
1.3、脚本安装Docker
三、Docker使用
四、Docker实例
1、Docker安装Nginx
1.1、下载官方镜像
docker pull nginx
1.2、运行容器
mkdir -p /docker/nginx
cd /docker/nginx
docker run --name mynginx -d -p 81:80 -v $PWD/html:/usr/share/nginx/html -v $PWD/logs:/var/log/nginx -v $PWD/conf/conf.d:/etc/nginx/conf.d -d nginx
1.3、配置虚拟主机
vim conf/conf.d/default.conf
server {
listen 80;
server_name apps.backend.com;
root /usr/share/nginx/html;
index index.php index.html index.htm;
location ~ \.php$ {
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}
location / {
try_files $uri $uri/ /index.php?$query_string;
}
location ~ .*\.(gif|jpg|jpeg|png|bmp|swf)$ {
expires 30d;
}
location ~ .*\.(js|css)?$ {
expires 1h;
}
}
1.4、重启容器
docker restart mynginx
2、Docker安装PHP
2.1、下载镜像
docker pull php:7.3.0-fpm
2.2、运行容器
docker run -p 9000:9000 --name myphp -v /docker/nginx/html:/usr/share/nginx/html -d php:7.3.0-fpm
2.3、安装PHP扩展
-
进入容器
docker exec -it myphp /bin/bash
-
安装扩展
apt-get update && \ apt-get install -y libfreetype6-dev libjpeg62-turbo-dev && \ docker-php-ext-configure gd --with-freetype-dir=/usr/include/ --with-jpeg-dir=/usr/include/ && \ docker-php-ext-install gd pdo_mysql
注意: 安装扩展之后重启php-fpm才会生效
2.4、查询PHP容器IP
docker inspect --format='{{.NetworkSettings.IPAddress}}' myphp
# 假如IP为:172.17.0.3
2.5、修改nginx配置
- 将虚拟主机中
fastcgi_pass 127.0.0.1:9000;
改为fastcgi_pass 172.17.0.3:9000;
- 重启nginx
docker restart mynginx