도커 꼭 써야하나.. 라고 생각했던게 불과 몇 달 전인데, 막상 써보니 이만한 게 없다. 특히, 서버를 켜기에는 거추장스럽고, 가상환경이 꼭 필요한 경우 컨테이너 환경을 아주 야무지게 쓰고 있다. 기록하면서 하나하나 개념 살펴볼 겸 포스팅한다.
(썸네일은 역시 공식 닥스 https://docs.docker.com/)
FROM ubuntu:22.04
MAINTAINER iwin1203
## use bash
SHELL ["/bin/bash", "-c"]
## update & get repo for python3.8
RUN apt-get update -y \
&& apt-get upgrade -y
RUN apt-get -y install software-properties-common \
&& add-apt-repository ppa:deadsnakes/ppa \
&& apt-get update
## to skip tz setting
RUN DEBIAN_FRONTEND=noninteractive TZ=Etc/UTC apt-get -y install tzdata
## get python3.8 and dependencies
RUN apt-get -y install python3.8 \
python3.8-venv \
python3.8-dev \
python3.8-distutils -y \
python3.8-lib2to3 -y \
python3.8-gdbm -y \
python3.8-tk -y
## get other programs
RUN apt-get -y install git \
curl
## set workdir
WORKDIR /home
$ docker build . -t venv_img:python
// venv_img라는 이미지명에 python이라는 tag를 붙여 위 도커파일을 빌드
$ docker build . --platform linux/amd64 -t venv_img:python
// mac은 디폴트가 arm. amd로 설치하고 싶은 경우
$ docker run -it --name py_venv_cont venv_img:python
// venv_img:python 이미지로부터, py_venv_cont라는 이름의, 터미널로 소통할 수 있는 컨테이너를 만듦.
// -i -t의 구체적인 스펙은 https://docs.docker.com/engine/reference/run/ 참고
$ docker start -i py_venv_cont
// py_venv_cont 컨테이너를 interactive하게 실행하거나
혹은
$ docker start py_venv_cont && docker attach py_venv_cont
// 컨테이너를 일단 시작한 다음 attach로 컨테이너에 진입
$ docker commit py_venv_cont iwin1203/venv_img:python
// py_venv_cont 컨테이너의 현재 모습을 iwin1203/venv_img:python이라는 이미지로 저장
$ docker login
// 로그인 한 뒤
$ docker push iwin1203/venv_img:python
// 도커허브에 해당 이미지 push
// 로그인에 성공했음에도 dockerhub access denied가 뜨는 경우 이미지명이 본인 레포 명으로 시작하는지 확인
$ docker inspect iwin1203/venv_img:python
// inspect를 통해 pull할 이미지가 원하는 이미지인지 확인
$ docker pull iwin1203/venv_img:python
// pull
$ docker rm -f $(docker ps -a -q)
// 컨테이너 다 지우기
$ docker volume rm $(docker volume ls -q)
// 볼륨 다 지우기 (컨테이너에 -v 옵션을 준 경우)
$ docker rmi -f $(docker images -a -q)
// 이미지 다 지우기