From f86988a54a022c3bc6077e8051d26bd4d4b2026b Mon Sep 17 00:00:00 2001 From: hugo gogo Date: Mon, 29 Aug 2022 16:08:56 +0200 Subject: [PATCH] wrote steps to install docker in readme and wrote a dockerfile for nginx not tested --- README.md | 93 +++++++----------- srcs/docker-compose.yml | 1 + srcs/requirements/nginx/Dockerfile | 11 +++ .../nginx/conf/inception_nginx.conf | 9 ++ srcs/requirements/nginx/conf/index.html | 1 + srcs/requirements/nginx/conf/nginx.conf | 85 ++++++++++++++++ srcs/requirements/nginx/conf/salade.jpeg | Bin 0 -> 27559 bytes srcs/requirements/test/Dockerfile | 38 +++++++ 8 files changed, 183 insertions(+), 55 deletions(-) create mode 100644 srcs/requirements/nginx/conf/inception_nginx.conf create mode 100644 srcs/requirements/nginx/conf/index.html create mode 100644 srcs/requirements/nginx/conf/nginx.conf create mode 100644 srcs/requirements/nginx/conf/salade.jpeg diff --git a/README.md b/README.md index 9fc1dbb..b6d95ff 100644 --- a/README.md +++ b/README.md @@ -9,6 +9,13 @@ This README would normally document whatever steps are necessary to get your app - ? what means mounted in "a file or directory on the host machine is mounted into a container" ? - ? why the volumes cannot be modify outside docker ? +--- +## nginx basics + +- `sudo netstat -tulpn` to print network connections and see if nginx is running +- or : `ps -ax | grep nginx` +- `sudo nginx -s quit` to stop it + --- ## Dockerfile basics @@ -16,62 +23,9 @@ This README would normally document whatever steps are necessary to get your app - we need to copy the files it uses inside this filesystem - we can do that with COPY -**working** -``` -FROM scratch -WORKDIR / -COPY hello / -CMD [ "/hello" ] -``` - -**working, when WORKDIR is absent, it's default is set to "/"** -``` -FROM scratch -COPY hello / -CMD [ "/hello" ] -``` - -**not working, when CMD execute in shell form, instead of exec form []** -``` -FROM scratch -COPY hello / -CMD /hello -``` - -**not working, because c executable need library ** -``` -FROM scratch -COPY hello_c / -CMD [ "/hello_c" ] -``` - -**not working, when executable is copied to ".", because WORKDIR value is not "." but "/" since we gave it a relativ path so it was build in top of the implicit absolut path "/"** -``` -FROM scratch -WORKDIR . -COPY hello . -CMD [ "hello" ] -``` - -**not working, when WORKDIR is set to the present directory and executable is not copied, because the workdir is not the present directory but a directory in the file system of docker : executable need to be copied there to function** -``` -FROM scratch -WORKDIR /home/simplonco/Desktop/42/14_inception/inception/srcs/requirements/mariadb -CMD [ "hello" ] -``` - -**working, because "hello" is copied to "/" and execute from "/"** -``` -FROM scratch -WORKDIR . -COPY hello / -CMD [ "/hello" ] -``` - --- ## ressources -- [how to install docker engine](https://docs.docker.com/engine/install/ubuntu/) - [download alpine linux](https://alpinelinux.org/downloads/) - [dockerhub alpine image](https://hub.docker.com/_/alpine) - [docker glossaire](https://docs.docker.com/glossary/) @@ -79,13 +33,42 @@ CMD [ "/hello" ] - [determine the parent image](https://forums.docker.com/t/determine-the-parent-image/48611) - [docker image from scratch](https://codeburst.io/docker-from-scratch-2a84552470c8) - [build context and image context](https://stackoverflow.com/questions/55108649/what-is-app-working-directory-for-a-dockerfile/55109065#55109065) +- [pid1 docker problem](https://blog.phusion.nl/2015/01/20/docker-and-the-pid-1-zombie-reaping-problem/) -#### docker compose +#### install and use docker and compose +- [how to install docker engine](https://docs.docker.com/engine/install/ubuntu/) - [github releases](https://github.com/docker/compose/releases) - [install last version of compose manually](https://docs.docker.com/compose/install/compose-plugin/#install-the-plugin-manually) - [install manually SO discussion](https://stackoverflow.com/questions/57456212/error-version-in-docker-compose-yml-is-unsupported) -- the version installed with is 1.17.1, way out of date +- the version installed with apt is 1.17.1, way out of date + +**remove old versions** +- `sudo apt remove docker docker-engine docker.io containerd runc` +**preparing directory** +- `sudo apt update` +- `sudo apt install ca-certificates curl gnupg lsb-release` +- `sudo mkdir -p /etc/apt/keyrings` +- `curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg` +- `echo "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null` +**installing docker engine** +- `sudo apt update` +- `sudo apt install docker-ce docker-ce-cli containerd.io docker-compose-plugin` +**check if installation worked** +- `sudo docker run hello-world` +**installing docker compose** checked version on github release, see above +- `sudo curl -L "https://github.com/docker/compose/releases/download/2.10.2/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose` +- `sudo chmod +x /usr/local/bin/docker-compose` +- `sudo ln -s /usr/local/bin/docker-compose /usr/bin/docker-compose` +**build and run a docker image** +- be in directory with a Dockerfile +- `sudo docker build --tag .` +- `sudo docker images` to list images +- `sudo docker run ` +- `sudo docker image rm -f ` +**execute a docker-compose file** +- be in directory with a docker-compose.yml file +- `sudo docker-compose up` #### volumes vs bind mounts diff --git a/srcs/docker-compose.yml b/srcs/docker-compose.yml index 36499fa..02267bc 100644 --- a/srcs/docker-compose.yml +++ b/srcs/docker-compose.yml @@ -4,6 +4,7 @@ # had to remove the apt version because it was not up to date (sudo apt remove docker-compose) # then install as recommended : curl -SL https://github.com/docker/compose/releases/download/v2.10.2/docker-compose-linux-x86_64 -o /usr/local/bin/docker-compose # or (neat) : https://github.com/docker/compose/releases/download/v2.10.2/docker-compose-$(uname -s)-$(uname -m) -o /usr/local/bin/docker-compose + version: "3.8" services: diff --git a/srcs/requirements/nginx/Dockerfile b/srcs/requirements/nginx/Dockerfile index e69de29..d3dc63f 100644 --- a/srcs/requirements/nginx/Dockerfile +++ b/srcs/requirements/nginx/Dockerfile @@ -0,0 +1,11 @@ +FROM debian:buster + +RUN apt update && apt install -y nginx + +COPY ./conf/nginx.conf /etc/nginx/ +COPY ./conf/inception_nginx.conf /etc/nginx/conf.d/ +COPY ./conf/index.html /data/www/ +COPY ./conf/salade.jpeg /data/images/ + +CMD [ "nginx" ] + diff --git a/srcs/requirements/nginx/conf/inception_nginx.conf b/srcs/requirements/nginx/conf/inception_nginx.conf new file mode 100644 index 0000000..6dee8d9 --- /dev/null +++ b/srcs/requirements/nginx/conf/inception_nginx.conf @@ -0,0 +1,9 @@ +server { + server_name localhost; + location / { + root /data/www; + } + location /images/ { + root /data; + } +} diff --git a/srcs/requirements/nginx/conf/index.html b/srcs/requirements/nginx/conf/index.html new file mode 100644 index 0000000..a95200f --- /dev/null +++ b/srcs/requirements/nginx/conf/index.html @@ -0,0 +1 @@ +hello world ! diff --git a/srcs/requirements/nginx/conf/nginx.conf b/srcs/requirements/nginx/conf/nginx.conf new file mode 100644 index 0000000..b21ef82 --- /dev/null +++ b/srcs/requirements/nginx/conf/nginx.conf @@ -0,0 +1,85 @@ +user www-data; +worker_processes auto; +pid /run/nginx.pid; +include /etc/nginx/modules-enabled/*.conf; + +events { + worker_connections 768; + # multi_accept on; +} + +http { + ## + # Basic Settings + ## + + sendfile on; + tcp_nopush on; + tcp_nodelay on; + keepalive_timeout 65; + types_hash_max_size 2048; + # server_tokens off; + + # server_names_hash_bucket_size 64; + # server_name_in_redirect off; + + include /etc/nginx/mime.types; + default_type application/octet-stream; + + ## + # SSL Settings + ## + + ssl_protocols TLSv1 TLSv1.1 TLSv1.2; # Dropping SSLv3, ref: POODLE + ssl_prefer_server_ciphers on; + + ## + # Logging Settings + ## + + access_log /var/log/nginx/access.log; + error_log /var/log/nginx/error.log; + + ## + # Gzip Settings + ## + + gzip on; + + # gzip_vary on; + # gzip_proxied any; + # gzip_comp_level 6; + # gzip_buffers 16 8k; + # gzip_http_version 1.1; + # gzip_types text/plain text/css application/json application/javascript text/xml application/xml application/xml+rss text/javascript; + + ## + # Virtual Host Configs + ## + + include /etc/nginx/conf.d/*.conf; + include /etc/nginx/sites-enabled/*; +} + + +#mail { +# # See sample authentication script at: +# # http://wiki.nginx.org/ImapAuthenticateWithApachePhpScript +# +# # auth_http localhost/auth.php; +# # pop3_capabilities "TOP" "USER"; +# # imap_capabilities "IMAP4rev1" "UIDPLUS"; +# +# server { +# listen localhost:110; +# protocol pop3; +# proxy on; +# } +# +# server { +# listen localhost:143; +# protocol imap; +# proxy on; +# } +#} + diff --git a/srcs/requirements/nginx/conf/salade.jpeg b/srcs/requirements/nginx/conf/salade.jpeg new file mode 100644 index 0000000000000000000000000000000000000000..92d1e01275c8414d589b25a821bcdb395b4f1058 GIT binary patch literal 27559 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 +#FROM scratch +#COPY hello_c / +#CMD [ "/hello_c" ] + +## not working, when executable is copied to ".", because WORKDIR value is not "." but "/" since we gave it a relativ path so it was build in top of the implicit absolut path "/" +#FROM scratch +#WORKDIR . +#COPY hello . +#CMD [ "hello" ] + +## not working, when WORKDIR is set to the present directory and executable is not copied, because the workdir is not the present directory but a directory in the file system of docker : executable need to be copied there to function +#FROM scratch +#WORKDIR /home/simplonco/Desktop/42/14_inception/inception/srcs/requirements/mariadb +#CMD [ "hello" ] + +## working, because "hello" is copied to "/" and execute from "/" +#FROM scratch +#WORKDIR . +#COPY hello / +#CMD [ "/hello" ] +