8
8
- Uses [ tini] [ tini ] for zombie reaping and signal forwarding.
9
9
- Includes `` EXPOSE 80 443 `` , so standard container linking will make it
10
10
automatically available to the linked containers.
11
- - Can be coupled with other containers to provide SSL access and/or
11
+ - Can be coupled with another container to provide SSL access and/or
12
12
proxying.
13
13
14
14
## Usage
15
15
16
- ### Start a Nginx instance and connect to it from an application
16
+ ### Simple static site hosting
17
17
18
+ #### From host
19
+
20
+ ``` console
21
+ $ docker run --name some-nginx -v /some/content:/var/www/html:ro -d tklx/nginx
22
+ ```
23
+
24
+ ``` console
25
+ $ docker run --name some-nginx -v /some/content:/var/www/html:ro -v /some/config/file:/etc/nginx/sites-available/default:ro -d tklx/nginx
26
+ ```
27
+
28
+ #### From host (cleaner solution with Dockerfile)
29
+
30
+ ``` console
31
+ $ ls
32
+ html/ default Dockerfile
33
+ $ cat Dockerfile
34
+ FROM tklx/nginx
35
+
36
+ COPY html /var/www/html
37
+ COPY default /etc/nginx/sites-available/default
38
+ $ docker build -t some-content .
39
+ $ docker run --name some-nginx -d some-content
40
+ ```
41
+
42
+ #### From another container
43
+
44
+ ``` console
45
+ $ docker run --name some-content -v /var/www/html some-content
46
+ $ docker run --name some-nginx --volumes-from=some-content -d tklx/nginx
47
+ ```
48
+
49
+ ### Exposing the port
50
+
51
+ #### Specific port
52
+
53
+ ``` console
54
+ $ docker run --name some-nginx -d -p 8080:80 tklx/nginx
55
+ ```
56
+
57
+ #### Docker-chosen port
18
58
``` console
19
- $ docker run --name some-nginx -d tklx/nginx
20
- $ docker run --name some-app --link some-nginx:nginx -d app-that-uses-nginx
59
+ $ docker run --name some-nginx -dP tklx/nginx
60
+ $ docker port some-nginx
61
+ 443/tcp -> 0.0.0.0:32770
62
+ 80/tcp -> 0.0.0.0:32771
21
63
```
22
64
23
- ### Set up HTTPS websites
65
+ ### Setting up HTTPS websites
24
66
25
67
``` console
26
- $ docker run --name some-ssl-data -d some-ssl-vendor/some-ssl-container
27
- $ docker run --name some-nginx -d tklx/nginx --volumes-from=some-ssl-data:ro
28
- $ docker run -it --rm tklx/base:0.1.0 --volumes-from=some-nginx:rw
29
- base$ echo 'server { listen 443 ssl; server_name www.example.com; ssl_certificate /etc/ssl/private/www.example.com; ssl_certificate_key /etc/ssl/private/www.example.com.key; root /var/www; }' >> /etc/nginx/sites-available/www.example.com
30
- base$ ln -s /etc/nginx/sites-available/www.example.com /etc/nginx/sites-enabled/www.example.com
31
- base$ exit
32
- $ docker exec some-nginx nginx -s reload
33
- $ docker run --name some-app --link some-nginx:nginx -d app-that-uses-nginx
68
+ $ docker run --name some-certs -v /etc/ssl/private:ro -d cert-provider
69
+ $ docker run --name some-config -v /etc/nginx/ -d config-provider
70
+ $ docker exec some-config cat /etc/nginx/sites-enabled/www.example.com
71
+ server {
72
+ listen 443 ssl;
73
+ server_name www.example.com;
74
+
75
+ ssl_certificate /etc/ssl/private/www.example.com;
76
+ ssl_certificate_key /etc/ssl/private/www.example.com.key;
77
+
78
+ root /var/www;
79
+ }
80
+ $ docker run --name some-nginx --volumes-from=some-certs --volumes-from=some-config -d tklx/nginx
34
81
```
35
82
36
83
We recommend using the official [ guidelines] [ nginx-ssl ] to set up your SSL server correctly.
37
84
85
+ ### Setting up a reverse proxy
86
+
87
+ ``` console
88
+ $ docker run --name some-app -v /var/www -v /etc/nginx/sites-available -d backend-app
89
+ $ docker run --name some-nginx --volumes-from=some-app --link some-app:some-app -d tklx/nginx
90
+ $ docker exec some-nginx ls /etc/nginx/sites-enabled/
91
+ some-app-site
92
+ $ docker exec some-nginx cat /etc/nginx/sites-enabled/some-app-site
93
+ server {
94
+ listen 80 default_server;
95
+ server_name www.example.com;
96
+
97
+ root /var/www;
98
+
99
+ location / {
100
+ try_file $url $url/ @backend = 404;
101
+ }
102
+
103
+ location @backend {
104
+ proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
105
+ proxy_set_header Host $http_host;
106
+ proxy_pass http://some-app/;
107
+ proxy_redirect default;
108
+ }
109
+ }
110
+ ```
111
+
112
+
113
+
114
+ ### Setting up a reverse proxy with SSL termination
115
+
116
+ ``` console
117
+ $ docker run --name some-certs -v /etc/ssl/private:ro -d cert-provider
118
+ $ docker run --name some-app -v /var/www -v /etc/nginx/sites-available -d backend-app
119
+ $ docker run --name some-nginx --volumes-from=some-app --volumes-from=some-certs --link some-app:some-app -d tklx/nginx
120
+ $ docker exec some-nginx ls /etc/nginx/sites-enabled/
121
+ some-app-site
122
+ $ docker exec some-nginx cat /etc/nginx/sites-enabled/some-app-site
123
+ server {
124
+ listen 80 default_server;
125
+ server_name www.example.com;
126
+
127
+ listen 443 ssl default_server;
128
+
129
+ root /var/www;
130
+
131
+ ssl_certificate /etc/ssl/private/www.example.com.pem;
132
+ ssl_certificate_key /etc/ssl/private/www.example.com.key;
133
+
134
+ location / {
135
+ try_file $url $url/ @backend = 404;
136
+ }
137
+
138
+ location @backend {
139
+ proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
140
+ proxy_set_header X-Forwarded-Proto $scheme;
141
+ proxy_set_header Host $http_host;
142
+ proxy_pass http://some-app/;
143
+ proxy_redirect default;
144
+ }
145
+ }
146
+ ```
147
+
148
+ For further info on SSL termination, please refer to the [ official documentation] [ nginx-ssl-termination ] .
149
+
38
150
## Status
39
151
40
152
Currently on major version zero (0.y.z). Per [ Semantic Versioning] [ semver ] ,
@@ -48,6 +160,7 @@ tracking of bugs, issues and feature requests.
48
160
49
161
[ base ] : https://github.com/tklx/base
50
162
[ tini ] : https://github.com/krallin/tini
51
- [ nginx-ssl] : http://nginx.org/en/docs/http/configuring_https_servers.html
163
+ [ nginx-ssl ] : https://nginx.org/en/docs/http/configuring_https_servers.html
164
+ [ nginx-ssl-termination ] : https://www.nginx.com/resources/admin-guide/nginx-ssl-termination/
52
165
[ semver ] : http://semver.org/
53
166
[ tracker ] : https://github.com/tklx/tracker/issues
0 commit comments