使用Docker測試靜態網站
阿新 • • 發佈:2018-11-09
下來是將Nginx安裝到容器來架構一個簡單的網站開發,網站命名為Sample.
1.samle網站的初試Dockerfile
- 為Nginx Dockerfile建立一個目錄
$ mkdir sample
$ cd sample
$ touch Dockerfile
- 獲取Nginx配置檔案
$ cd sample $ mkdir nginx && cd nginx $ wget https://github.com/hiekay/dockerbook-code/blob/master/code/5/sample/nginx/global.conf $ wget https://github.com/hiekay/dockerbook-code/blob/master/code/5/sample/nginx/nginx.conf $ cd ..
- 網站測試的基本Dockerfile
FROM ubuntu:18.04
MAINTAINER hiekay "[email protected]"
ENV REFRESHED_AT 2018-11-2
RUN apt-get update
RUN apt-get -y -q install nginx
RUN mkdir -p /var/www/html
ADD nginx/global.conf /etc/nginx/conf.d/
ADD nginx/nginx.conf /etc/nginx/nginx.conf
EXPOSE 80
- 解析: dockerfile 包括:
安裝Nginx;
在容器中建立一個目錄/var/www/html;
將來自本地檔案的Nginx配置檔案新增到映象中;
公開映象80埠. - global.conf檔案
server {
listen 0.0.0.0:80;
server_name _;
root /var/www/html/website;
index index.html index.htm;
access_log /var/log/nginx/default_access.log;
error_log /var/log/nginx/default_error.log;
}
網站根目錄: root /var/www/html/website;
- nginx.conf配置檔案
user www-data;
worker_processes 4;
pid /run/nginx.pid;
daemon off;
events { }
http {
sendfile on;
tcp_nopush on;
tcp_nodelay on;
keepalive_timeout 65;
types_hash_max_size 2048;
include /etc/nginx/mime.types;
default_type application/octet-stream;
access_log /var/log/nginx/access.log;
error_log /var/log/nginx/error.log;
gzip on;
gzip_disable "msie6";
include /etc/nginx/conf.d/*.conf;
}
2.構建Sample網站和Nginx映象
- 構建新的Nginx映象
$ sudo docker build -t hiekay/nginx .
- 展示Nginx映象的構建歷史
$ sudo docker history hiekay/nginx
//返回
IMAGE CREATED CREATED BY SIZE COMMENT
c2f93099a450 About a minute ago /bin/sh -c #(nop) EXPOSE 80 0B
79e5c47816c2 About a minute ago /bin/sh -c #(nop) ADD file:ae1b9b338d442b9bc… 415B
4e375527ddd7 About a minute ago /bin/sh -c #(nop) ADD file:e570a7cbab1d98b88… 286B
16ef3bfd3dcd About a minute ago /bin/sh -c mkdir -p /var/www/html 0B
41f4aad7a454 2 minutes ago /bin/sh -c apt-get -y -q install nginx 59.7MB
1a50f2d65b09 2 minutes ago /bin/sh -c apt-get update 23.8MB
d02ebf320b6c 3 minutes ago /bin/sh -c #(nop) ENV REFRESHED_AT=2018-11-2 0B
a1eda1cd7dfe 27 hours ago /bin/sh -c #(nop) MAINTAINER hiekay "hikay5… 0B
ea4c82dcd15a 2 weeks ago /bin/sh -c #(nop) CMD ["/bin/bash"] 0B
<missing> 2 weeks ago /bin/sh -c mkdir -p /run/systemd && echo 'do… 7B
<missing> 2 weeks ago /bin/sh -c rm -rf /var/lib/apt/lists/* 0B
<missing> 2 weeks ago /bin/sh -c set -xe && echo '#!/bin/sh' > /… 745B
<missing> 2 weeks ago /bin/sh -c #(nop) ADD file:bcd068f67af2788db… 85.8MB
3.從Sample網站和Nginx映象構建容器
- 下載Sample網站
$ cd sample
$ mkdir website && cd website
$ wget https://github.com/hiekay/dockerbook-code/blob/master/code/5/sample/website/index.html
$ cd ..
其中 index.html 內容:
<head>
<title>Test website</title>
</head>
<body>
<h1>This is a test website</h1>
</body>
- 構建一個Nginx測試容器
$ sudo docker run -d -p 80 --name website -v $PWD/website:/var/www/html/website hiekay/nginx nginx
其中 -v 是指定卷的位置
卷的使用場景:
希望同事對程式碼做開發和測試;
程式碼改動很頻繁,不想在開發過程中重構映象;
希望在多個容器間共享程式碼.
- 控制卷的寫狀態:
rw : 讀寫
ro : 只讀
$ sudo docker run -d -p 80 --name website -v $PWD/website:/var/www.html/website:ro hiekay/nginx nginx
- 檢視Sample網站容器
$ sudo docker ps -l
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
dc1a45694b4b hiekay/nginx "nginx" 4 minutes ago Up 4 minutes 0.0.0.0:32769->80/tcp website
在宿主機上瀏覽32769埠,看到網站如下:
4.修改網站
- 修改sample網站
$ vi $PWD/website/index.html
將內容換成:
This is a test website for docker .
重新整理瀏覽器 , 如下 :
可以看到網站已經更新了.
-
總結:可以實現正在測試的網站的執行環境,完全是生產環境裡的真實狀態.
可以給每個用於生產的網站服務環境配置一個容器,給不同的開發框架的執行環境配置一個容器,或者給後端資料庫配置一個容器.等. -
注意 可以進容器內檢視
$ sudo docker exec -t -i 容器ID /bin/bash