Docker 使用入門,創建一個Nginx服務器


運行環境: MAC

Docker 版本: Docker version 17.12.0-ce, build c97c6d6

一、啟動Nginx 服務器

啟動Nginx 服務器,並進入模擬終端

docker run -p 8080:80 --name nginx_web -it  nginx /bin/bash

二、了解Nginx 鏡像的配置文件位置

日志文件位置:/var/log/nginx
配置文件位置: /etc/nginx
資源存放的位置: /usr/share/nginx/html

**上面的配置路徑是我電腦上的虛擬linux中地址,請各位讀者,也自己去看下自己的配置位置**

三、修改Nginx 的默認首頁,測試是否可以運行

重要提示: 對於不想折騰的同學,可以直接從第四步來運行

/usr/share/nginx/html

echo "<h1>Hello Docker</h1>" > index.html


**到這里有的朋友,可能會發現,我訪問localhost:8080 端口,第一次出現了Nginx 的歡迎界面,而第二次就出現了404 提示。**

關於這個問題,本文不展開詳序,如果不明白的,可以參考:

  1. docker運行nginx為什么要使用 daemon off
  2. docker容器運行后退出,怎么才能一直運行?
  3. Docker run 命令的使用方法

Docker 執行 docker run 之后,先在當前操作系統的基礎上,虛擬化了一個精簡版的linux(僅僅包含系統運行的最精簡功能),然后加載我們的Nginx鏡像。當Nginx鏡像加載到我們的虛擬Linux環境中時,相當於在系統里執行了一個腳本,而這個腳本就是Nginx。

由於默認的Nginx 是不作為守護進程運行的。所以當Docker內監聽到80端口的請求后,完成之后,就退出了Nginx的進程。該容器內只有一個進程,並且是非守護的,執行完請求進程就銷毀了。那么這個容器也就沒有存在的必要了,所以Docker 中這個服務也就停掉了。這也就是我們執行 docker top 看不到當前運行的容器的原因。

作為暫時解決Nginx 只執行一次就退出的問題,我們可以進入交互式終端,執行 nginx & 讓nginx 作為守護進程后台運行。


查看我們正在運行的容器

roverliang$ docker ps
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES

如果什么內容都沒有,說明當前沒有正在運行的容器。

查看已經運行結束的容器

roverliang$ docker ps -a
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS                      PORTS                  NAMES
5bff285f60b3        nginx               "/bin/bash"              9 minutes ago       Exited (0) 6 minutes ago                           nginx_web

> 重新啟動我們剛剛啟動過的容器
docker start nginx_web

> 進入到我們的容器內部
docker attach nginx_web

echo "<h1>Hello Docker</h1>" > /usr/share/nginx/html/index.html

nginx & 

然后 使用快捷鍵 control + Q 退出當前的容器

之后我們在瀏覽器再次訪問:http://localhost:8080/


**折騰了這么久,終於看到我們期望的的內容了。**
Hello Docker

四、將前面Nginx Demo 變成一個可以玩的 Demo

先創建我們本機需要映射的文件夾

 mkdir -p  docker_study/log  docker_study/etc docker_study/html

注意: 在自己的家目錄創建


復制我們docker中nginx 的配置文件

docker cp 65bc23f952db:/etc/nginx/ /Users/roverliang/docker_study/etc/

關閉掉我們的容器

docker stop nginx_web

> 刪除掉我們的練習的demo,我們重新來構建一個可以用的。
docker rm nginx_web


> 將Nginx 鏡像和我們本機的目錄進行映射,方便我們修改文件
docker run \
-p 8080:80 \
--name nginx_web \
-v /Users/roverliang/docker_study/log/:/var/log/nginx \
-v /Users/roverliang/docker_study/etc/nginx.conf:/etc/nginx/nginx.conf \
-v /Users/roverliang/docker_study/html/:/usr/share/nginx/html \
-it \
-d \
nginx \
/bin/bash \

運行到這里,我們可能還是會發現訪問http://localhost:8080/ 沒有內容。但是不要急,解決問題的過程,就是學習新東西的過程,繼續網上查資料,參考如下:

Docker運行nginx

摘抄文中讓我豁然開朗的一段:

我之前運行的時候,一般都采用交互式:
-i 保證容器的stdin開啟-t 為容器生成一個tty終端,在命令的最后加一個/bin/bash來保證可以交互。但是實際上,nginx並沒有運行,導致我以為容器的端口綁定不是持久化的。

接下來我們需要關掉,並刪除我們的容器,再按照如下的命令重啟一個:

docker run \
-p 8080:80 \
--name nginx_web \
-v /Users/roverliang/docker_study/log/:/var/log/nginx \
-v /Users/roverliang/docker_study/etc/nginx.conf:/etc/nginx/nginx.conf \
-v /Users/roverliang/docker_study/html/:/usr/share/nginx/html \
-d \
nginx 

五、修改Nginx 配置,解析一個網站

修改我們剛剛復制過來的nginx 配置

cd /Users/roverliang/docker_study/etc
vim nginx.conf

在Http 模塊中添加如下配置:
 server
    {   
        listen 80; 
        server_name www.test_nginx.com;
        index index.html;
        root /usr/share/nginx/html;
    }   

然后回到宿主機,綁定host 127.0.0.1      www.test_nginx.com

大功告成


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM