一般學習一項技術,會先用一個最簡單的例子或最典型的例子來向大家講解入門內容,所以此文為大家介紹使用docker安裝nginx容器服務。從基礎使用的角度來講,此文幾乎涵蓋了docker最核心的內容:鏡像拉取、容器運行、埠映射、文件映射,雖然基礎但很重要,所以建議認真學習。 一、拉取鏡像 docker ...
一般學習一項技術,會先用一個最簡單的例子或最典型的例子來向大家講解入門內容,所以此文為大家介紹使用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 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 |
日誌目錄 | /etc/nginx/nginx.conf | /root/nginx/conf/nginx.conf |
nginx配置文件目錄 | /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服務了。
同時可以在宿主機上修改nginx配置,也可以查看運行時日誌文件。修改結果會影響容器nginx服務的運行,因為宿主機的配置文件與容器內的配置文件存在映射關係。
字母哥博客:zimug.com