天天看點

【docker系列】使用docker安裝nginx提供web服務

【docker系列】使用docker安裝nginx提供web服務

文章目錄

  • ​​一、拉取鏡像​​
  • ​​二、運作鏡像啟動容器​​
  • ​​三、檔案映射​​
  • ​​四、再次啟動容器服務​​

一般學習一項技術,會先用一個最簡單的例子或最典型的例子來向大家講解入門内容,是以此文為大家介紹使用docker安裝nginx容器服務。

從基礎使用的角度來講,此文幾乎涵蓋了docker最核心的内容:鏡像拉取、容器運作、端口映射、檔案映射,雖然基礎但很重要,是以對于初學者還是很有必要認真看的。

一、拉取鏡像

docker pull指令用于拉取應用鏡像,​

​docker pull nginx​

​指令用于拉取最新版本的nginx鏡像。下文為拉取鏡像過程的響應結果:

# docker pull nginx
Using default tag: latest
latest: Pulling from library/nginx
c229119241af: Pull complete 
2215908dc0a2: Pull complete 
08c3cb2073f1: Pull complete 
18f38162c0ce: Pull complete 
10e2168f148a: Pull complete 
c4ffe9532b5f: Pull complete 
Digest: sha256:2275af0f20d71b293916f1958f8497f987b8d8fd8113df54635f2a5915002bf1
Status: Downloaded newer image for nginx:latest
docker.io/library/nginx:latest      

從上文我們可以看出nginx鏡像是從​

​docker.io​

​這個網址拉取下來的。

使用​

​docker images​

​指令可以檢視目前作業系統中下載下傳了哪些鏡像檔案。

# docker images
REPOSITORY    TAG       IMAGE ID       CREATED        SIZE
nginx         latest    12766a6745ee   33 hours ago   142MB
hello-world   latest    feb5d9fea6a5   6 months ago   13.3kB      
  • REPOSITORY鏡像倉庫及鏡像名稱,如果不顯示鏡像倉庫,預設就是​

    ​docker.io​

  • TAG鏡像的版本或者是裡程碑标簽,latest表示最新版本
  • IMAGE ID 鏡像的唯一辨別
  • CREATED 這個鏡像被建立的時間
  • SIZE表示鏡像檔案的大小

二、運作鏡像啟動容器

通過​

​docker run​

​指令啟動一個容器,容器名稱為nginx-zimug。

# docker run -d --name nginx-zimug -p  80:80  nginx
81bb1211144bc0991a789f860458548643c60b5459466c14d0604be9a4ccbfd7      
  • ​-d​

    ​表示容器在背景運作
  • ​--name​

    ​為容器起一個名字
  • ​-p​

    ​​端口映射,格式為​

    ​主控端端口:容器端口​

    ​,上文中含義是将容器中的端口80映射到主控端的端口80,對外提供通路服務。
  • 最後一個字段為鏡像名稱

浏覽器HTTP協定通路主控端的80端口,如果是80端口可以省略。得到的通路結果如下,說明我們的nginx服務已經啟動成功了。

【docker系列】使用docker安裝nginx提供web服務

通過​

​docker ps​

​可以檢視正在運作中的容器,如下所示:

CONTAINER ID   IMAGE     COMMAND                  CREATED          STATUS          PORTS                               NAMES
81bb1211144b   nginx     "/docker-entrypoint.…"   11 minutes ago   Up 11 minutes   0.0.0.0:80->80/tcp, :::80->80/tcp   nginx-zimug      

三、檔案映射

首先明确的是容器中的檔案内容是可以被修改的,但是一旦容器重新開機,所有寫入到容器中的,針對資料檔案、配置檔案的修改都将丢失。是以為了儲存容器的運作狀态,執行結果,我們需要将容器内的一些重要的資料檔案、日志檔案、配置檔案映射到主控端上。

以nginx為例,nginx有三個重要的檔案目錄:

容器中路徑 主控端中自定義映射路徑
存儲網站網頁的目錄 /usr/share/nginx/html /root/nginx/html
nginx配置檔案目錄 /etc/nginx/nginx.conf /root/nginx/conf/nginx.conf
日志目錄 /var/log/nginx /root/nginx/logs

在主控端中建立檔案目錄

mkdir -p  /root/nginx/logs  /root/nginx/html  /root/nginx/conf;      

将容器中的檔案copy到主控端中

将nginx配置檔案copy到主控端中

docker cp nginx-zimug:/etc/nginx/nginx.conf /root/nginx/conf;      

将一個模拟的html檔案放入html目錄

将下面的檔案儲存為index.html放入主控端的​

​/root/nginx/html​

​目錄,因為存在映射關系,實際上也是放入了容器的​

​/usr/share/nginx/html​

​目錄。

<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>使用docker搭建nginx web服務</title>
</head>
<body>
    <h1>通路成功</h1>
    <p>厲害了!</p>
</body>
</html>      

四、再次啟動容器服務

​-v​

​​參數表達了主控端檔案與容器中檔案的映射關系,格式為​

​-v 主控端目錄:容器檔案系統目錄​

​。啟動一個新的容器,容器的名字叫做nginx-prod

docker run -d -p 80:80 \
--name nginx-prod \
-v /root/nginx/html:/usr/share/nginx/html \
-v /root/nginx/conf/nginx.conf:/etc/nginx/nginx.conf \
-v /root/nginx/logs:/var/log/nginx  nginx      

在啟動新容器之前,将nginx-zimug舊的容器删掉。如果不删除舊的容器,新容器的端口與舊容器端口會發生沖突。使用如下指令删除容器:

docker stop nginx-zimug;
docker rm nginx-zimug;      

執行上面的​

​docker run​

​指令,啟動新的容器。啟動後通過浏覽器通路主控端80端口,響應結果如下證明nginx正常提供web服務了。

【docker系列】使用docker安裝nginx提供web服務

同時可以在主控端上修改nginx配置,也可以檢視運作時日志檔案。修改結果會影響容器nginx服務的運作,因為主控端的配置檔案與容器内的配置檔案存在映射關系。

繼續閱讀