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

相關文章:html

基礎篇裏,咱們介紹了一些Docker的經常使用概念和命令,接下來咱們會繼續學習Docker的其餘用法和實際運用。前端

Nginx

前端最常使用的靜態服務器就是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)的概念了。

數據卷(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。

相關文章
相關標籤/搜索