네트워크 캠퍼스/Docker

240126 도커(idex.html, nginx 이미지 생성, MySQL 컨테이너 생성/파라미터 전달, DB엔진 워크벤치로 다루기)

gayeon_ 2024. 1. 26. 17:15

index.html을 생성해 nginx에 적용해보기

어제 다운받은 nginx의 메인페이지를 변경해볼 것이다.

 

$ cd

로 현재 유저 폴더로 이동한 상태에서

 

$ mkdir 폴더명 && cd $_

를 입력해 바로 해당 폴더로 이동한다.

 

$ vi index.html

을 이용해 마크업을 생성한 후 아무거나 작성한다.

 

예시

<h1>Hello docker container!</h1>

 

이제 호스트에 작성한 이 파일을 nginx의 index.html로 교체해야 한다.

 

호스트에서 컨테이너로 파일을 보내는 방법은

바인드마운트, 볼륨마운트 등의 방법이 있지만

 

우선 현재는 docker cp 명령어로 진행할 것이다.

 

nginx 서버는 /usr/share/nginx/html/ 경로에 해당 파일을 저장한다.

 

$ docker cp 파일명 컨테이너명:/usr/share/nginx/html/index.html

 

위와 같이 작성하면

현재 작업폴더에서 복사할 파일을 컨테이너의 해당 경로로 복사해준다.

 

 

갱신을 완료했다면 해당 서버에 접속해서 내용이 바뀌는 것과

호스트의 파일을 컨테이너 내부로 전달할 수 있다는 사항을 확인해주면 된다.

 

참고) ip 확인하기

 

 

 

 

 

 

갱신한 nginx 이미지 만들어보기

이제 Dockerfile을 생성해서 직접 이미지를 만들어볼 것이다.

 

 

$ vi Dockerfile

을 실행해서 도커파일을 만들어준다.

 

FROM nginx:1.23.1-alpine # 어떤 이미지 위에 갱신할 파일을 올릴지
COPY index.html /usr/share/nginx/html/index.html # 작업중인 nginx서버에 파일 갱신
EXPOSE 80 # 80번 포트 노출
CMD ["nginx","-g","daemon off;"] # nginx -g daemon off; 구문 실행

 

해당 Dockerfile에는 위와 같이 스크립트를 작성한다.

 

어떤 OS위에 어떤 파일을 올릴지 결정하고, 노출포트를 결정한 다음

어떤 실행구문을 실행할지 지정하면 된다.

 

먼저 복사해주고 싶은 파일인 index.html과 Dockerfile이 같은 경로에 있게 둔 다음

 

$ docker build -t 이미지명(지정하기):버전명(지정하기) .

 

위 명령어를 사용하면 먼저 로컬에 이미지를 설치해준다.

 

$ docker images

 

 

위 명령어로 생성된 이미지를 확인해보고 run 등으로 실행까지 해보면 된다.

 

 

포트바인딩 및 run을 한 후 

hostip:8001로 접속하면

 

 

 

위와 같이 이미지가 잘 생성된 것을 확인할 수 있다.

 

추후에는 dockerhub같은 원격 레포지토리에 업로드까지 하면

외부에서도 마음대로 받아다 사용할 수 있다.

 

 

MySQL 컨테이너 생성및 파라미터 전달 실습

이제 MySQL을 도커로 받아서 처리해볼 것이다.

 

MySQL은 환경변수등이 중요하기때문에 공식문서를 보고 진행할 것이다.

 

$ docker pull mysql:5.7-debian

으로 이미지를 받아준다.

 

$ docker run -it -e MYSQL_ROOT_PASSWORD=초기비번 mysql:5.7-debian /bin/bash

 

위와 같이 ROOT비번을 -e 옵션으로 환경변수 처리해서 넘겨줘야 작동하는데

 

도큐먼트를 먼저 읽어보고 해당 내역을 확인하는게 제일 좋다.

 

다 처리했다면 아마 리눅스에서 루트계정 제어창으로 넘어갔을 것이다.

 

 

# cat /etc/os-release

 

를 입력해서 버전을 확인한다.

debian만 실행된 상태이다.

mysql 컨테이너만 올라간 상황이라 아직은 mysql이 실행되지 않은 상태이다.

 

