相關文章:html
在基礎篇裏,咱們介紹了一些Docker的經常使用概念和命令,接下來咱們會繼續學習Docker的其餘用法和實際運用。前端
前端最常使用的靜態服務器就是Nginx了。nginx
docker run -d --name my-nginx -p 8888:80 nginx 複製代碼
訪問 http://localhost:8888/ 便可看到熟悉的歡迎頁面redis
參數解釋:docker
-d
: 基礎篇裏已經解釋過了,守護運行方式bash
-p
: 端口映射。8888:80
表示把本地的8888端口映射到容器的80端口服務器
爲何要映射端口?由於Docker裏每一個容器都是相對獨立的,擁有本身的內部ip。容器裏運行的一些網絡應用,要讓外部也能夠訪問,就須要將端口映射到宿主機上。markdown
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)的概念了。
相似端口映射,咱們能夠把容器內部的目錄映射到宿主機的目錄,實現容器之間實現共享和重用。
新建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 能夠看到效果了。
咱們也能夠在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。