டோக்கர் கொள்கலன்களில் இருந்து லோக்கல் ஹோஸ்ட் சேவைகளை அணுகுதல்
ஹோஸ்ட் கணினியில் MySQL நிகழ்வை இணைக்க வேண்டியிருக்கும் போது டோக்கர் கொள்கலனுக்குள் Nginx ஐ இயக்குவது சவாலானதாக இருக்கும், குறிப்பாக MySQL லோக்கல் ஹோஸ்டுடன் மட்டுமே பிணைக்கப்படும் போது. நிலையான நெட்வொர்க்கிங் முறைகளைப் பயன்படுத்தி MySQL சேவையை நேரடியாக அணுகுவதை இந்த அமைப்பு தடுக்கிறது.
இந்த இடைவெளியைக் குறைப்பதற்கான பல்வேறு தீர்வுகளை இந்தக் கட்டுரை ஆராய்கிறது, டோக்கர் கொள்கலன்கள் மற்றும் ஹோஸ்டின் லோக்கல் ஹோஸ்டில் இயங்கும் சேவைகளுக்கு இடையே தடையற்ற இணைப்பை அனுமதிக்கிறது. பொதுவான முறைகள் ஏன் குறையக்கூடும் என்பதை நாங்கள் விவாதிப்போம் மற்றும் விரும்பிய இணைப்பை அடைவதற்கான நடைமுறை படிகளை வழங்குவோம்.
| கட்டளை | விளக்கம் |
|---|---|
| docker network create --driver bridge hostnetwork | பிரிட்ஜ் டிரைவருடன் தனிப்பயன் டோக்கர் நெட்வொர்க்கை உருவாக்குகிறது, கொள்கலன்களை ஒரே நெட்வொர்க்கில் தொடர்பு கொள்ள அனுமதிக்கிறது. |
| host_ip=$(ip -4 addr show docker0 | grep -oP '(? | ஹோஸ்டின் docker0 இடைமுகத்தின் IP முகவரியைப் பிரித்தெடுக்கிறது, இது கொள்கலனில் இருந்து ஹோஸ்ட் சேவைகளுடன் இணைக்கப் பயன்படுகிறது. |
| docker exec -it nginx-container bash | நேரடி கட்டளை வரி அணுகலுக்காக இயங்கும் Nginx கொள்கலனுக்குள் ஒரு ஊடாடும் பாஷ் ஷெல்லை இயக்குகிறது. |
| mysql -h $host_ip -u root -p | பிரித்தெடுக்கப்பட்ட IP முகவரியைப் பயன்படுத்தி ஹோஸ்ட் கணினியில் இயங்கும் MySQL சேவையகத்துடன் இணைக்க Nginx கொள்கலனுக்குள் கட்டளை பயன்படுத்தப்படுகிறது. |
| networks: hostnetwork: external: true | வெளிப்புறமாக உருவாக்கப்பட்ட டோக்கர் நெட்வொர்க்கைப் பயன்படுத்த டோக்கர் கம்போஸில் உள்ளமைவு. |
| echo "server { listen 80; location / { proxy_pass http://host.docker.internal:3306; } }" >echo "server { listen 80; location / { proxy_pass http://host.docker.internal:3306; } }" > /etc/nginx/conf.d/default.conf | ஹோஸ்ட் இயந்திரத்திற்கு MySQL கோரிக்கைகளை ப்ராக்ஸி செய்ய புதிய Nginx உள்ளமைவை எழுதுகிறது. |
| nginx -s reload | புதிய உள்ளமைவு மாற்றங்களைப் பயன்படுத்த Nginx சேவையை மீண்டும் ஏற்றுகிறது. |
ஹோஸ்ட் சேவைகளை அணுக Docker மற்றும் Nginx ஐ உள்ளமைக்கிறது
ஹோஸ்டில் இயங்கும் MySQL நிகழ்வுடன் Nginx கண்டெய்னரை இணைக்க, முதலில் நாம் ஒரு பிணைய பாலத்தை நிறுவ வேண்டும். கட்டளை docker network create --driver bridge hostnetwork இந்த தனிப்பயன் நெட்வொர்க்கை உருவாக்குகிறது, அதே நெட்வொர்க்கில் உள்ள கொள்கலன்களுக்கு இடையே தொடர்பு கொள்ள உதவுகிறது. இந்த நெட்வொர்க்கில் MySQL மற்றும் Nginx கொள்கலன்களைப் பயன்படுத்தி தொடங்குவோம் docker run --name mysql-container --network hostnetwork -e MYSQL_ROOT_PASSWORD=root -d mysql:latest மற்றும் docker run --name nginx-container --network hostnetwork -d nginx:latest, முறையே. இந்த அமைப்பு கொள்கலன்கள் ஒன்றையொன்று கண்டறிந்து தொடர்பு கொள்ள அனுமதிக்கிறது. Nginx இலிருந்து MySQL உடன் இணைக்க, எங்களுக்கு ஹோஸ்டின் IP முகவரி தேவை, அதைப் பெறலாம் host_ip=$(ip -4 addr show docker0 | grep -oP '(?<=inet\s)\d+(\.\d+){3}'). இந்த கட்டளை ஹோஸ்டில் உள்ள docker0 இடைமுகத்தின் IP முகவரியைப் பிடிக்கிறது.
அடுத்து, நாங்கள் பயன்படுத்துகிறோம் docker exec -it nginx-container bash Nginx கொள்கலனில் ஒரு ஊடாடும் ஷெல் திறக்க. இங்கிருந்து, நாம் MySQL இணைப்பைப் பயன்படுத்தி தொடங்கலாம் mysql -h $host_ip -u root -p, எங்கே $host_ip ஹோஸ்டின் ஐபி முகவரி. மாற்றாக, டோக்கர் கம்போஸைப் பயன்படுத்துவது YAML கோப்பில் சேவைகள் மற்றும் நெட்வொர்க்குகளை வரையறுப்பதன் மூலம் செயல்முறையை எளிதாக்குகிறது. தி networks: hostnetwork: external: true சேவைகள் வெளிப்புறமாக உருவாக்கப்பட்ட நெட்வொர்க்கைப் பயன்படுத்துவதை உள்ளமைவு உறுதி செய்கிறது. இறுதியாக, ப்ராக்ஸி MySQL கோரிக்கைகளுக்கு Nginx ஐ உள்ளமைக்க, அதன் உள்ளமைவு கோப்பை நாங்கள் புதுப்பிக்கிறோம் echo "server { listen 80; location / { proxy_pass http://host.docker.internal:3306; } }" > /etc/nginx/conf.d/default.conf மற்றும் Nginx ஐப் பயன்படுத்தி மீண்டும் ஏற்றவும் nginx -s reload. ஹோஸ்டில் இயங்கும் MySQL நிகழ்வுக்கு கோரிக்கைகளை அனுப்ப இந்த அமைப்பு Nginx ஐ அனுமதிக்கிறது.
நெட்வொர்க் பிரிட்ஜ் வழியாக ஹோஸ்டின் MySQL உடன் டோக்கர் கொள்கலனை இணைக்கிறது
டோக்கர் நெட்வொர்க் அமைப்பிற்கான ஷெல் ஸ்கிரிப்ட்
# Create a Docker networkdocker network create --driver bridge hostnetwork# Run MySQL container with the created networkdocker run --name mysql-container --network hostnetwork -e MYSQL_ROOT_PASSWORD=root -d mysql:latest# Run Nginx container with the created networkdocker run --name nginx-container --network hostnetwork -d nginx:latest# Get the host machine's IP addresshost_ip=$(ip -4 addr show docker0 | grep -oP '(?<=inet\s)\d+(\.\d+){3}')# Connect to MySQL from within the Nginx containerdocker exec -it nginx-container bashmysql -h $host_ip -u root -p
Nginx மற்றும் Host இன் MySQL ஐ இணைக்க Docker Compose ஐப் பயன்படுத்துதல்
டோக்கர் கம்போஸ் YAML உள்ளமைவு
version: '3.8'services:nginx:image: nginx:latestcontainer_name: nginx-containernetworks:- hostnetworkmysql:image: mysql:latestcontainer_name: mysql-containerenvironment:MYSQL_ROOT_PASSWORD: rootnetworks:- hostnetworknetworks:hostnetwork:external: true
டோக்கர் நெட்வொர்க்கைப் பயன்படுத்தி ஹோஸ்ட் MySQL உடன் இணைக்க Nginx ஐ உள்ளமைக்கிறது
Nginx கட்டமைப்பு மற்றும் டோக்கர் நெட்வொர்க் கட்டளை
# Create a bridge networkdocker network create bridge-network# Run Nginx container with bridge networkdocker run --name nginx-container --network bridge-network -d nginx:latest# Run MySQL container on the host networkdocker run --name mysql-container --network host -e MYSQL_ROOT_PASSWORD=root -d mysql:latest# Update Nginx configuration to point to MySQL hostdocker exec -it nginx-container bashecho "server { listen 80; location / { proxy_pass http://host.docker.internal:3306; } }" > /etc/nginx/conf.d/default.confnginx -s reload
ஹோஸ்ட் உள்ளூர் சேவைகளுக்கு டோக்கர் கொள்கலன்களை இணைக்கிறது
டோக்கர் கொள்கலன்களில் பயன்பாடுகளை இயக்கும் போது, நெட்வொர்க் தனிமைப்படுத்தப்பட்டதன் காரணமாக ஹோஸ்டின் லோக்கல் ஹோஸ்டுடன் இணைக்கப்பட்ட சேவைகளை அணுகுவது சவாலானது. டோக்கரின் ஹோஸ்ட் நெட்வொர்க்கிங் பயன்முறையைப் பயன்படுத்துவது ஒரு பயனுள்ள அணுகுமுறையாகும். உடன் ஒரு கொள்கலனைத் தொடங்குவதன் மூலம் --network host விருப்பம், கொள்கலன் ஹோஸ்டின் நெட்வொர்க் ஸ்டேக்கைப் பகிர்ந்து கொள்கிறது, இது லோக்கல் ஹோஸ்ட்-பிவுண்ட் சேவைகளை நேரடியாக அணுக அனுமதிக்கிறது. இருப்பினும், இந்த பயன்முறை குறைவாக எடுத்துச் செல்லக்கூடியது மற்றும் Docker Swarm அல்லது Kubernetes போன்ற அனைத்து சூழல்களிலும் சரியாக வேலை செய்யாமல் போகலாம்.
மற்றொரு அணுகுமுறை டோக்கரின் உள்ளமைக்கப்பட்ட டிஎன்எஸ் தீர்வைப் பயன்படுத்துவதாகும். host.docker.internal. இந்த சிறப்பு DNS பெயர் ஹோஸ்டின் IP முகவரிக்கு தீர்வு காணும், இது ஹோஸ்டில் உள்ள சேவைகளுடன் தொடர்பு கொள்ள கொள்கலன்களை செயல்படுத்துகிறது. இந்த முறை நேரடியானது மற்றும் பிணைய நிர்வாகத்தின் சிக்கல்களைத் தவிர்க்கிறது. இருப்பினும், இது விண்டோஸ் மற்றும் மேக்கிற்கான டோக்கரில் மட்டுமே கிடைக்கிறது, லினக்ஸில் அல்ல. லினக்ஸ் பயனர்களுக்கு, தனிப்பயன் பிரிட்ஜ் நெட்வொர்க்கை உருவாக்குவது மற்றும் ரூட்டிங் விதிகளை கைமுறையாக உள்ளமைப்பது ஒரு சாத்தியமான தீர்வாகும். இது பயன்படுத்துவதை உள்ளடக்கியது ip மற்றும் iptables கொள்கலன் நெட்வொர்க்கிலிருந்து ஹோஸ்டின் லோக்கல் ஹோஸ்ட் இடைமுகத்திற்கு போக்குவரத்தை வழிநடத்த கட்டளைகள்.
ஹோஸ்ட் சேவைகளுடன் டோக்கர் கொள்கலன்களை இணைப்பது பற்றிய பொதுவான கேள்விகள்
- நான் எப்படி பயன்படுத்துவது --network host டோக்கரில் விருப்பம்?
- உங்கள் கொள்கலனை இயக்கவும் docker run --network host ஹோஸ்டின் நெட்வொர்க் ஸ்டேக்கைப் பகிர.
- என்ன host.docker.internal?
- இது ஒரு சிறப்பு DNS பெயராகும், இது ஹோஸ்டின் IP முகவரிக்கு தீர்வு காணும், Windows மற்றும் Mac க்கான Docker இல் கிடைக்கும்.
- நான் பயன்படுத்தி கொள்ளலாமா host.docker.internal லினக்ஸில்?
- இல்லை, இந்த அம்சம் Linux க்கான Docker இல் இல்லை.
- தனிப்பயன் பிரிட்ஜ் நெட்வொர்க்கை எப்படி உருவாக்குவது?
- பயன்படுத்தவும் docker network create --driver bridge my-bridge-network தனிப்பயன் பாலம் நெட்வொர்க்கை உருவாக்க.
- இதன் நோக்கம் என்ன iptables கட்டளையா?
- இது லினக்ஸ் கணினிகளில் நெட்வொர்க் பாக்கெட் வடிகட்டுதல் மற்றும் ரூட்டிங் விதிகளை நிர்வகிக்கிறது.
- டோக்கர் கண்டெய்னரில் இருந்து ஹோஸ்டில் உள்ள MySQL நிகழ்வை எவ்வாறு இணைப்பது?
- பயன்படுத்தவும் mysql -h host.docker.internal -u root -p விண்டோஸ்/மேக்கில் டோக்கருக்கு அல்லது லினக்ஸுக்கு ரூட்டிங்கை உள்ளமைக்கவும்.
- பயன்படுத்துவதற்கான வரம்புகள் என்ன --network host?
- இது பெயர்வுத்திறனைக் குறைக்கலாம் மற்றும் குபெர்னெட்ஸ் போன்ற சில இசைக்குழுக்களுடன் பொருந்தாது.
- MySQL தவிர மற்ற சேவைகளை ஹோஸ்டில் அணுக முடியுமா?
- ஆம், அதே முறைகளைப் பயன்படுத்தி, ஹோஸ்டில் இயங்கும் எந்தச் சேவையையும் நீங்கள் இணைக்கலாம்.
டோக்கரிடமிருந்து ஹோஸ்ட் சேவைகளை அணுகுவதற்கான இறுதி எண்ணங்கள்
Nginx கொள்கலனில் இருந்து ஹோஸ்டில் MySQL நிகழ்வை இணைப்பது பல்வேறு முறைகளை உள்ளடக்கியது, ஒவ்வொன்றும் அதன் சொந்த நன்மைகள் மற்றும் வரம்புகளுடன். ஹோஸ்ட் நெட்வொர்க்கிங், ஸ்பெஷல் டிஎன்எஸ் பெயர்கள் அல்லது தனிப்பயன் நெட்வொர்க் பிரிட்ஜ்களைப் பயன்படுத்தி, டோக்கர் கொள்கலன்கள் மற்றும் ஹோஸ்ட் சேவைகளுக்கு இடையேயான சுமூகமான தொடர்பை உறுதிசெய்து, இடைவெளியைக் குறைக்க முடியும். இந்த உத்திகளைப் புரிந்துகொண்டு செயல்படுத்துவதன் மூலம், பிணைய தனிமைப்படுத்தல் சவால்களை நீங்கள் சமாளிக்கலாம் மற்றும் உங்கள் டாக்கரைஸ் செய்யப்பட்ட சூழலில் வலுவான இணைப்புகளைப் பராமரிக்கலாம்.