(이해를 위해 최대한 간단하게 작성하려 했고 그 과정에서 생략되거나 왜곡된 내용이 존재
할 수 있습니다. 또한 제가 이해한 내용이 틀렸을 수도 있다는 점
유의해 주세요!!)
자바
파일이 JVM
덕분에 OS 독립적인 환경을 구축할 수 있었던 것처럼 (https://velog.io/@qwerty1434/Java-Virtual-Machine), 도커 컨테이너
역시 어떤 OS든지 Docker
가 설치되어 있다면 실행이 가능한거 같음내가 이해한 도커: VM보다 가벼운 가상환경
내가 이해한 컨테이너와 이미지
- 이미지: 바탕화면에 있는 바로가기 아이콘 또는 프로그램 실행 버튼
- 컨테이너: 아이콘으로부터 실행된 실제 프로그램
- 이미지A를 불러와 컨테이너 A를 실행시키고, 컨테이너 A에서 x작업을 실행한 뒤
이 컨테이너를 다시 이미지화 해 이미지B를 생산할 수 있다.(레이어가 쌓이게 됨)
docker ps
실행중인 컨테이너 확인
docker ps -a
모든 컨테이너 확인
docker images
모든 이미지 정보 확인
docker run -d -it --name <컨테이너 이름> -p 로컬PC포트:도커_포트 이미지_이름:태그
컨테이너 생성
docker stop <컨테이너 이름>
컨테이너 멈추기
docker start <컨테이너 이름>
컨테이너 실행하기
docker exec -it <컨테이너_이름> /bin/bash
컨테이너 들어가기
service mysql start
mysql 실행
curl ident.me
내 ip주소 확인
1. 내 PC에서 이미지를 만듦
2. 해당 이미지를 도커hub에 올림
3. 서버 PC에 접속해 도커hub로부터 이미지를 받아와 실행함
docker pull ubuntu:18.04
명령어로 우분투 기본 이미지
를 받아옵니다.docker run -d -it -p 8080:8080 —-name <컨테이너 이름> ubuntu:18.04
명령어를 실행해 ubuntu:18.04
이미지를 바탕으로 <컨테이너 이름> 이라는 컨테이너를 생성합니다.docker ps
명령어를 통해 우리가 만든 컨테이너가 실행중임을 확인할 수 있습니다.docker exec -it <컨테이너 이름> /bin/bash
명령어를 입력합니다.윈도우 버전(>)
에서 우분투 버전(#)
으로 변경된 걸 확인할 수 있습니다.ubuntu:20.04
이미지를 기반으로 컨테이너를 실행했기 때문에 해당 컨테이너는 우분투 환경
입니다.우분투
를 기준으로 작성해 줘야 합니다.apt-get update
명령어로 설치 가능한 리스트
들을 최신화 해 줍니다.apt-get install -y sudo
: sudoapt-get install -y vim
: viapt-get install -y net-tools
: netstat (필요 없을듯?)apt-get install -y openjdk-8-jdk
: java 설치apt-get install -y gradle
: gradle 설치apt-get install -y git
: git 설치apt-get install -y nginx
: nginx 설치 (필요 없을듯?)apt-get install -y mysql-server
: mysql 설치18.04
라면 mysql은 5
버전이 설치됩니다. 우분투를 20.04
로 선택해 mysql을 로컬과 같은 8
버전으로 설치합시다.service mysql start
명령어로 mysql을 실행합니다.sudo /usr/bin/mysql -u root
명령어로 mysql에 접속합니다.mysql>
로 변경됐다면 접속에 성공했다는 뜻입니다.ALTER USER 'root'@'localhost' IDENTIFIED BY '루트 비밀번호';
를 입력합니다. // 따옴표(')
도 모두 동일하게 입력해 줘야 합니다CREATE USER '계정아이디'@'localhost' IDENTIFIED BY '계정 비밀번호';
를 입력합니다. 그리고 flush privileges
를 입력합니다.flush privileges;
: user 테이블의 값이 변경될 때 실행해야 하는 쿼리입니다.GRANT ALL PRIVILEGES ON <DB이름>.* to <계정 아이디>@localhost;
을 입력합니다. 그리고 flush privileges
를 입력합니다.CREATE DATABASE <데이터베이스 이름>
을 입력합니다.exit
명령어로 mysql에서 나갑니다.git clone <깃주소>
명령어로 자신의 서버 파일을 다운받아 옵니다.git clone -b <브랜치 이름> --single-branch <깃주소>
라고 명령어를 입력했습니다.cd
명령어와 ls
명령어를 적절히 활용해 gradle파일이 위치하는 곳
까지 이동합니다.gradle --debug build
명령어를 실행합니다.Permission denied
가 발생할 수 있습니다. git ls-tree HEAD
로 권한을 확인해보면 gradle
의 권한이 755가 아닌 644인걸 확인할 수 있습니다. chmod +x ./gradlew
명령어를 통해 권한을 변경해 줍니다../gradlew build
명령어가 성공했습니다.gradlew
와 gradle build
의 차이는 윈도우와 리눅스로 알고 있습니다. 하지만 도커의 컨테이너는 EC2와 로컬PC에 무관하게 모두 Linux인데 왜 이런 차이가 발생할까요??./gradle build
명령어가 성공햇습니다.cd
명령어와 ls
명령어를 적절히 활용해 .jar
파일이 있는 위치로 이동합니다.java -jar 파일이름.jar
명령어를 통해 서버를 실행합니다.nohup
으로 돌릴 계획입니다.chmod 755 파일이름.jar
명령어를 입력해 파일 권한을 변경해 줍니다.exit
명령어로 컨테이너 밖으로 나옵니다.docker commit -a "작성자" -m "커밋_메시지" 이미지화_할_컨테이너_이름 이미지_이름:태그
명령어로 B과정에서 설정한 컨테이너를 이미지로 만들어 줍니다.docker ps
명령어 또는 docker ps -a
명령어를 통해 컨테이너 이름을 확인할 수 있습니다.docker images
를 통해 해당 이미지_이름:태그
가 잘 생성되었는지 확인합니다.여기까지가 실습1단계(내 PC에서 이미지 만들기) 입니다.
계속해서 내 PC에서
[https://hub.docker.com/
이라는](https://hub.docker.com/이라는) 도커허브에 접속합니다.Create a Repository
에서 Name 및 Description을 입력하고 Create를 누릅니다.허브의 이름과 이미지의 이름이 동일해야 합니다
qwerty1434/favshare
라면 내가 만드는 이미지 역시 qwerty1434/favshare
여야 합니다.docker commit -a "qwerty1434" -m "hub_test" favs2hare qwerty1434/favshare:0.0
가 됩니다.docker push qwerty1434/favshare:0.0
명령어를 통해 이미지를 도커허브에 올립니다.여기까지가 실습2단계(해당 이미지 도커hub에 올리기) 입니다.
docker -v
명령어와 docker ps
명령어를 통해 설치가 완료되었는지 확인합니다.docker ps
명령어 입력시 permission denied
에러가 발생한다면 sudo chmod 666 /var/run/docker.sock
명령어를 입력합니다.sudo
명령어가 실행되지 않는다면 apt-get install -y sudo
명령어를 입력해 sudo
를 설치합니다.docker pull
명령어를 입력해 도커허브에 올린 이미지를 받아옵니다.docker pull qwerty1434/favshare:0.0
docker run -d --cap-add=NET_ADMIN -it --name favs2hare -p 8080:8080 qwerty1434/favshare:0.0
docker exec -it favs2hare /bin/bash
service mysql start
cd
명령어와 ls
명령어를 활용해 .jar
파일이 위치한 곳으로 이동합니다.nohup java -jar 파일이름.jar
명령어를 통해 서버를 실행합니다.여기까지가 실습3단계(서버에서 실행하기) 입니다.
sudo docker cp final_data.sql backend:home
sudo mysql -u root -p favshare < final_data.sql