학습주제
학습내용
세번째 실습 mySQL을 받아서 도커 컨테이너로 실행. mysql 쉘로 로그인하는 예
엔진 실행
터미널 오픈
폴더 만들어서
이미지를 받는다
도커 허브에서 다운로드
docker pull mysql/mysql-server:8.0
오피셜이 아니라 네임스페이스가 앞에 붙는다
설치됨
이미지로 컨테이너 실행
docker run --name=mysql_container mysql/mysql-server:8.0
이때 --name옵션 이렇게 실행된 도커 컨테이너 ID로 이름을 넣어줄 수 있음
나중에 winpty docker exec -it mysql_container sh 이렇게 docker ps로 일일히 찾지 않아도 되게 함
현재 mysql 서버가 돌아가는 중
이때 mysql이 임시로 만들어놓은 계정으로 로그인해야하는데 이게 컨테이너 로그로 남아있음
winpty docker logs mysql_container 2>&1 | grep GENERATED
GENERATED 키워드 라인이 들어가있는게 뭐가 있는지 출력시킴.
패스워드를 찾아서 클립보드로 복사하고
winpty docker exec -it mysql_container mysql -uroot -p
쉘을 사용한다고 선언. 루트 유저로 선언 -p로 패스워드를 직접 입력하겠다.
run - 새로운 컨테이너를 실행
exec - 이미 실행된 컨테이너를 대상으로 함
왜 나는 안뜨지
모든 로그를 보니 정상적으로 뜬다
내가 검색을 잘 못한거 같다
와...
로그를 전체로 출력했을 때 "GENERATED"가 포함된 행이 나타난 것을 보니, 해당 행이 실제로 존재하는 것은 확실합니다. 그런데 grep "GENERATED"를 사용했을 때 아무것도 출력되지 않는다는 것은 일반적으로는 이상한 점입니다.
그러나 이 경우에는 문제의 원인이 'winpty'일 가능성이 있습니다. 'winpty'는 윈도우즈 시스템에서 명령어를 실행할 때 종종 사용하는 툴로, 터미널 입력/출력을 제어하기 위해 사용합니다. 'winpty'를 사용하면 터미널과 프로그램 사이에서 데이터의 흐름이 변경될 수 있습니다.
따라서 이 문제를 해결하려면, 아마도 'winpty'를 사용하지 않고 docker logs mysql_container 2>&1 | grep "GENERATED"를 직접 실행해 보시는 것이 좋을 것 같습니다.
winpty가 도대체 뭘까..
winpty'는 Windows 시스템에서 Linux 스타일의 터미널 인터랙션을 지원하기 위해 사용하는 도구입니다. 이는 주로 인터랙티브 쉘 세션, TTY 장치 요구, 표준 입력을 통한 비밀번호 입력 등에서 필요합니다.
그런데 'winpty'를 사용하면 명령어의 출력이 약간 변경될 수 있고, 이는 파이프(pipe)를 통해 데이터를 전달할 때 문제를 일으킬 수 있습니다. 따라서 웬만하면 'winpty'를 사용하지 않는 것이 좋습니다.
'winpty'를 사용해야 하는 경우는 다음과 같습니다:
Linux에서 실행되는 명령어를 Windows의 커맨드 프롬프트나 PowerShell에서 실행하려 할 때. 예를 들어, 'docker run -it ubuntu bash'와 같은 명령어를 실행하려면 'winpty'를 사용해야 합니다.
명령어가 표준 입력을 통해 비밀번호를 입력받아야 하는 경우. 예를 들어, 'mysql -u root -p'와 같은 명령어는 비밀번호를 표준 입력을 통해 입력받으므로 'winpty'를 사용해야 합니다.
그러나 위와 같은 경우가 아니라면, 'winpty'를 사용하지 않는 것이 일반적으로는 좋습니다. 'winpty'는 명령어의 출력을 변경할 수 있으므로, 파이프나 리다이렉션을 사용하여 데이터를 전달할 때는 특히 'winpty'를 사용하지 않는 것이 좋습니다.
쉘, 비밀번호 입력 외에는 쓰지 않기
그래서 docker compose up --build 같은건 그냥 했구나.. 이렇게 하나 또 배워간다.
winpty docker exec -it mysql_container mysql -uroot -p
접속 성공함
비밀번호 바꾸라고 하네 정식 패스워드로 바꿈.
ALTER USER root@localhost IDENTIFIED BY 'MeadowoodDr9$';
use mysql;
로 mysql쓰겠다 선언
docker run --name="컨테이너이름" ps로 안찾아도 됨
docker logs
container 쪽에서 생된되 스탠다드아웃, 스탠다드에러단 로그를 읽어옴
--follow를 쓰면 계속 스트리밍됨.
적당한 디렉토리로 이동
cd mysql
docker pull mysql/mysql-server:8.0
다소 시간이 걸림
이 이미지를 컨테이너로 실행
docker run --name=mysql_container mysql/mysql-server:8.0
컨테이너 ID를 부여함 exec쓸 때 ps로 알아낼 필요 없어짐.
로그들이 뜨면서 실행됨. 중간에 root 비밀번호 뜨는것도 보임.
루트 계정의 비밀번호를 찾아야함 이때 winpty 사용하면 에러남
비밀번호 복사 run, exec 구분하기
docker exec -it mysql_container mysql -uroot -p
mysql 쉘을 실행, 루트유저로 접속
이렇게 쓰면 -p로 직접 비밀번호를 받음.
비밀번호 입력
로그인 성공
show database;
치면 비밀번호 바꾸라고 함
alter user로 비밀번호 변경
show database;
use mysql;
show tables;
테이블 목록이 보일것임
도커로 실행해서 써볼 수 도 있음.