Создать контейнер с Nginx Docker
Введение | |
nginx:alpine | |
-v: Подключение Volume | |
Пример 2 | |
Nginx в Docker Compose | |
Статьи про Docker |
Введение
Пример где на хосте
Ubuntu
для
Windows
какие-то команды могут незначительно отличаться
Полезно прочтитать про
Nginx
на
https://hub.docker.com/_/nginx
nginx:alpine
docker pull nginx:alpine
Если образ ещё не скачан - начнётся загрузка. На данном хосте он уже есть
alpine: Pulling from library/nginx Digest: sha256:a74534e76ee1121d418fa7394ca930eb67440deda413848bc67c68138535b989 Status: Image is up to date for nginx:alpine docker.io/library/nginx:alpine
➭ docker images
REPOSITORY TAG IMAGE ID CREATED SIZE nginx alpine b1c3acb28882 13 days ago 23.4MB
Запустим контейнер командой run
docker run --name andrei-nginx -p 8080:80 -d nginx:alpine
30433f8ff2738593f44b9e95c243dd521d3d2effb879fc0126e4f0d88a2c08b8
docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 30433f8ff273 nginx:alpine "/docker-entrypoint.…" 3 seconds ago Up 3 seconds 0.0.0.0:8080->80/tcp, :::8080->80/tcp andrei-nginx
В браузере выполните
http://127.0.0.1:8080/
lynx localhost:8080
Welcome to nginx! Welcome to nginx! If you see this page, the nginx web server is successfully installed and working. Further configuration is required. For online documentation and support please refer to nginx.org. Commercial support is available at nginx.com. Thank you for using nginx.
-v: Подключение Volume
Можно сразу закинуть свою html страницу вместо стандартной с помощью volume
mkdir nginx
cd nginx
touch index.html
vi index.html
Создадим простейшую страницу, например про велосипеды
<html> <body> <h1>TopBicycle.ru</h1> <p> <a href="https://www.topbicycle.ru/m/russian/"> Russian Bikes </a> <br><br> <a href="https://www.topbicycle.ru/m/italian/"> Italian Bikes </a> </p> </body> </html>
Убедимся, что контейнер удалён и запустим снова но уже с опцией -v которая укажет какую директорию на хосте нужно подставить в директорию из образа.
docker rm andrei-nginx
docker run --name andrei-nginx -p 8080:80 -v $(pwd):/usr/share/nginx/html nginx:alpine
lynx localhost:8080
TopBicycle.ru Russian Bikes Italian Bikes
Второй пример
mkdir docker_lab
cd docker_lab
Основы
Скачаем образ (image) с Nginx
sudo docker pull nginx
sudo docker pull nginx Using default tag: latest latest: Pulling from library/nginx 7d63c13d9b9b: Pull complete 15641ef02d80: Pull complete 392f7fc24052: Pull complete 8765c7b04ad8: Pull complete 8ddfvc52b5c7: Pull complete 353f1014328a: Pull complete Digest: sha256:dfef797cyddfc01645503cef9036379f03ae920cac82d344d58b637ee861fda1 Status: Downloaded newer image for nginx:latest docker.io/library/nginx:latest
Убедимся, что образ появился в списке
sudo docker images
REPOSITORY TAG IMAGE ID CREATED SIZE nginx latest 04661cdce581 13 hours ago 141MB nginx_nginx latest 915d22c6f9c6 21 hours ago 219MB nginxinc/nginx-unprivileged 1.21.0 d30c9c6fe1a0 5 months ago 133MB
Создадим папку nginx и перейдём в неё
mkdir nginx
cd nginx
Создадим файл с найстройками ssh sshd_config и начнём его редактировать
touch sshd_config
nano sshd_config
Сделайте небольшой конфиг, например такой:
Port 22
Protocol 2
HostKey /etc/ssh/ssh_host_rsa_key
HostKey /etc/ssh/ssh_host_dsa_key
HostKey /etc/ssh/ssh_host_ecda_key
HostKey /etc/ssh/ssh_host_ed25519_key
LoginGraceTime 120
PermitRootLogin yes
StrictModes yes
RSAAuthentication yes
PubkeyAuthentication yes
UsePAM yes
Создайте файл с настройками Docker - Dockerfile и отредактируйте его
touch Dockerfile
nano Dockerfile
FROM centos
RUN yum -y update
RUN yum install -y openssh-server
RUN ssh-keygen -A
ADD ./sshd_config /etc/ssh/sshd_config
RUN echo root:Secret123 | chpasswd
CMD /usr/sbin/sshd -D
Соберите образ
docker build -t andrei-ubuntu/centos_ssh .
-t это сокращение от --tag задаёт название и тэг в формате 'name:tag'
тэг можно не указывать - это опционально
. означает - в текущей директории
Теперь запустите его
docker run -it -d --name node1 -p 2201:22 andrei-ubuntu/centos_ssh
Убедитесь, что его статус Up
docker ps -a
Если вы не знаете на каком вы IP выполните
ip a
Подключитесь по SSH
ssh root@192.168.0.100 -p 2201
Nginx в Docker Compose
Рассмотрим пример создания простейшего контейнера со статическим сайтом на основе Nginx.
Структура проекта
nginx_mkdocs/ |-- docker-compose.yml |-- dockerfiles | |-- Dockerfile.nginx | `-- nginx.conf |-- git-experiments | `-- mkdocs | `-- documentation | |-- docs | |-- mkdocs.yml | `-- site `-- venv
Содержимое сайта находится в директории site
Файлы:
# docker-compose.yml version: '1.0' services: nginx: restart: always privileged: true user: root build: context: ./dockerfiles dockerfile: Dockerfile.nginx args: buildversion: 1 ports: - "8001:80" container_name: nginx_mkdocs networks: net2: ipv4_address: 10.6.0.2 volumes: - ./git-experiments/mkdocs/documentation/site:/usr/share/nginx/html - /var/run/docker.sock:/var/run/docker.sock networks: net2: driver: bridge ipam: config: - subnet: 10.6.0.0/16 gateway: 10.6.0.1
# Dockerfile.nginx FROM nginx:1.24 COPY ./nginx.conf /etc/nginx/nginx.conf