고래씌
직접 도커 이미지 빌드하기 본문
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 |