๐ Python ํ๋ก์ ํธ๋ฅผ ์ํ Docker ๋ฒ ์ด์ค ์ด๋ฏธ์ง ์ ํ ์ Alpine Linux๋ฅผ ํผํด์ผ ํ๋ ์ด์
Introductionโ
Django๋ฅผ ํ์ฉํ์ฌ ๋ธ๋ก๊ทธ๋ฅผ ๋ง๋ค์ด๋ณด๋ ํ๋ก์ ํธ๋ฅผ ์งํํ๋ค๊ฐ docker๋ก ํ๊ฒฝ์ ์ฎ๊ธฐ๋ ๋์ค ์ฌ๋ฌ ์๋ฌ๋ค์ ๋ง๋ฌ๋ค. ์ด ๊ธ์ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๋ฉด์ ์ป์ ์ง์์ ๊ณต์ ํ๊ณ ์ ์์ฑํ ๊ธ์ด๋ค.
์ฒซ ๋ฒ์งธ ๋ฌธ์ โ
Alpine Linux์ cryptography์ ํธํ์ฑ ๋ฌธ์ โ
Dockerfile
, docker-compose.yml
ํ์ผ์ ์์ฑ ํ ๋ง์ง๋ง์ผ๋ก ๋น๋๋ฅผ ํ๋ ์ค ์๋์ ์๋ฌ๋ฅผ ๋ง๋ฌ๋ค.
ERROR: No matching distribution found for cryptography==3.4.7
ํ์ฌ Dockerfile์์ ์ฌ์ฉํ๋ image ๋ฒ์ ๊ณผ requirements.txt์ ์ ํ cryptography ๋ฒ์ ์ ์๋์ ๊ฐ๋ค. ์ด๋ ๊ฒ ์ค์ ํด๋๊ณ docker-compose
๋ก ๋น๋๋ฅผ ํ๋ ค๊ณ ํ๋๋ฐ ์๋ฌ๊ฐ ๋ฐ์ํ ๊ฒ์ด๋ค.
FROM python:3.8-alpine
cryptography==3.4.7
ํด๊ฒฐโ
alpine linux์ python์์ ์ํธํ ์๊ณ ๋ฆฌ์ฆ์ด ๊ตฌํ๋ ํจํค์ง์ธ cryptography์ ํธํ์ฑ ๋ฌธ์ ๋ผ๊ณ ์๊ฐํ๊ณ , cryptography์ ๊ณต์ ๋ฌธ์๋ฅผ ์ฐธ๊ณ ํ์ฌ ํด๊ฒฐ์ฑ ์ ์ฐพ์๋ณด์๋ค.
๋๋ต ์์ฝํ๋ฉด cryptography ํจํค์ง๋ Rust๋ฅผ ๋น๋ํ ๋ ์ฌ์ฉํ๋ค. ์ฆ, Rust์ ํจํค์ง ๊ด๋ฆฌ์์ด์ ๋น๋ ๋๊ตฌ์ธ cargo๋ฅผ ๊ฐ์ด ์ค์นํด์ผ์ง ๋์๊ฐ๋ค๋ ๊ฒ์ด๋ค.
$ sudo apk add gcc musl-dev python3-dev libffi-dev openssl-dev cargo
์์ ์ฝ๋๋ฅผ Dockerfile์ ์ถ๊ฐํ๋ฉด์ ์ฒซ ๋ฒ์งธ ๋ฌธ์ ๋ ์ ํด๊ฒฐํ ์ ์์๋ค.
๋ ๋ฒ์งธ ๋ฌธ์ โ
๋น๋๊ฐ ์ค๋ ๊ฑธ๋ฆฌ๋ค๊ฐ ์ ๋๋ ๋ฌธ์ โ
์์ ๋ช ๋ น์ด๋ฅผ Dockerfile์ ์ถ๊ฐํ๊ณ ๋ค์ build ํ๋ฉด ๋น์ฐํ ์ ์๋๋ ๊ฑฐ๋ผ ์๊ฐํ์ผ๋ ์๋์ ๊ฐ์ด ๋ค์ ํ ๋ฒ ์๋ฌ๊ฐ ๋ฐ์ํ๋ค. ์ด๋ฏธ์ง๋ฅผ ๋ณด๋ฉด ์ ์ ์๋ฏ์ด still running์ด ์ง์๋๋ ์ํฉ์ด๋ค. ๋๋ต 10๋ถ ์ ๋ ๊ทธ๋๋ก ๋๋๋๋ฐ๋ ๋น๋๊ฐ ์ ๋๊ณ ๊ณ์ ์งํํ๋ค๊ฐ ์ข ๋ฃ๊ฐ ๋๋ค.
ํด๊ฒฐโ
๊ณ์ ๊ตฌ๊ธ๋ง์ ํ๋ฉด์ ์ด ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๋ ค ํ์ผ๋ฉฐ, cryptography ๋ผ์ด๋ธ๋ฌ๋ฆฌ์์ ๋ฌธ์ ์ผ ์๋ ์๋ค๊ณ ์๊ฐํ์ฌ ๊ณต์ ๋ฌธ์๋ ๋ค์ ๋ค ์ฝ์ด๋ณด๊ณ , ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ GitHub ์ด์๋ ์ฐพ์๋ณด์๋ค.
๋๋ต์ ์ผ๋ก ๋น์ทํ ์ด์๋ฅผ ์ฐพ์ ์ ์์๋ค. ์์ ์ด๋ฏธ์ง๋ cryptography GitHub ์ ์ฅ์์์ ๊ฐ์ ธ์จ ํ ์ด์ ์ด๋ฏธ์ง๋ค. ํ์ฌ์ ์ํฉ๊ณผ ๋น์ทํ์ฌ ๋ต๋ณ์ ์ฐธ๊ณ ํ ์ ์์๋ค.
๋๋ต ์์ฝํ์๋ฉด ์๋์ ๊ฐ๋ค.
- Alpine Linux์์ Python ํจํค์ง๋ฅผ ๋น๋ํ๋ ์์ ์ด ๋๋ฆฌ๋ฉฐ, ํนํ CI/CD ํ๊ฒฝ์์ ๋งค๋ฒ ๋น๋ํด์ผ ํ๋ ๊ฒฝ์ฐ ๋นํจ์จ์ ์ด๋ค.
- Python์ pip ๋ฐ ํ ํจํค์ง๊ณผ ๊ด๋ จํ์ฌ Alpine๊ณผ ํธํ ๊ฐ๋ฅํ ํ ์ ์ ๋ก๋ํ๋ ์์ ์ด ํ์ํ์ง๋ง, ์ด๋ pip/wheel/packaging ๋ฐ ๊ด๋ จ PEP ๋ ผ์๊ฐ ํ์ํ๋ค.
- ์ต์ Alpine ํ๊ฒฝ์์ Python ํจํค์ง๋ฅผ ์ ๋๋ก ์ค์นํ๋ ค๋ฉด ์ต์ Rust ์ปดํ์ผ๋ฌ๊ฐ ํ์ํ๋ค.
- Alpine์์ ๋ฐ์ํ๋ ์ด์ ๊ฐ์ ๋ฌธ์ ๋ ๋ฌธ์ํ๋์ด ์๊ณ , ํ์ฌ๋ก์๋ ๊ฐ์ ์ฌํญ์ด ์์ผ๋ฏ๋ก ์ถ๊ฐ์ ์ธ ๋ฌธ์ ๊ฐ ์๋ค๋ฉด ์๋ก์ด ์ด์๋ฅผ ์ด๊ฑฐ๋ PR(Pull Request)์ ์ ์ถํด์ผ ํ๋ค.
์ด ๋ต๋ณ์์์ ํต์ฌ์ ๊ฒฐ๊ตญ 1๋ฒ๊ณผ 2๋ฒ์ด์๋ค. ์ฆ, Alpine ๋ฆฌ๋ ์ค๊ฐ ๋ฌธ์ ์๊ณ , ์๋์ ๊ฐ์ด ์ด๋ฏธ์ง๋ง ๋ฐ๊ฟ์ผ๋ก์ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ ์ ์์๋ค.
FROM python:3.8-slim-buster
๊ทผ๋ฐ ๋ฌธ์ ๋ง ํด๊ฒฐํ๋ฉด ๋์ผ๊น? ๊ทธ๊ฑด ์๋๋ค. ์ด์ ๋ฅผ ์์๋ณด์.
Alpine Linux๊ฐ ํ์ด์ฌ ํ๊ฒฝ์์ ์ ์ ํ์ง ์์ ์ด์ โ
๋ด๊ฐ alpine linux๋ฅผ ์ฌ์ฉํ ์ด์ ๋ Ubuntu linux์ ๋น๊ตํ์ ๋ ์ฉ๋๋ ์๊ณ ๋น๋ํ ๋ ๋ ๋น ๋ฅด๊ธฐ ๋๋ฌธ์ด๋ค. ์ฆ, ๊ฒฝ๋ํ๊ฐ ์ ๋์ด ์๊ธฐ ๋๋ฌธ์ด๋ค. ๊ทธ๋ฌ๋ ์ด ์ด๋ฏธ์ง๋ python ํ๊ฒฝ์์๋ ์ ์ ํ์ง ์๋ค.
๊ทธ ์ด์ ๋ ์ฌ์ฉํ๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ์ฐจ์ด์์ ์์๋๋ค. ๋๋ถ๋ถ์ ๋ฆฌ๋
์ค ๋ฐฐํฌํ์ ํ์ด์ฌ์ ํฌํจํ ๋ชจ๋ C์ธ์ด ํ๋ก๊ทธ๋จ์ ํ์ํ C์ธ์ด ํ์ค ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ธ GNU ๋ผ์ด๋ธ๋ฌ๋ฆฌ(glibc)๋ฅผ ์ฌ์ฉํ๋ค. ๊ทธ๋ฌ๋ Alpine Linux๋ ์ข ๋ ๊ฒฝ๋ํํ๊ธฐ ์ํ์ฌ GNU ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ฌ์ฉํ๋ ๊ฒ์ด ์๋๋ผ musl ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ฌ์ฉํ๋ค. ์ด musl ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ GNU ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ก ์ปดํ์ผ ๋ Wheel ๋ฐ์ด๋๋ฆฌ
๋ฅผ ์ง์ํ์ง ์๋๋ค. ๊ทธ๋ ๊ธฐ ๋๋ฌธ์ .whl
ํ์ฅ์๋ฅผ ๊ฐ๋ ํจํค์ง๋ฅผ ๋ค์ด ๋ฐ๋ ๊ฒ์ด ์๋๋ผ .tar.gz
ํ์ฅ์ ํ์ผ์ ๋ค์ด ๋ฐ๊ฒ ๋๋ค. ์ฆ, alpine linux๋ฅผ ์ฌ์ฉํ๋ ๊ฒฝ์ฐ ์ฌ์ฉํ๋ ๋ชจ๋ ํ์ด์ฌ ํจํค์ง์ C ์ฝ๋๋ฅผ ์ปดํ์ผ ํด์ผ ํ๋ฏ๋ก ๋น๋ ์๊ฐ๋ ์ค๋ ๊ฑธ๋ฆฌ๋ฉฐ ์ฉ๋๋ ์ปค์ง๋ค๋ ๊ฒ์ด๋ค.
์ต๊ทผ ๋๋ถ๋ถ์ ํ์ด์ฌ ํจํค์ง์๋ PyPI์ Wheel ๋ฐ์ด๋๋ฆฌ๊ฐ ํฌํจ๋์ด ์์ด ์ค์น ์๊ฐ์ด ๋น ๋ฅด๋ค. Wheel์ ์ฌ์ค .whl ํ์ฅ์์ ํน๋ณํ ํ์์ ํ์ผ ์ด๋ฆ์ผ๋ก ์ด๋ฃจ์ด์ง ZIP ํ์์ ์์นด์ด๋ธํ ๊ฒ์ด๋ค. ์ฝ๊ฒ ๋งํ๋ฉด ํ์ฅ์๋ง ๋ฐ๊พผ ๊ฒ์ด๋ค.
- ๋น๋๊ฐ ๋๋ฆฌ๋ค.
- ์ด๋ฏธ์ง ์ฉ๋์ด ์ปค์ง๋ค.
- ์๊ฐ์ด ๋ง์ด ๋ญ๋น๋๋ค.(๋น๋ํ๋ ๊ณผ์ )
- ๋ฐํ์ ๋ฒ๊ทธ๋ค์ ๋ง๋ ์ ์๋ค.
์์ ์ด์ ๋ค๋ก ์ธํด, Python ํ๊ฒฝ์์๋ Alpine Linux๋ณด๋ค๋ Debian ๊ธฐ๋ฐ์ slim ์ด๋ฏธ์ง๋ Ubuntu ๊ธฐ๋ฐ ์ด๋ฏธ์ง๋ฅผ ์ฌ์ฉํ๋ ๊ฒ์ด ๋ ์ ํฉํ๋ค.