Статьи по Теме:
- Учебное пособие по 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.