1. 이미지에 COPY 할 파일 생성
로컬에서 copy 할 파일을 만든다. 따로 이미지 빌드 시에 사용할 파일이 있다면 [2. DockerFile 생성]부터 진행
1-1) 파이썬 소켓 코드 파일 생성
$ vi test_server.py
import socket
with socket.socket() as s:
s.bind(("0.0.0.0", 12345)) # 12345 포트 오픈
s.listen()
print("server started...")
conn, addr = s.accept() # 클라이언트의 요청 수락
with conn:
print("Connected by", addr)
while True:
data = conn.recv(1024)
print(f"recv data: {data.decode().strip()}")
if 'q'==data.decode().strip(): break
conn.sendall(data)
- 정상적으로 만들어졌는지 확인하기 위해 파이썬 소켓 통신 스크립트 생성
1-2) 파이썬 스크립트 실행
python3 test_server.py
1-3) 소켓 통신 테스트
Netcat은 소켓 통신을 테스트하고 디버깅하는 데 주로 사용된다.
nc 127.0.0.1 12345
- nc : 네트워크 연결을 생성하고 관리하는 데 사용되는 유틸리티
- 포트 스캐닝 : 특정 포트가 열려있는지 확인
- 포트 리스닝 : 특정 포트에서 연결을 대기하고, 들어오는 연결을 확인
- 파일 전송 : 네트워크를 통해 파일 전송
반응형
2. DockerFile 생성
동일한 경로에 copy할 파일과 dockerfile를 생성한다.
// 프로젝트 디렉터리를 생성
mkdir my_project
// 생성판 파이썬 파일 이동
mv test_server.py my_project
// 경로 이동
cd my_project
// 도커 파일 생성
vi dockerfile
- dockerfile : 대소문자를 구분하지 않지만, 파일 이름은 dockerfile로 동일해야 한다.(일반적으로 소문자 사용)
[dockerfile]
FROM python:3.7
RUN mkdir /echo
COPY test_server.py /echo
// 파이썬이 하나만 설치되어있기 때문에 python이라고 지정 가능 두개 이상시 정확히 명시해줘야한다.
CMD ["python", "/echo/test_server.py"]
- FROM, RUN, COPY는 build시 실행되는 명령어고, CMD는 컨테이너가 실행될 때 자동으로 실행되는 명령어다.
명령어 | 설명 | 사용법 |
FROM | 우분투와 같은 운영체제 이름이나 필요한 애플리케이션 이름을 지정 | FROM ubuntu:14.04 |
RUN | 컨테이너가 빌드될 때 실행할 명령어 | RUN ["mv", "1234", "5678"] |
EXPOSE | 컨테이너 외부에 노출할 포트 지정 | EXPOSE 80 |
ENV | 환경 변수 이름 지정 | ENV abc /tmp echo ${abc} |
CMD | 컨테이너가 시작될 때 실행할 명령어 | CMD ["echo", "1234"] |
ENTRYPOI NT | 컨테이너가 실행될 때 기본 명령어 지정 (CMD와 달리 옵션을 넘길 수 있음) | ENTRYPOINT ["python"] ... $ sudo docker run -t 이미지 -c "print('1234')" |
WORKDIR | 작업할 디렉토리를 세팅 | WORKDIR /project |
USER | 도커 실행 시 사용할 유저 이름 또는 uid를 지정 | USER user 또는 USER user:group |
VOLUME | 호스트의 디렉토리를 도커에 연결 커밋 없이 사용 가능하며 주로 로그 수집이나 데이터 저장용도로 사용 |
VOLUME ["/tmp"] |
COPY, ADD | 파일이나 디렉토리를 복사할 때 사용하는 명령어 명령어를 대신 사용하면 URL도 가능하며 압축된 파일은 압축을 해제하 면서 옮김 |
COPY file /copy/to/path ADD http://example.com/big.tar.xz /usr/src/things/ ADD rootfs.tar.xz / |
SHELL | 원하는 타입의 쉘을 사용 | SHELL ["/bin/sh", "-c"] SHELL ["cmd", "/S", "/C"] |
3. build
// 이미지 빌드
docker build -t echo_test .
// 이미지 조회
docker images
- -t : 이미지 이름 지정
- . : 현재 경로 (dockerfile과 test_server.py가 있는 경로)에서 build 실행
4. 도커 컨테이너 생성
생성한 이미지(echo_test)로 도커 컨테이너를 실행한다.
docker run -t -p 12345:12345 --name et echo_test
- -t : 터미널 옵션
- -p : 포트 설정
- --name : 컨테이너 이름
실행 후 [1-3) 소켓 테스트]를 다시 실행하여 정상적으로 통신이 되는지 확인한다.
반응형
'DevOps > Docker, K8s' 카테고리의 다른 글
[Docker] Private 레지스트리 구축 및 사용 방법 (0) | 2024.03.18 |
---|---|
[Docker] 이미지 Push 방법 (0) | 2024.03.15 |
[Docker] 주피터(Jupyter) LAB 서비스 구축 (0) | 2024.03.13 |
[Docker] 볼륨 마운트(Volume Mount) 사용해 로컬 파일 공유 방법 (0) | 2024.03.12 |
[Docker] MySQL 서비스 구축 방법 (0) | 2024.03.11 |