티스토리 뷰
가정 - 클라우드에서 EC2나 이런 인스턴스를 할당 받고, 유일한 공인 IP가 있다는 가정 하에 진행한다.(AWS의 경우 탄력적 IP 설정)
시작하기 전 팁 : 해당 클라우드에 쉽게 접속하려면 .sh 파일을 만들어서 접속하면 된다.
ssh ~/.ssh/sikaro.pem ubuntu@공인 ip
혹은
ssh -i ~/.ssh/sikaro.pem root@공인 ip
# ssh {pem키 경로/pem키 이름.pem} {사용자명@공인 ip}
이때 ~/경로는 윈도우의 경우 사용자 > user의 경로가 잡힌다.
해당 경로에 pem 키를 넣어주면 된다.
그런 뒤에 sh 파일을 우클릭 > 터미널에서 열기 하면 실행이 된다.
안된다면 git bash를 열고 .sh 파일을 드래그해서 올리면 명령어가 올라간다.
이제 본격적으로 들어가보자. 이번 글에서는 인스턴스 내에서의 Docker 설치와 nginx에 설치에 대해서만 다룰 것이다.
관리자 접속
일단 인스턴스에 접속했다면, sudo su로 권한을 root로 바꿔준다.
sudo su
해당 패치의 업데이트를 해준다.
apt-get update
apt-get upgrade
중간에 ok 창이 나오면 그대로 엔터를 누른다.
인스턴스 내에서 Docker 설정하기
apt-get update
apt-get install apt-transport-https ca-certificates curl gnupg-agent software-properties-common
Docker 공식 GPG 키 추가
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -
위 명령어를 넣었을 떄 Ok가 떠야 한다.
Docker의 공식 apt 저장소 추가
add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable"
apt-get update
중간에 나오는 ok나 y는 무조건 다 엔터하고 y로 설정하면 된다.
이렇게 여기까지 하게 되면 Docker를 설치할 수 있는 환경이 되었으므로, apt-get update를 통해서 새로 업데이트를 한 번 더 해준다.
Docker 설치 및 Docker compose 설치
apt-get install docker-ce docker-ce-cli containerd.io
curl \
-L "https://github.com/docker/compose/releases/download/1.26.2/docker-compose-$(uname -s)-$(uname -m)" \
-o /usr/local/bin/docker-compose
Docker compose 실행 권한 추가
chmod +x /usr/local/bin/docker-compose
이러면 인스턴스 내에서 docker 설치가 된 것이다.
확인은 docker -v, docker-compose -v로 한다. 그러면 버전이 나오는 걸 볼 수 있다.
Docker 사이트 회원가입
Docker hub 사이트에서 회원가입을 해서 다음의 경로로 간다.
Account Settings -> Security -> Personal access tokens로 들어가 Generate new token을 한다.
이름을 마음대로 짓고(저는 si-acc 이라고 하겠습니다.), Access Permission은 Read,Write, Delete로 설정
그러면 창이 나오는데, 해당 창을 꺼버리면 다시 보지 못하므로, 해당 명령어들을 메모장에 붙여 넣고 저장한다(이때 두 번째로 나오는 명령어는 비밀번호 이므로 조심하도록 한다)
docker login -u 사용자 이름
dckr_pat_비밀번호
이제 잠깐 로컬에서 Docker Desktop을 설치하고 실행한다.
오른쪽 상단에서 로그인을 하고, 그대로 내버려둔다.
이제 다시 EC2로 돌아온다. 그리고 위에서 있던 docker login을 이용해서 인스턴스에서 docker에 로그인해준다.
패스워드도 입력해주면 된다.
Login Sucessed가 뜨면 로그인이 완료된 것이다.
nginx 설치하기
Docker 허브에서 명령어를 받아 인스턴스에 Nginx를 설치한다.
docker pull nginx
이제 이 nginx를 실행한다.
docker container run --name nginxserver -d -p 80:80 nginx
그러면 해당 컨테이너의 고유 id가 나온다.
docker ps
>
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
035e37c49afe nginx "/docker-entrypoint.…" 38 seconds ago Up 37 seconds 0.0.0.0:80->80/tcp nginxserver
이러면 docker 설치화 nginx가 완료된 것이다.
인스턴스에서 Docker 접속의 간단한 원리
PC가 2대 있다고 하자.
Docker는 이러한 2대의 PC에서 같은 환경을 사용하고 싶을 때 사용한다.
PC 1번의 환경을 이미지화(붕어빵 틀로 만드는 거라고 생각하면 쉽다) 해서 PC 2번에 설치하는 식이다.
그리고 EC2안에 Docker를 만들게 되면, 리눅스 운영체제 안에 Docker 생기는 것이고, Dokcer pull image를 해서 설치한다.
그리고 Docker 에서의 Run이라는 명령어는 Docker에서 Container라는 프로그램을 실행할 수 있는 공간을 만들고, 이 예시에서는 nginx를 실행하게 만든다.
그런데 여기서 문제가 발생한다. 서버는 포트라는 게 존재하는데, docker라고 하는 거 자체에는 포트가 없다.
다만 nginx 자체는 80포트이다.
즉, 외부에서 접속할 때 공인 IP와 포트 IP로 입력하면 인스턴스로 접속되는 거지 Docker로 접속 되는 게 아니다.
따라서 해당 nginx를 타고 들어가려면, 해당 Container를 거쳐서 들어가야 한다.
그러면 이제 Container의 포트 번호가 있어야 한다. 만약 이게 90이라고 하면, 공인 IP:90이라고 하면, nginx의 80 포트로 연결되도록 지정해 줘야 한다.
그런데 IP 주소에다가 80이라는 포트는 생략할 수 있다. 생략하면 자연스럽게 80포트로 간다.
이 원리를 이용해서, 아예 생략하거나 80으로 들어오면 80으로 갈 수 있도록 현재 컨테이너 포트 번호를 80으로 주게 된 것이다.
docker container run --name nginxserver -d -p 80:80 nginx
run을 할 건데, 해당 서버의 이름은 nginxserver고, -d는 detach(백그라운드-데몬 실행), -p는 포트 (외부에서 80으로 들어오면 내부에 있는 80 포트로 포트포워딩 해준다)
그럼 만약에 nginx 포트 번호에 81로 적으면 어떻게 될까? 안된다.
nginx는 기본적으로 80 포트가 열려 있지 않으므로 연결되지 않는다.
여기까지가 Docker의 원리였고, 이제 다음 시간에는 이렇게 설치된 nginx 세팅에 대해서 알아보도록 하겠다.