啊 , 感嘆下,生活不會虧待努力的人(雖然我不是 嘻嘻),但是一直過着 聰明、健康、有愛的生活。。。。。。。。。。。。。。。
之前也在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.csdn.net/zhezhebie/article/details/73331335解決
------------------------------------nginx有很多功能,本人也在持續學習中--------------------------------------
下面使用自己的自定義配置,實現nginx的轉發功能