Originaly posted here
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.
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:
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.