이제 MySQL 데몬을 기동해서 외부에서 접속가능한 상태로 만들어줄 것이다.

 

# /etc/init.d/mysql start

mysql이 실행된 상태

 

이제 기동된것을 확인했다면

 

# mysql -uroot -p

 

를 입력하면 말그대로 root계정의 비번을 입력해서 접속하겠다는 이야기이고

아까 환경변수에서 설정한 비번을 넣어주면 접속이 완료된다.

 

 

 

테이블 조회, 생성 등을 해서 데이터 입출력을 추가로 진행해보면 된다.

 

 

테이블 생성 후 값을 넣어준 뒤

 

 

테이블 내부를 확인하면 잘 생성되어있다.

 

 

exit으로 빠져나와 docker ps -a로 확인해보면 mysql이 정상종료되었다는 것을 볼 수 있다.

 

exit으로 빠져나오면 docker run으로 실행하면 새로운 컨테이너를 만들어서

기껏 돌리고있던 컨테이너를 중지시키기 때문에

 

$ docker start id나컨테이너명

형식으로 재시작을 해줘야 한다.

 

그리고 그와 더불어서 start로 실행한 경우는

$ docker exec -it 아이디나컨테이너명 bash

를 쳐서 해당 인스턴스의 bash창으로 진입해야 다시 명령을 내릴 수 있으니 주의해야 한다.

 

또한 MySQL 데몬은 현 시점에서는 계속 새로 켤 때마다 마찬가지로 새로 실행해줘야 한다.

 

MySQL 재시작 과정

 

 

컨테이너로 띄운 DB엔진 워크벤치로 다뤄보기

이제 마리아디비를 이용해볼 것이다.

 

단, CLI환경도 좋지만 워크벤치로도 많이들 다루기 때문에

이를 감안해서 워크벤치로 한 번 사용할 것이다.

 

먼저 마리아디비 이미지를 받고 실행까지 한다.

 

$ docker run --name mariadb -e MYSQL_ROOT_PASSWORD=비번 -d \\
-e MARIADB_DATABASE=item -p 3306:3306 mariadb:10.2

 

위 구문은 마리아디비를 실행하며 DB에 tiem이라는 DB도 같이 생성하는 구문이다.

 

워크벤치는 오라클 사이트에서 다운받거나 혹은 DBeaver 같은 오픈소스를 써도 된다.

 

DBeaver를 사용할 것이다.

 

 

먼저 마리아디비의 데몬을 실행해야 한다.

 

# /etc/init.d/mysql start

 

 

그리고 루트계정으로 로그인해야하므로 해당 구문을 작성한다.

 

# mysql -uroot -p

 

 

 

그리고 아까 만든 DB등이 있는지 조회해서 워크벤치 접속을 해볼 것이다.

 

새로운 커넥션을 생성하고

 

접속 유형은 SSH로 잡아 먼저 도커 인스턴스로 들어간 다음

 

내부 주소인 ip 주소를 얻어내 마리아디비로 다시 연결하면 된다.

 

 

SSH 말고 Main으로 실습했다.

 

$ docker inspect mariadb | grep -i ipa

등을 이용해 mariadb의 내부아이피 주소를 얻어내서 해당 작업을 진행하면 된다.

 

단 ssh 접속시 인증서 문제가 발생하므로

 

c:\users\계정명\.ssh

 

폴더 내부에 보면 인증서 파일이 있고, 그걸 지워줘야 접속이 된다.

 

 

이미지 삭제

이미지는 rmi 명령어로 삭제한다.

이미지를 기반으로 돌고 있는 컨테이너가 하나라도 있으면 삭제되지 않는다.

ps, ps -a를 해서 동작되고 있는 컨테이너를 모두 stop 후 rm 했다.

 

 

 

그 후 docker rmi rockylinux/rockylinux, docker rmi 9710(bookworm-slim의 아이디 앞 네자리)

명령어로 rockylinux/rockylinux와 bookworm-slim의 이미지를 삭제했다.

 

 

삭제 전 docker images

 

 

 

삭제 후 docker images

 

rockylinux/rockylinux와 bookworm-slim 이미지가 잘 삭제되었다.