Docker에서 python 스크립트를 실행하려고 한다.
1. Docker에 Python 설치
(2021-06-03) 기준으로 python.org 에서 release 된 stable 버전은 3.9.5이다.
때문에 docker hub에서 3.9.5 버전의 alpine 버전을 다운로드 받았다.
https://hub.docker.com/_/python
위 링크에서 TAG를 보고 원하는 버전을 선택하면 된다.
docker pull python:3.9-alpine
- alpine 버전은 alpine 리눅스 기반으로 제작된 이미지라고 한다.
- 나중에 알게 되었지만, 라즈베리파이에서는 alpine 버전이 동작하지 않았다.
- python:3.9-slim 으로 다시 설치함
2. Docker에서 Python 스크립트 실행
Docker build를 해서 custom 컨테이너를 만들고 Python 스크립트를 실행할 예정이다.
python 스크립트
아래처럼 간단하게 python 코드를 작성한다.
print("python app start")
우선 잘 동작하나 테스트.
Dockerfile 작성
FROM python:3.9-slim WORKDIR /home/pi/work/docker COPY . /home/pi/work/docker CMD ["python", "app.py"]
처음이라 이것저것 넣고 빼고 테스트를 해보았는데, 위에 4개[FROM, WORKDIR, COPY, CMD]가 기본인 듯 하다.
이렇게 작성하면 끝
Docker build & Run
빌드 명령.
docker build -t test1:v3 .
test1은 컨테이너 이름, v3은 태그명 으로 보면 되겠다. 이렇게 빌드하면 아래처럼 확인된다.
실행
docker run test1:v3 .
- 라즈베리파이에서 python alpine 버전을 사용했을 경우에는 아래처럼 에러가 발생한다.
pi@raspberrypi:~/work/docker $ docker run python:3.9-alpine Fatal Python error: init_interp_main: can't initialize time Python runtime state: core initialized PermissionError: [Errno 1] Operation not permitted Current thread 0xb6f4b390 (most recent call first): <no Python frame>
검색해보니, alpine 버전은 glibc가 아니라 musl libc를 사용해서 C라이브러리 의존성에 문제가 있을 수 있다고 한다.
'Embedded Linux > Docker' 카테고리의 다른 글
Raspberry pi 4에 Docker 설치 (0) | 2021.06.03 |
---|