下来是将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 "hikay5230@gmail.com"
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