啊 , 感叹下,生活不会亏待努力的人(虽然我不是 嘻嘻),但是一直过着 聪明、健康、有爱的生活。。。。。。。。。。。。。。。
之前也在linux下安装过docker,并且也一直使用,但是一直没有记录下安装的过程,为了多年以后能再次发现自己的足迹,就抽个时间记录下这些过程。
什么是 Docker
Docker 最初是 dotCloud 公司创始人 Solomon Hykes 在法国期间发起的一个公司内部项目,它是基于 dotCloud 公司多年云服务技术的一次革新,并于 2013 年 3 月以 Apache 2.0 授权协议开源,主要项目代码在 GitHub 上进行维护。Docker 项目后来还加入了 Linux 基金会,并成立推动 开放容器联盟(OCI)。
Docker 自开源后受到广泛的关注和讨论,至今其 GitHub 项目已经超过 4 万 6 千个星标和一万多个 fork。甚至由于 Docker 项目的火爆,在 2013 年底,dotCloud 公司决定改名为 Docker。Docker 最初是在 Ubuntu 12.04 上开发实现的;Red Hat 则从 RHEL 6.5 开始对 Docker 进行支持;Google 也在其 PaaS 产品中广泛应用 Docker。
Docker 使用 Google 公司推出的 Go 语言 进行开发实现,基于 Linux 内核的 cgroup,namespace,以及AUFS 类的 Union FS 等技术,对进程进行封装隔离,属于 操作系统层面的虚拟化技术。由于隔离的进程独立于宿主和其它的隔离的进程,因此也称其为容器。最初实现是基于 LXC,从 0.7 版本以后开始去除 LXC,转而使用自行开发的 libcontainer,从 1.11 开始,则进一步演进为使用 runC 和 containerd。
Docker 在容器的基础上,进行了进一步的封装,从文件系统、网络互联到进程隔离等等,极大的简化了容器的创建和维护。使得 Docker 技术比虚拟机技术更为轻便、快捷。
下面的图片比较了 Docker 和传统虚拟化方式的不同之处。传统虚拟机技术是虚拟出一套硬件后,在其上运行一个完整操作系统,在该系统上再运行所需应用进程;而容器内的应用进程直接运行于宿主的内核,容器内没有自己的内核,而且也没有进行硬件虚拟。因此容器要比传统虚拟机更为轻便。
安装 Docker
Docker 分为 CE 和 EE 两大版本。CE 即社区版(免费,支持周期 7 个月),EE 即企业版,强调安全,付费使用,支持周期 24 个月。
Docker CE 分为 stable, test, 和 nightly 三个更新频道。每六个月发布一个 stable 版本 (18.09, 19.03, 19.09...)。
CentOS 安装 Docker CE
警告:切勿在没有配置 Docker YUM 源的情况下直接使用 yum 命令安装 Docker.
准备工作
Docker CE 支持 64 位版本 CentOS 7,并且要求内核版本不低于 3.10。 CentOS 7 满足最低内核的要求,但由于内核版本比较低,部分功能(如 overlay2
存储层驱动)无法使用,并且部分功能可能不太稳定。
可以使用 uname -r 查看linux的内核
安装一些必要的系统工具:
sudo yum install -y 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
安装成功后,我们启用并启动服务: sudo systemctl enable docker #在服务器上设置设置开机启动 sudo systemctl start docker #启动docker服务
查看是否启动成功:
docker info 或者 docker version都可以看出docker是否启动成功
-------------------------------------------至此docker的安装算是完成了------------------------------------------
docker安装nginx
1. docker hub上查询 nginx
docker search nginx
2. 下载最新版的 nginx
docker pull nginx
下载完成后,使用docker images 查看下载的nginx 镜像
3、启动跑个静态网页,测试下 nginx 容器
# 启动一个名为nginx(名字自己根据需求起名字,一般见名知意即可) 的容器 docker run --name nginx -d -p 80:80 -v /usr/docker/nginx/html:/usr/share/nginx/html nginx
# 默认容器对这个目录有可读写权限,可以通过指定ro,将权限改为只读(readonly) # docker run --name my-nginx -d -p 80:80 -v /usr/docker/nginx/html:/usr/share/nginx/html:ro -d nginx
4、部署nginx 项目并修改配置文件
一般情况下docker启动时进行配置,只要把配置文件的目录挂载出来就可以,但是nginx却是先加载一个主配置文件nginx.conf,在nginx.conf里再加载conf.d目录下的子配置文件(一般最少一个default.conf文件)。
docker run --name nginx -d -p 80:80 -v /usr/share/nginx/html:/usr/share/nginx/html:ro -v /etc/nginx/conf.d:/etc/nginx/conf.d:ro -v /var/log/nginx:/var/log/nginx -v /etc/nginx/nginx.conf /etc/nginx/nginx.conf nginx
# 1. 第一个“-v”,是项目位置,把项目放到挂载到的目录下即可
# 2. 第二个“-v”,是挂载的主配置文件"nginx.conf",注意"nginx.conf"文件内有一行 # "include /etc/nginx/conf.d/*.conf;" ,
# 这个include指向了子配置文件的路径,此处注意include后所跟的路径一定不能出错
# 3. 第三个“-v”,把docker内子配置文件的路径也挂载了出来,注意要与 “2.” 中include指向路径一致
# 4. nginx.conf是挂载了一个文件(docker是不推荐这样用的),conf.d挂载的是一个目录
-v 宿主主机的目录:容器的目录
准备挂载的 nginx.conf :
# For more information on configuration, see:
# * Official English Documentation: http://nginx.org/en/docs/
# * Official Russian Documentation: http://nginx.org/ru/docs/
user nginx;
worker_processes auto;
error_log /var/log/nginx/error.log;
pid /run/nginx.pid;
# Load dynamic modules. See /usr/share/nginx/README.dynamic.
include /usr/share/nginx/modules/*.conf;
events {
worker_connections 1024;
}
http {
log_format main '$remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for"';
access_log /var/log/nginx/access.log main;
sendfile on;
tcp_nopush on;
tcp_nodelay on;
keepalive_timeout 65;
types_hash_max_size 2048;
include /etc/nginx/mime.types;
default_type application/octet-stream;
# Load modular configuration files from the /etc/nginx/conf.d directory.
# See http://nginx.org/en/docs/ngx_core_module.html#include
# for more information.
include /etc/nginx/conf.d/*.conf;
}
准备挂载的 default.conf :
server {
listen 80;
server_name localhost;
#charset koi8-r;
#access_log /var/log/nginx/host.access.log main;
location / {
root /usr/share/nginx/html;
index index.html index.htm;
}
location /api{
proxy_pass http://ip:port/api;
# access_log "logs/test.log"; } }
此时访问ip+端口即可
说明成功,如果出现403.则是找不到文件,可以参考https://blog.youkuaiyun.com/zhezhebie/article/details/73331335解决
------------------------------------nginx有很多功能,本人也在持续学习中--------------------------------------
下面使用自己的自定义配置,实现nginx的转发功能