Manage NGINX configurations inside Docker container
I believe in any product there is a time when you have to configure a proxy server. Will it be to expose UI applications or just redirect requests to different APIs it depends, but time will come. I’ve made a simple example that will help you configure or investigate your NGINX docker container with configuration change on the fly.
Don’t do this in your production environment.
For the beginning, we need to understand how our NGINX docker image looks like.
Dockerfile
FROM nginx:stable-alpine
RUN rm -rf /usr/share/nginx/html/*
COPY ./dist/app /usr/share/nginx/html
In the same directory that you created your Dockerfile, create folders directory dist/app and put some dummy index.html
Here is an example of index.html:
<!DOCTYPE html>
<html>
<body>
<h2>An Unordered HTML List</h2>
<ul>
<li>Coffee</li>
<li>Tea</li>
<li>Milk</li>
</ul>
<h2>An Ordered HTML List</h2>
<ol>
<li>Coffee</li>
<li>Tea</li>
<li>Milk</li>
</ol>
</body>
</html>
Build your image:
docker build -t nginx:latest .
As the result, you should have your image ready to be started:
REPOSITORY TAG IMAGE ID
nginx latest .....
Run your docker image:
docker run -d -p 8080:80 nginx
Validate that everything is working smooth:
test-vm@vm-test:~/dockertest$ curl http://localhost:8080
<!DOCTYPE html>
<html>
<body><h2>An Unordered HTML List</h2><ul>
<li>Coffee</li>
<li>Tea</li>
<li>Milk</li>
</ul><h2>An Ordered HTML List</h2><ol>
<li>Coffee</li>
<li>Tea</li>
<li>Milk</li>
</ol></body>
</html>
Now you should enter into your container, to do that get a container id.
test-vm@vm-test:~/dockertest$ docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
022c55a80088 nginx "/d.…" 7 m ago Up 7 m 8080 busy
test-vm@vm-test:~/dockertest$ docker exec -it 022c55a80088 /bin/sh
/ #
Voila, we are in the container and can change everything on the fly.
The configuration file itself is located in the default directory:
/etc/nginx/nginx.conf
You can go there, modify configurations and easily validate them:
/ # nginx -t
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful
Validation of file is good, but to apply it, we need to restart our nginx service:
/ # nginx -s reload
2021/11/10 12:01:50 [notice] 46#46: signal process started
And that’s it, now testing of configuration change for your NGINX service in Docker container is easier and no need for rebuilding on every change.
Thanks for reading!
If you have an interesting experience with live changes in Docker containers or you are interested in another topic, please add comments and upvote 👍. I’m interested in the dialog.