寫給前端工程師看的Docker教程-中級篇

深紅發表於2019-09-29

相關文章:

基礎篇裡,我們介紹了一些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。

相關文章