Docker tomcat, MySQL 환경 구성
실습 환경 참고
OS = CentOS 7
docker version :1.13.1
1. Docker tomcat 환경 만들기
1.1. tomcat 8 이미지 다운
[ 명령어 ]
docker pull tomcat:8
docker images
[ 결과 ]
1.2. docker Tomcat 8 container 실행
[ 명령어 ]
docker run -d -i -t ---name iksoonTomcatTest -p 8081:8080 tomcat:8
[ 명령 옵션 설명 ]
-d
백그라운드에서 실행
-i
--interactive=false 옵션과 동일
표준 입출력 stdin을 활성화하며 컨테이너와 연결되어있지 않더라도 표준 입력을 유지함
-t
--tty=false 옵션과 동일
TTY 모드를 사용 bash를 사용하려면 이 옵션을 설정해야 함
이 옵션을 설정하지 않으면 명령어는 입력할 수 있지만
결과가 표시되지 않음
-p
포트 포워딩 설정
docker 가 설치되어 있는 OS에 8081 포트로 들어오면
docker container의 8080 포트로 넘겨줌
--name
컨테이너 이름 설정
[ 상태 ]
[ 컨테이너 동작 확인 명령어 ]
docker ps
1.3. tomcat 기본 페이지 접속
외부에서 접속하는 주소 : docker 가 설치되어있는 서버의 ip주소:8081
docker 가 설치되어있는 서버에서 접속하는 주소 : localhost:8081
[결과]
404 오류 발생
1.4. 결과를 알아보기 위해 컨테이너에 bash shell로 접속
[ 명령어 ]
docker exec -it 7bf3f0a8aaac /bin/bash
[ 명령 옵션 설명 ]
-i
--interactive=false 옵션과 동일
표준 입출력 stdin을 활성화하며 컨테이너와 연결되어있지 않더라도 표준 입력을 유지함
-t
--tty=false 옵션과 동일
TTY 모드를 사용 bash를 사용하려면 이 옵션을 설정해야 함
이 옵션을 설정하지 않으면 명령어는 입력할 수 있지만
결과가 표시되지 않음
df3ea011ce63
컨테이너 ID
/bin/bash
컨테이너의 /bin/bash를 실행
[ 상태 ]
[ 접속해보면 vi, ifconfig 등 명령어를 사용할 수 없음 명령어를 사용하기 위해서는 설치해야 함 ]
Container에서 필요한 tool 설치 방법 제공
이유 : 기본적인 bash 쉘만 제공하기 때문
( 설치 방법 )
apt-get update
apt-get install vim
참고 : centos 이미지도 apt-get을 사용함
[ docker exec 접속 오류 해결법 ]
접속하여 tomcat shutdown.sh 실행하면 container 가 강제 종료됨
오류 발생
그 후 docker start iksoonTomcatTest로 container 시작하려고 하는데 오류 발생
오류명
Error response from daemon: driver failed programming external connectivity on endpoint iksoonTomcatTest (9d56432dfc5b0aeeed6dc8d92ecbd84767856f525f807be4413f70819dd7f84c): (iptables failed: iptables --wait -t nat -A DOCKER -p tcp -d 0/0 --dport 8080 -j DNAT --to-destination 172.17.0.2:8080 ! -i docker0: iptables: No chain/target/match by that name.
원인
docker container를 실행한 후
혹시 몰라서 firewalld를 stop 했는데
ipTables에 Docker Chain설정이 없어져서 발생함.
해결법
firewalld를 다시 실행시키니 해결됨
그 외 해결법으로는
iptables에 docker chain 추가하면 됨
1.5. tomcat 기본 페이지 접속 404 원인 분석 및 해결법
[ 원인 ]
tomcat home 경로의 webapps 폴더가 가보면 아무것도 없고
webapps.dist 폴더에 기본 페이지 소스가 있음
[ 해결법 ]
1.5.1. webapps.dist 디렉터리의 모든 내용을 webapps 디렉터리로 복사
tomcat home기본 경로 : /usr/local/tomcat
cp -r * ../webapps
1.5.2. tomcat 종료
tomcat home/bin/
./shutdown.sh 실행
결과 : docker tocmat 컨테이너가 종료됨
1.5.3. 컨테이너 시작
docker ps -a 명령으로 컨테이너 id 확인
docker start da2135bfdd5c 명령으로 컨테이너 시작
1.5.4. 확인
1.6. tomcat test page를 띄워보기 위해 tomcat 환경 설정
톰켓 root 폴더를 tomcat_home경로의 testHome 디렉터리로 설정
1.6.1. 톰캣 컨테이너 접속
docker exec -it 7bf3f0a8aaac /bin/bash
1.6.2. /usr/local/tomcat/경로에 testHome 디렉터리 생성
mkdir testHome
1.6.3. /usr/local/tomcat/conf/server.xml 설정 파일 수정
container에 vi 가 설치 안되어 있어서 설치해줘야 함
설치방법 :
- apt-get update
- apt-get install vim
<Host> </Host> 구문 안에
<Context path="" docBase="/usr/local/tomcat/testHome" reloadable="true" />
설정을 넣어줌
아래 이미지는 reloadable 설정에 오타가 있음 == 를 = 로 바꿔야 함
아래에서 해당 오타에 관한 오류 해결법 설명함
1.6.4. 다음 작업을 위해 컨테이너에서 빠져나옴
빠져나오는 단축키 : ctrl + p, ctrl +q
1.7. 준비한 test page를 Tomcat 컨테이너로 전송
미리 준비해놓은 test page 코드를 docker tomcat 컨테이너로 전송
[ 명령어 ]
docker cp iksoon_test/ iksoonTomcatTest:/usr/local/tomcat/testHome
cp 명령 시 파일, 디렉터리 구분 없이 복사
1.8. container 재시작
[ 명령어 ]
docker restart iksoonTomcatTest
[ 컨테이너가 시작이 안 되는 오류 발생 ]
컨테이너 로그를 확인해야 함
명령어 : docker logs -t da2135bfdd5c
[ 로그 분석 결과 ]
상위 server.xml 설정을 할 때
reloadable="true" 로 설정해야 하는데
오타로 reloadable== 로 ==을 2개 함
파일 수정이 필요
[ 해결법 ]
컨테이너에 있는 문제 있는 파일을 로컬로 가져옴.
docker cp da2135bfdd5c:/usr/local/tomcat/conf/server.xml .
수정 후 다시 전송
docker cp server.xml da2135bfdd5c:/usr/local/tomcat/conf/server.xml
컨테이너 시작
docker start da2135bfdd5c
1.9. 준비한 Test 페이지 접속 결과 확인
정상
1.10. tomcat 실행 중인 container를 images로 변환
[ 명령어 ]
docker commit -m "test v1" -a "iksoon@test.com" "iksoonTomcatTest" test:1.0.0
commit 명령어로 container를 images 파일로 변환
[ 명령 옵션 설명]
-m
커밋에 대한 설명
git의 commit -m과 같다고 보면 됨
-a
커밋한 사용자에 대한 설명을 남김
로그 메시지 설정
"iksoonTomcatTest"
image로 변환할 현재 가동 중이 container 이름 혹은 ID를 넣어줌
test:1.0.0
이미지 Repository 이름 설정과
Tag 설정
위는
Repository = test
tag = 1.0.0
[ 현재 실행 중인 container에서 원본 container와 비교하여 내가 변경한 작업 ]
docker diff "컨테이너 이름"
2. docker MySQL test 환경 만들기
2.1. MySQL 5.7 이미지 다운
[ 명령어 ]
docker pull mysql:5.7
2.2. docker MySQL 5.7 container 실행
[ 명령어 ]
docker run -d -i -t -e MYSQL_ROOT_PASSWORD=qwer1234 --name iksoonMysqlTest -p 4306:3306 mysql:5.7
[ 명령 옵션 설명 ]
-d
백그라운드에서 실행
-i
--interactive=false 옵션과 동일
표준 입출력 stdin을 활성화하며 컨테이너와 연결되어있지 않더라도 표준 입력을 유지함
-t
--tty=false 옵션과 동일
TTY 모드를 사용 bash를 사용하려면 이 옵션을 설정해야 함
이 옵션을 설정하지 않으면 명령어는 입력할 수 있지만
결과가 표시되지 않음
-e
-env=[]: 옵션과 동일
컨테이너에 환경 변수를 설정
보통 설정 값이나 비밀번호를 전달할 때 사용
-e MYSQL_ROOT_PASSWORD=examplepassword
-p
포트 포워딩 설정
docker 가 설치되어 있는 OS에 8081 포트로 들어오면
docker container의 8080 포트로 넘겨줌
--name
컨테이너 이름 설정
2.3. MySQL 접속
2.3.1. MYSQL Container 접속
명령어 : docker exec -it 7bf3f0a8aaac /bin/bash
2.3.2. MYSQL 접속
명령어 : mysql -u root -p
test query 작성
create database dockerdb;
create table test(name varchar(10), testdata varchar(50) );
insert into test values('iksoon', 'docker example test');
2.4. MySQL 외부접속 설정
만약 외부 접속이 안될 시 사용
외부에서 mysql을 접속이 안됨
접속하기 위해서는 권한 설정과 bind-address 설정을 해야 함
2.4.1. MYSQL Container 접속
명령어 : docker exec -it 7bf3f0a8aaac /bin/bash
2.4.2. vim 설치
apt-get update
apt-get install vim
3. mysqld.cnf 파일 수정
cd /etc/mysql/mysql.conf.d/
vi mysqld.cnf
에서
bind-address를 0.0.0.0으로 설정해줘야 함
4. mysql에서 명령어 실행
GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED by 'qwer1234';
FLUSH PRIVILEGES;
2.5. MySQL 외부 접속해보기
HeidiSQL 툴로 접속
완료
3. Tomcat Mysql 연동 페이지 결과
결과 : 정상
제 글을 복사할 시 출처를 명시해주세요.
글에 오타, 오류가 있다면 댓글로 알려주세요! 바로 수정하겠습니다!
'클라우드 > Docker' 카테고리의 다른 글
06. Docker Private Registry IP가 아닌 Domain으로 접속하기 (0) | 2020.09.15 |
---|---|
05. Docker Private Registry 암호 설정 (2) | 2020.09.15 |
04. Docker Private Registry 구성하기 (0) | 2020.09.15 |
03. Docker Hub에 image push 하기 (0) | 2020.08.30 |
01. Docker (0) | 2020.08.30 |