一、拉取鏡像
docker pull命令用于拉取應(yīng)用鏡像,docker pull nginx命令用于拉取最新版本的nginx鏡像。下文為拉取鏡像過程的響應(yīng)結(jié)果:
#?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這個網(wǎng)址拉取下來的。
使用docker images命令可以查看當(dāng)前操作系統(tǒng)中下載了哪些鏡像文件。
#?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鏡像的版本或者是里程碑標(biāo)簽,latest表示最新版本
-
IMAGE ID 鏡像的唯一標(biāo)識
-
CREATED 這個鏡像被創(chuàng)建的時間
-
SIZE表示鏡像文件的大小
二、運行鏡像啟動容器
通過docker run命令啟動一個容器,容器名稱為nginx-zimug。
#?docker?run?-d?--name?nginx-zimug?-p??80:80??nginx 81bb1211144bc0991a789f860458548643c60b5459466c14d0604be9a4ccbfd7
-
-d表示容器在后臺運行
-
–name為容器起一個名字
-
-p端口映射,格式為宿主機端口:容器端口,上文中含義是將容器中的端口80映射到宿主機的端口80,對外提供訪問服務(wù)。最后一個字段為鏡像名稱
當(dāng)瀏覽器通過HTTP協(xié)議訪問宿主機的80端口時,可以省略端口號。得到的訪問結(jié)果如下,說明我們的nginx服務(wù)已經(jīng)啟動成功了。
通過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
三、文件映射
首先明確的是容器中的文件內(nèi)容是可以被修改的,但是一旦容器重啟,所有寫入到容器中的,針對數(shù)據(jù)文件、配置文件的修改都將丟失。所以為了保存容器的運行狀態(tài),執(zhí)行結(jié)果,我們需要將容器內(nèi)的一些重要的數(shù)據(jù)文件、日志文件、配置文件映射到宿主機上。
以nginx為例,nginx有三個重要的文件目錄:
? | 容器中路徑 | 宿主機中自定義映射路徑 |
---|---|---|
存儲網(wǎng)站網(wǎng)頁的目錄 | /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目錄,因為存在映射關(guān)系,實際上也是放入了容器的/usr/share/nginx/html目錄。
nbsp;html> <meta><title>使用docker搭建nginx?web服務(wù)</title> ????<h2>訪問成功</h2> ????<p>厲害了!</p>
四、再次啟動容器服務(wù)
-v參數(shù)表達了宿主機文件與容器中文件的映射關(guān)系,格式為-v 宿主機目錄:容器文件系統(tǒng)目錄。啟動一個新的容器,容器的名字叫做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舊的容器刪掉。如果不刪除舊的容器,新容器的端口與舊容器端口會發(fā)生沖突。使用如下命令刪除容器:
docker?stop?nginx-zimug; docker?rm?nginx-zimug;
執(zhí)行上面的docker run命令,啟動新的容器。啟動后通過瀏覽器訪問宿主機80端口,響應(yīng)結(jié)果如下證明nginx正常提供web服務(wù)了。
同時可以在宿主機上修改nginx配置,也可以查看運行時日志文件。更改配置文件會影響到運行在容器中的nginx服務(wù),因為宿主機與容器內(nèi)的配置文件之間存在映射關(guān)系。