고래씌

직접 도커 이미지 빌드하기 본문

보안/클라우드

직접 도커 이미지 빌드하기

고래씌 2022. 12. 14. 16:25

1. python를 사용해 단순한 서비스를 시작 작성한다. 다음 파일을 작성하여 test_server.py로 저장한다.

# test_server.py
import socket

with socket.socket() as s:
  s.bind(("0.0.0.0", 12345))
  s.listen()
  print("server is started")
  conn, addr = s.accept()
  # conn 클라이언트와 통신할 소켓
  # addr 클라이언트의 정보가 들어있음
  with conn:
    print("Connected by", addr)
    while True:
      data = conn.recv(1024)
      if not data: break
      conn.sendall(data)

s.bind(("0.0.0.0", 12345))  : 12345 포트를 열도록 만듦.

클라이언트 정보가 addr에 저장이 됨.

클라이언트가 접속이 되면 while 문을 통해 반복이 되는 형태인데 

data = conn.recv(1024) : 1024byte를 받아서 data를 저장한 다음에 

if no data : break ~ conn.sendall   :   data에 내용이 있다라면 자기가 받은 data를 다시 클라이언트에게 돌려주는 내용

 

python3 test_server.py

---

nc 127.0.0.1 12345

 

 

2. 도커 파일 생성

별도의 디렉토리를 생성하고 dockfile과 위에서 생성한 python파일을 새 디렉토리에 배치한다.

mkdir my_first_project
mv test_server.py ./my_first_project/
cd my_first_project/
gedit dockerfile

- dockerfile

FROM python:3.7

RUN mkdir /echo
COPY test_server.py /echo

CMD ["python", "/echo/test_server.py"]

 

RUN mkdir /echo     : 이 이미지를 사용해서 echo라는 디렉토리를 만들겠다. RUN - 실행을 하겠다

COPY test_server.py /echo    :    COPY - 파일을 복사한다는 뜻. test_server.py 를 /echo라고 만든 곳에 옮기겠다

 

RUN,과 CMD 모두 실행이라는 공통점이 있지만 차이점이 있음. CMD는 컨테이너를 실행할 때 실행함.

RUN은 컨테이너를 빌드할때(이미지를 만들 때) 실행하는 명령어임.

 

3. 빌드 후 테스트

ls 
dockerfile test_server.py

sudo docker build -t ehco_test .
sudo docker images
sudo docker run -t -p 12345:12345 --name et --rm echo_test
nc 127.0.0.1 12345

 

4. 서버 연결

python3 test_server.py 를 입력하여 서버를 시작해주고 새 탭을 열어 다음과 같이 입력하면 내가 보낸 data가 그대로 data를 받음

 

5. docker 빌드

docker build -t echo_test .

. 은 현재 디렉토리를 뜻함. "."을 안쓰면 실행이 안되기 때문에 꼭 써줘야 한다!

 

 

'보안 > 클라우드' 카테고리의 다른 글

도커 컨테이너 실행 연습문제  (0) 2022.11.24
1장. 컨테이너 보안 위협  (1) 2022.11.21