공부한 내용을 정리한 자료입니다.
오탈자 및 부정확한 정보가 있을 수 있습니다.
내부설정
Dockfile에 다음을 작성하고
FROM node:14
#이미지 받아오기 (기본이미지 버전)
RUN apt-get update &&\
apt-get install -y vim nano net-tools openssh-server
# 컨테이너 생성될 때 이걸 한번 실행하고 만들어 주세요 라는 문장이다.
powershell에 다음 문을 작성하면
docker build . -t hello-node:step1
PS C:\Users\dkxmp\Documents\dockerex01> docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
hello-node step1 397b8b8285ea 7 hours ago 1.01GB
이렇게 출력될 것이다.
도커(컨테이너)는 로컬에서 특정한 ip주소를 가지고 있지않아 주소를 설정해 주어야 한다.
이때 포트포워딩을 설정해 주어야 한다.
docker create -p 8080:8080 -p 8022:22 -it --name [컨테이너이름] [이미지이름]:[태그이름]
다음과 같이 컨테이너를 생성할 것이다.
위의 코드를 설명하자면
-p 8080:8080 -p 는 도커의 8080포트를 내(메인OS) 8080포트포워딩을 수행하라 라는 의미이다.
8022:22 는 내 8022포트와 도커의 ssh포트인 22번포트를 포트포워딩을 수행하라 라는 의미이다.
다음 코드를 실행시키면
docker create -p 8080:8080 -p 8022:22 -it --name test1 hello-node:step1
이후
PS C:\Users\dkxmp\Documents\dockerex01> docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
6b0663f58792 hello-node:step1 "docker-entrypoint.s…" 8 seconds ago Created test1
컨테이너를 실행하면
PS C:\Users\dkxmp\Documents\dockerex01> docker start test1
test1
아무것도 없던 포트에 포트포워딩 된 정보가 적혀있다.
PS C:\Users\dkxmp\Documents\GithubStore\SW_ImmersionCourse\nodejs_practice\day2\dockerex01> docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
6b0663f58792 hello-node:step1 "docker-entrypoint.s…" About a minute ago Up 32 seconds 0.0.0.0:8080->8080/tcp, :::8080->8080/tcp, 0.0.0.0:8022->22/tcp, :::8022->22/tcp test1
이렇게 설정되었다고 해서 아직 도커안에서 SSH를 설정해 주지 않아 SSH에 접속할 수 없다.
(도커는 보안상 처음부터 막혀있다.)
그렇다면 컨테이너를 실행시키고 SSH 설정하자.
docker exec -it [컨테이너이름] bash
접속후
root@6b0663f58792:/# cd home
root@6b0663f58792:/home# mkdir work
root@6b0663f58792:/home# cd work
work dir로 이동한다.
패스워드를 만들어야 한다.
root@6b0663f58792:/home/work# passwd root
Enter new UNIX password:
Retype new UNIX password:
passwd: password updated successfully
패스워드 만들기에 성공하였다.
이후 다음 명령어를 수행해 vim편집기로 sshd_config 파일을 수정해보자
vim /etc/ssh/sshd_config
(/Per를 눌러 빠르게 찾을 수 있다)
아래 PermitRootLogin 항목 주석을 해제하고 yes설정 후 오른쪽 prohibit~부분을 주석처리하자.
:wq를 입력하여 저장후 나가자
리눅스를 한번이라도 접하였다면 VI/VIM 에디터를 사용하였을 것이다.
해당 에디터의 단축키를 자세히 설명해준 블로그를 참고하면 된다.
https://inpages.tistory.com/124
https://jhnyang.tistory.com/54
이후 SSH실행을 시키자.
root@6b0663f58792:/home/work# service ssh start
[ ok ] Starting OpenBSD Secure Shell server: sshd.
이제 밖에서 ssh로 컨테이너로 접속하기 위해 빠져나오자
root@6b0663f58792:/home/work# exit
ssh를 통해 도커에 접속하기 위한 두가지 방법을 소개한다.
1. powershell창에서 ssh접속
PS C:\Users\dkxmp\Documents\dockerex01> ssh root@localhost -p 8022
입력하면
위의 사진처럼 잘 연결된것을 확인 할 수 있으며 exit 명령어 수행후 로그아웃 한 사진이다
2. VScode Extention Remote -SSH 에서 접속
마켓플레이스에서 remote라고 검색하면 remote - SSH 확장프로그램이 있다. 설치한다.
development는 SSH와 WSL containers을 묶어서 설치하는 것이다.
좌측 5번째탭 원격 탐색기를 클릭후 configure를 클릭하자
클릭하면 맨 위 .ssh config파일을 수정하면 된다.
또는 좌하단에 생성된 다음 아이콘을 클릭하면
다음과 같은 창이 뜨는데 Connect to Host (Remote-SSH)를 클릭하면
다음과 같은 창이 또고 맨 위 config를 누르면 .ssh config파일을 수정할 수 있다.
아래에 다음과 같이 입력후 저장하자.
Host docker_ssh
HostName localhost
User root
Port 8022
docker_ssh가 등록되어 있는것을 확인할 수 있다.
Connect to Host in New Window를 클릭하면된다.
허용 안누르면 귀찮아 지니까 잘 보고 액세스 허용을 누르자.
그리고 새로운 VScode window가 열린다.
리눅스 클릭 후
설정한 비밀번호를 입력하자
연결을 정상적으로 성공하였다면
좌하단에 다음과 같이 SSH: name 형식으로 출력된다.
여기서 폴더 열기를 클릭하여 내가 원하는 디렉토리로 이동할 수 있다.
파일 탐색기에서 새로운 디렉토리를 열때마다 비밀번호를 입력하라고 뜨는데
자주 작업경로를 이동한다면 매우 불편하다.
그래서 ssh키를 발급받아서 비밀번호를 입력하지않고 인증하는 방법이 있는데 추후 LINUX카테고리에 이러한 방법을 업로드 할 예정이다.
다음 경로에 test_server.js파일을 만들고 다음과 같이 코드를 작성한다
import http from 'http'
const httpServer = http.createServer((req,res)=> {
res.end('Hello docker!');
})
httpServer.listen(8080);
console.log('server start at 8080')
그리고 같은 폴더 안에 package.json파일을 만들어 아래와 같이 작성한다.
{
"type": "module"
}
이후 VScode의 터미널을 열어 work디렉토리로 이동하여 다음 명령어를 입력한다.
root@6b0663f58792:/home/work# node test_server.js
실행되었다고 터미널창에 출력되었고, localhost:8080을 입력하여 확인하자.
정상적으로 실행됨을 알 수 있다.
CURL사용
PC 터미널에서
curl -i -X GET http://localhost:8080/echo?msg=hello
다음 문장 실행시
이런식으로 출력됨
-i -> 헤더까지 출력
-X -> method 지정 (GET,POST)
맨뒤에 URI -> http를 포함한 전체 요청 문장
wget -> 주로 파일 받을 때
'Infra > Docker' 카테고리의 다른 글
Dockerfile을 활용하여 자체 이미지 빌드, 컨테이너 실행 (0) | 2023.06.16 |
---|---|
[Docker] Mongo-DB 설치 & MongoDB Compass 사용 (0) | 2021.08.11 |
Docker 개념, 명령어 (0) | 2021.08.10 |