데이터베이스 백엔드를 필요로 하는 웹 애플리케이션을 실행하려다가 설정 및 종속성 문제로 고민하신 적이 있으신가요? 걱정하지 마세요, Docker의 --link 옵션이 해결책이 될 수 있습니다.
저는 이것도 모르고 웹 서버 여러대 돌릴때 하나하나 설정하느라고 삽질좀 했습니다 ㅎㅎㅎ
하지만 ㅎㅎ 여러분은 저와 같은 삽질을 하지 않기 위해 알려드릴려구 해요.
그것은 바로 --link옵션 입니다 docker run할때 사용하면 됩니다.
def insertDB(k, t, c1, c2, r):
ret = []
db = pymysql.connect(host=wordhost, user='root',
port=3306 ,password='1234', charset='utf8', db='데이터베이스')
curs = db.cursor()
sqlInsert = """
REPLACE into 데이터베이스.crawlingnaverarticles2( keyword, title, contents, change_contents, registration_date, now_time) values( '{keyword1}' , '{title1}','{contents1}', '{contents2}', '{registration_date}', date_format(now(), '%Y%m%d%H%i%s') );
""".format(keyword1=k, title1=t, contents1=c1, contents2=c2, registration_date=r )
curs.execute(sqlInsert)
db.commit()
db.closes() # 2023.4.13일에 수정함
return ret
위의 이미지는 python 에서 mysql을 연동 및 insert하기 위한 코드 입니다.
이 이미지에서 주의 깊게 보셔야 할 부분은 바로
이 위에 이미지 부분입니다.
전 코드 : 전 코드에서 host는 임이의 숫자 입니다.
db = pymysql.connect(host=173.243.234.1, user='root',
port=3306 ,password='1234', charset='utf8', db='데이터베이스')
후 코드 :
db = pymysql.connect(host=master, user='root',
port=3306 ,password='1234', charset='utf8', db='데이터베이스')
자 여기서 바뀐점은? 정답 : host 정의 부분이죠
바로 이 부분이 핵심인것입니다. 여러개의 웹서버와 하나의 db서버로 통신할때 유용한 것입니다.
간략하게 장점에 대해 말하자면
1. 간단한 설정: --link 옵션을 사용하면 컨테이너 간의 연결이 자동으로 설정되므로 별도의 설정이 필요하지 않음
2. 높은 확장성: --link 옵션을 사용하면 여러 개의 동일한 서비스를 실행하는 컨테이너를 쉽게 추가할 수 있음.
예를 들어, MySQL 데이터베이스를 사용하는 웹 애플리케이션의 경우, 웹 애플리케이션 컨테이너를 여러 개 실행하여 동시에 많은 사용자 요청을 처리할 수 있음.
3. 유연성: --link 옵션을 사용하면 컨테이너 간의 네트워크 연결을 유연하게 구성할 수 있음.
예를 들어, 컨테이너에 별칭을 지정하여 컨테이너에 대한 더 구체적인 이름을 사용할 수 있음
4. 보안: --link 옵션을 사용하면 컨테이너 간의 네트워크 연결이 안전하게 유지됨.
컨테이너 간의 통신은 Docker에서 자동으로 보호되므로, 데이터베이스 백엔드와 웹 애플리케이션 간의 데이터 누출 등의 보안 문제를 방지할 수 있음
이 장점들을 다 세세하게 다~ 기억할 필요 없습니다. 그저 장점이 많다는것만 기억하면 되는거죠
이처럼 --link옵션은 두 개의 Docker 컨테이너를 연결하여 하나가 다른 하나의 네트워크 서비스에 액세스할 수 있도록 해줍니다.
MySQL 데이터베이스가 필요한 웹 애플리케이션의 경우, 웹 애플리케이션 컨테이너를 MySQL 컨테이너에 연결하고 웹 애플리케이션은 추가 구성 없이 MySQL 데이터베이스에 연결할 수 있다는 것이죠
예제 코드 -------------------------------------------------------------------------------------------------------python 코드 --
def insertDB(k, t, c1, c2, r):
ret = []
db = pymysql.connect(host=wordhost, user='root',
port=3306 ,password='1234', charset='utf8', db='데이터베이스')
curs = db.cursor()
sqlInsert = """
REPLACE into '데이터베이스'.crawlingnaverarticles2( keyword, title, contents, change_contents, registration_date, now_time) values( '{keyword1}' , '{title1}','{contents1}', '{contents2}', '{registration_date}', date_format(now(), '%Y%m%d%H%i%s') );
""".format(keyword1=k, title1=t, contents1=c1, contents2=c2, registration_date=r )
curs.execute(sqlInsert)
db.commit()
db.closes()
return ret
아래 코드 처럼 docker 웹 서버를 실행할때 지정한 host를 wordhost로 하면 되는 것이다
docker run -it --rm -p 0.0.0.0:[포트]:[포트]/tcp --name [컨테이너 이름] --link [실행되고 있는 mysql 컨테이너]:wordhost[지정한 host이름] [생성한 웹서버 이미지]
댓글