Пренасочването на портове в Docker е процес, който ни позволява да изложим порта на контейнера в хост системата на Docker. Това ни позволява да стартираме приложението в изолирана среда и също така да го направим достъпно извън контейнера на потребителска машина.
Тази публикация ще демонстрира:
- Как да пренасочите порт в Docker с помощта на етикет „-p“ или „–publish“.
- Как да препратите порт в Docker с помощта на Docker Compose
- Как да препратите порт към конкретна мрежа
- Заключение
Как да пренасочите порт в Docker с помощта на етикет „-p“ или „–publish“.
За да препрати порт в Docker, потребителят трябва да публикува порта на контейнера на хоста на Docker. За тази цел стартирайте контейнера на докер хоста, като използвате „ -стр ' или ' – публикуване ” етикет в „ докер изпълнение ” команда.
За правилна демонстрация следвайте инструкциите по-долу.
Стъпка 1: Направете Dockerfile
Първо създайте файл и задайте името му като „ Докер файл ”. Този файл съдържа текстовите инструкции за създаване на шаблона на контейнера Docker. Например, нека докеризираме простата програма Golang, като използваме фрагмента по-долу в Dockerfile:
ОТ golang: 1.8
WORKDIR / отивам / src / ап
КОПИРАЙТЕ main2.go .
БЯГАЙТЕ, отидете да строите -О уеб сървър .
ИЗЛОЖИ 8080
CMD [ './уеб сървър' ]
В дадения фрагмент:
- “ ОТ ” командата се използва за задаване на основното изображение.
- “ WORKDIR ” дефинира работната директория на контейнера.
- “ КОПИЕ ” ще създаде копие на програмния файл в указания от контейнера път.
- “ БЯГАЙТЕ ” ще изпълни посочената команда в контейнера.
- “ ИЗЛОЖИ ” командата указва порта, където ще се слуша контейнерът.
- “ CMD ” указва изпълнимите точки на контейнера.
Стъпка 2: Създайте програма Golang
След това създайте друг файл с име „ main2.go ' и поставете предоставената по-долу програма Golang, която отпечатва прост низ на порт ' 8080 ”:
основен пакет
импортиране (
'fmt'
'дневник'
'net/http'
)
манипулатор на функции ( в http.ResponseWriter, r * http.Заявка ) {
html := `
DOCTYPE html >
< html >
< глава >
< заглавие > Здравей Голанг ! заглавие >
< стил >
тяло {
Цвят на фона: #D2B48C;
}
.контейнер {
подравняване на текст: център;
подложка: 50px;
}
стил >
глава >
< тяло >
< див клас = 'контейнер' >
< h1 > Здравейте ! Добре дошли в урока за LinuxHint h1 >
див >
тяло >
html >`
w.Header ( ) .Комплект ( 'Тип съдържание' , 'текст/html' )
fmt.Fprint ( в , html )
}
основна функция ( ) {
http.HandleFunc ( '/' , манипулатор )
лог.Фатално ( http.ListenAndServe ( '0.0.0.0:8080' , нула ) )
}
Стъпка 3: Генериране на моментна снимка на контейнера
Сега генерирайте моментна снимка за контейнера от посочения по-горе Dockerfile. За тази цел първо отидете до директорията, където е създаден Dockerfile, като използвате „ cd <път до работната директория> ” команда:
След това генерирайте новото изображение на контейнера, като използвате дадената команда:
изграждане на докер -T golang-img.
Даденият резултат показва, че изображението е създадено според предоставения контекст на компилация.
Стъпка 4: Пренасочване на порта на хоста към порта на контейнера
Сега изпълнете контейнера и препратете хост порта към порта на контейнера за достъп до приложението за докеризиране извън контейнера на локална машина. За целта стартирайте „docker run –name
Тук „ -стр ” флагът се използва за публикуване на порта за изпълнение на контейнера на докер хоста:
Стъпка 5: Проверка
За проверка вижте работещите контейнери, като използвате „ докер ps ”:
докер псВ резултата по-долу контейнеризираното приложение слуша налични мрежови интерфейси ' 0.0.0.0 'на публикуван порт' 8080 ”. Това означава, че портът се препраща към работещото приложение на хост машината:
Сега стартирайте браузъра и отворете „ http://localhost:8080/ ” и проверете дали техниката за препращане на портове е приложена или не и дали контейнеризираното приложение е достъпно извън контейнера в хост системата:
Тук успешно препратихме порта на хоста към порта на контейнера и приложението е достъпно на хоста на докера.
Как да препратите порт в Docker с помощта на Docker Compose
За да препрати порта на контейнера към хоста за достъп до контейнеризираното приложение извън контейнера, потребителят може да използва „ порт ” във файла за създаване на yaml. Docker compose е Docker услуга, която ни позволява да изпълняваме различни услуги и приложения в различни контейнери. Използвайки ' docker-compose.yml ”, потребителят може също така да препрати порта на контейнера към хост машината и да има връзка на приложението с външния свят.
Вижте процедурата по-долу за илюстрации.
Стъпка 1: Направете Compose File
Първо, генерирайте файл с име „ docker-compose.yml ” и добавете следното съдържание към файла:
версия: '3'услуги:
уеб:
изграждане: .
портове:
- 8080 : 8080
В горния фрагмент „ пристанища ” се използва за свързване на хоста към порта на контейнера. Тук първата стойност е портът на хоста, а втората стойност е портът на контейнера.
Стъпка 2: Стартирайте приложението
След като посочите инструкциите във файла за композиране, стартирайте приложението в контейнер, като използвате „ докер-съставяне ” команда:
докер-съставяне
Стъпка 3: Проверка
За потвърждение избройте контейнерите за композиране, като използвате „ docker-compose ps ” команда:
докер-съставяне пс -а
За да проверите дали контейнерът е достъпен на хост машината, отворете „ http://localhost:8080/ ” URL. Тук можете да видите, че ефективно сме препратили порта на контейнера на хоста:
Как да препратите порт към конкретна мрежа
За да препрати порт на контейнер към конкретна мрежа, потребителят трябва да посочи мрежата, в която иска да има достъп до контейнера, като използва „ – мрежа ” опция. Вижте дадените стъпки за демонстрация.
Стъпка 1: Създайте мрежа
Създайте нова мрежа, като използвате „ docker мрежа създаде
За да видите Docker мрежите, използвайте „ докер мрежа ls ” команда:
докер мрежа lsЕто, ние успешно създадохме ' mygo-мрежа ', който използва' мост ” шофьор:
Стъпка 2: Карта на мрежата
За да стартирате и получите достъп до контейнера в конкретната мрежа, като използвате техниката за пренасочване на портове, използвайте командата по-долу:
докер изпълнение -стр 8080 : 8080 --мрежа mygo-мрежа golang-imgВ дадената команда „ -стр ” публикува контейнера на определен порт на определената мрежа. Тук „ – мрежа ” се използва за дефиниране на докер мрежата:
За проверка отново отворете „ http://localhost:8080 ” и проверете дали контейнерът е достъпен в посочената мрежа или не:
Горният резултат показва, че ние ефективно сме препратили порта на контейнера в конкретна мрежа.
Забележка: Докато използва мрежата „хост“, потребителят не трябва да публикува порта от контейнер към хост, като използва „ -стр ' или ' – публикуване ” опция.
Пренасочване на порт към конкретна мрежа с помощта на Docker Compose
Добавете следния фрагмент в „ docker-compose.yml ” файл. Във фрагмента по-долу „ мрежи ” се използва за указване на мрежата:
версия: '3'услуги:
уеб:
изграждане: .
портове:
- 8080 : 8080
Сега стартирайте приложението в контейнер, като използвате „ докер-съставяне ” команда:
докер-съставяне
Разгледахме методите за пренасочване на портове в Docker.
Заключение
За да препрати порта в Docker за достъп до приложението за dockerize извън контейнера, потребителят може или да използва „ -стр ' или ' – публикуване ” опция в „ докер изпълнение ' или потребителят може да използва ' пристанища ” във файла за композиране на Docker. За да получи достъп до контейнера в конкретна мрежа, потребителят може да препрати порта на контейнера в мрежа, като използва „ –мрежа <мрежа> ” опция. Този блог демонстрира техниките за препращане на портове в Docker.