相關文章:
- 寫給前端工程師看的Docker教程-基礎篇
- 寫給前端工程師看的Docker教程-中級篇
- 寫給前端工程師看的Docker教程-實戰篇
在基礎篇裡,我們介紹了一些Docker的常用概念和命令,接下來我們會繼續學習Docker的其他用法和實際運用。
Nginx
前端最常使用的靜態伺服器就是Nginx了。
docker run -d --name my-nginx -p 8888:80 nginx
複製程式碼
訪問 http://localhost:8888/ 即可看到熟悉的歡迎頁面
引數解釋:
-d
: 基礎篇裡已經解釋過了,守護執行方式
-p
: 埠對映。8888:80
表示把本地的8888埠對映到容器的80埠
為什麼要對映埠?因為Docker裡每個容器都是相對獨立的,擁有自己的內部ip。容器裡執行的一些網路應用,要讓外部也可以訪問,就需要將埠對映到宿主機上。
docker port my-nginx
複製程式碼
80/tcp -> 0.0.0.0:8888
即可看到對映的埠了
如果我們希望修改Nginx歡迎頁的內容,怎麼辦?
最容易想到的方法是:我們進入到容器裡,然後修改/usr/share/nginx/html
目錄裡的index.html
# 進入nginx容器裡
docker exec -it my-nginx /bin/bash
複製程式碼
不過這種方法擴充性不高,假如有多個Nginx容器,難道我們需要一個個的進入容器去修改?
這時就要引出資料卷(Volume)的概念了。
資料卷(Volume)
類似埠對映,我們可以把容器內部的目錄對映到宿主機的目錄,實現容器之間實現共享和重用。
新建my-nginx
目錄,新建index.html
mkdir my-nginx
cd my-nginx
touch index.html
複製程式碼
index.html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta http-equiv="X-UA-Compatible" content="ie=edge">
<title>Document</title>
</head>
<body>
<h1>hello world</h1>
</body>
</html>
複製程式碼
docker run --name nginx-test \
--rm -p 8888:80 \
-v $PWD:/usr/share/nginx/html \
-d nginx
複製程式碼
小技巧:如果命令列過長,可以使用\符號多行書寫
訪問 http://localhost:8888/ 已經發生變化了!
引數解釋:
-v
: $PWD:/usr/share/nginx/html
表示把容器內的/usr/share/nginx/html
對映到當前目錄,也就是my-nginx
目錄。於是nginx返回的index.html
也就變成了我們本地的index.html
了。
我們可以試著在本地新建一個1.html
,然後訪問 http://localhost:8888/1.html 也可以看到輸出了內容。
同理,如果我們希望修改容器裡Nginx的配置,也可以把容器的/etc/nginx/conf.d/
對映到本地,然後在本地新建配置mydefault.conf
為了複習一下基礎篇的內容,我們希望構建一個本地的映象,這個映象基於Nginx,預設的歡迎頁面內容就是我們剛剛新建的index.html
在my-nginx
目錄,新建Dockerfile
FROM nginx
# 將當前的index.html拷貝到容器的/usr/share/nginx/html/index.html
COPY ./index.html /usr/share/nginx/html/index.html
EXPOSE 80
複製程式碼
docker build -t my-nginx .
構建映象
docker run -d --rm -p 4445:80 my-nginx
建立容器,訪問 http://localhost:4445 可以看到效果了。
Redis
我們也可以在Docker裡執行Redis。
docker pull redis
docker run -d --name my-redis -p 6389:6379 redis
複製程式碼
進入容器並且連線到redis
# 進入my-redis容器裡,並且在容器裡執行redis-cli命令
docker exec -it my-redis redis-cli
複製程式碼
於是我們就連線到redis裡了,並且可以執行相應的redis命令
# 設定name
set name tc
# 獲取name
get name
複製程式碼
因為我們把容器的6379埠對映到了本機的6389,所以我們也可以直接在本地連線容器裡的redis
# 需要你本地安裝了redis-cli
redis-cli -h 127.0.0.1 -p 6389
# 返回tc
get name
複製程式碼
總結
我們主要學習了Docker裡的埠對映(-p)和目錄對映(-v),同時學習瞭如何在Docker裡使用Nginx和Redis。