Учебное пособие по Docker для фронтенд-инженеров — средний уровень

Docker
Учебное пособие по Docker для фронтенд-инженеров — средний уровень

Статьи по Теме:

существуетОсновыЗдесь мы представили некоторые общие концепции и команды Docker, а затем продолжим изучение других способов использования и практических приложений Docker.

Nginx

Наиболее часто используемый статический сервер во внешнем интерфейсе — Nginx.

docker run -d --name my-nginx -p 8888:80 nginx

доступhttp://localhost:8888/Вы увидите знакомую страницу приветствия

Объяснение параметра:

-d: Основы уже объяснены, режим работы охраны

-p: сопоставление портов.8888:80Указывает, что локальный порт 8888 сопоставлен с портом 80 контейнера.

Зачем отображать порты? Потому что каждый контейнер в Docker относительно независим и имеет свой внутренний ip. Чтобы сделать некоторые сетевые приложения, работающие в контейнере, доступными для внешнего мира, необходимо сопоставить порт с хостом.

docker port my-nginx 

80/tcp -> 0.0.0.0:8888Вы можете увидеть сопоставленные порты

Что, если мы захотим изменить содержимое страницы приветствия Nginx?

Самый простой способ подумать: мы заходим в контейнер и модифицируем/usr/share/nginx/htmlв каталогеindex.html

# 进入nginx容器里
docker exec -it my-nginx /bin/bash

Однако этот метод плохо масштабируется.Если есть несколько контейнеров Nginx, нужно ли нам вводить контейнеры один за другим, чтобы модифицировать их?

В это время вводится понятие объема данных (Volume).

Объем данных (объем)

Подобно сопоставлению портов, мы можем сопоставить каталог внутри контейнера с каталогом хоста, чтобы обеспечить совместное использование и повторное использование между контейнерами.

новыйmy-nginxкаталог, новыйindex.html

mkdir my-nginx
cd my-nginx
touch index.html

index.html

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <meta http-equiv="X-UA-Compatible" content="ie=edge">
  <title>Document</title>
</head>
<body>
  <h1>hello world</h1>
</body>
</html>
docker run --name nginx-test \
--rm -p 8888:80 \
-v $PWD:/usr/share/nginx/html \
-d nginx

Совет: если командная строка слишком длинная, вы можете использовать символ \ для записи в несколько строк.

доступhttp://localhost:8888/Он изменился!

Объяснение параметра:

-v: $PWD:/usr/share/nginx/htmlУказывает, что контейнер/usr/share/nginx/htmlСопоставить с текущим каталогом, т.е.my-nginxсодержание. Итак, nginx вернулсяindex.htmlстал нашим местнымindex.html.

Мы можем попробовать создать новый локально1.html, затем посетитеhttp://localhost:8888/1.htmlВы также можете увидеть вывод.

Точно так же, если мы хотим изменить конфигурацию Nginx в контейнере, мы также можем изменить/etc/nginx/conf.d/Сопоставьте с локальным, а затем создайте новую конфигурацию локальноmydefault.conf

Чтобы просмотреть содержание основ, мы хотим создать локальное зеркало, основанное на Nginx, а содержимым страницы приветствия по умолчанию является только что созданный нами index.html.

существуетmy-nginxкаталог, новыйDockerfile

FROM nginx
# 将当前的index.html拷贝到容器的/usr/share/nginx/html/index.html
COPY ./index.html /usr/share/nginx/html/index.html
EXPOSE 80

docker build -t my-nginx .построить образ

docker run -d --rm -p 4445:80 my-nginxСоздайте контейнер, доступhttp://localhost:4445Вы можете увидеть эффект.

Redis

Мы также можем запустить Redis в Docker.

docker pull redis
docker run -d --name my-redis -p 6389:6379 redis

Войдите в контейнер и подключитесь к Redis

# 进入my-redis容器里,并且在容器里执行redis-cli命令
docker exec -it my-redis redis-cli 

Итак, мы подключаемся к redis и можем выполнить соответствующую команду redis

# 设置name
set name tc
# 获取name
get name

Поскольку мы сопоставили порт 6379 контейнера с портом 6389 локальной машины, мы также можем напрямую подключиться к Redis в контейнере локально.

# 需要你本地安装了redis-cli
redis-cli -h 127.0.0.1 -p 6389

# 返回tc
get name

Суммировать

В основном мы изучили сопоставление портов (-p) и сопоставление каталогов (-v) в Docker, а также узнали, как использовать Nginx и Redis в Docker.