2 minute read

도커

  • 가상머신 같은 컨테이너를 생산함
  • 운영체제를 설치안해도 됨
  • 도커허브에서 여러 이미지들을 다운받을 있다.

수동으로 컨테이너 환경 만들기

  • 가상 OS 설정(docker : 192.168.197.200) image
    가상화 허용으로 바꾼다.

  • 네트워크 인식이 잘 안될때

nmcli device
nmcli networking on
nmcli device
  • test에서 여러 명령어 실행시키기
cd /
mkdir test
ldd /bin/bash
ldd /bin/ls

cp /lib64/libtinfo.so.6  /test/lib64/
ldd /bin/bash
cp /lib64/libdl.so.2   /test/lib64/
cp /lib64/libc.so.6  /test/lib64/
cp /lib64/ldd /bin/ls  /test/lib64/
ldd /bin/ls
cp /lib64/libselinux.so.1  /test/lib64/
cp /lib64/libcap.so.2  /test/lib64/
cp /lib64/libc.so.6 /test/lib64/
cp /lib64/libpcre2-8.so.0 /test/lib64/
cp /lib64/libdl.so.2 /test/lib64/
cp /lib64/ld-linux-x86-64.so.2 /test/lib64/
cp /lib64/libpthread.so.0 /test/lib64/
mkdir /test/bin
cp /bin/bash /test/bin/
mkdir /test/usr
mkdir /test/usr/bin
cp /usr/bin/ls /test/usr/bin/
chroot /test ls

자동으로 컨테이너 환경 만들기

도커 설치

yum install -y yum-utils 
yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
yum-config-manager --enable docker-ce-nightly
yum-config-manager --enable docker-ce-test
yum install -y docker-ce docker-ce-cli containerd.io --allowerasing

systemctl restart docker

도커 컨테이너 실행

docker run -it ubuntu bash  # 도커 허브에서 우분투 이미지를 가져옴

image
image
왼쪽이 기존 OS, 오른쪽이 컨테이너로 실행한 OS

exit #컨테이너 나가기 이러면 컨테이너가 종료되므로 Ctrl p,q로 빠져나온다.
docker ps   # 실행되고 있는 컨테이너 출력
docker ps -a    # 종료된 컨테이너를 출력
docker start [이름] or [ID]
docker attach [이름] or [ID]
docker stop [이름] or [ID]
docker pull [이미지 이름]   # 이미지 파일만 가져옴

이미지

  • 도커 회원가입
    회원가입 : https://hub.docker.com/

  • 컨테이너 개발 순서
    1. 디렉토리를 준비, 이미지에 포함시킬 파일들을 모은다.
    2. Dokerfile 작성
    3. 유닛 테스트
    4. 이미지 빌드
    5. 컨테이너 동작 확인


  • 간단한 이미지 만들기
    mkdir abcd
    cd abcd/
    vi message  # 아무거나 작성
    
    vi Dockerfile
    
    FROM  alpine:latest
    RUN   apk update && apk add figlet
    ADD   ./message /message
    CMD   cat /message | figlet
    
docker build --tag hello:1.0 .
docker images

image

  • 이미지 파일 실행
    docker run hello:1.0
    

    image

환경 변수

  • 이미지 만들기
    mkdir abcd2
    cd abcd2/
    vi Dockerfile
    
    FROM  alpine:latest
    RUN   apk update && apk add figlet
    ENV   MESSAGE=test
    CMD   echo $MESSAGE | figlet
    
    docker build --tag hello:1.1 .
    docker images
    docker run hello:1.1
    docker run -e MESSAGE=abcd hello:1.1    # 도커 설정의 ENV의 MESSAGE 값을 abcd로 바꿔 출력한다.
    

    image

환경변수(파이썬)

  • 파이썬 설치
    vi Dockerfile
    
    FROM  python:3.9.14-buster
    ADD ./test.py /test.py  # test.py를 컨테이너에 옮긴다.
    CMD python /test.py
    
vi test.py
var = 1234

print(var)
docker build --tag hello:1.2 .
docker run hello:1.2
  • 파이썬 환경변수
    ` test.py `
    import os
    var = os.environ['ARGS']
    var2 = os.environ['ARGS2']
    print(var)
    print(var2)
    

Dockerfile

FROM  python:3.9.14-buster
ADD ./test.py /test.py
ENV  ARGS=1234
ENV  ARGS2=12345
CMD  python /test.py
docker build --tag hello:1.4 .
docker run hello:1.4

image

  • 도커에서 django 서버 만들기
    mkdir django
    cd django
    vi Dockerfile
    
    FROM python:3.9.14-buster
    RUN pip install django
    RUN mkdir /django_project
    WORKDIR /django_project
    RUN django-admin startproject config .
    EXPOSE 8000
    CMD python manage.py runserver 0.0.0.0:8000
    

실행

docker run --name django2 -d -p 80:8000 django:1.0

image

일단 접속에 성공했다.

  • 우주선 띄우기
    장고를 재대로 실행하려면 settings.py의 설정을 변경해야 한다.
    image
vi Dockerfile
FROM python:3.9.14-buster
RUN pip install django
RUN mkdir /django_project
WORKDIR /django_project
RUN django-admin startproject config .
RUN sed -i "s/\[\]/\[\'\*\'\]/g" /django_project/config/settings.py # ALLOWED_HOSTS를 변경한다.
EXPOSE 8000
CMD python manage.py runserver 0.0.0.0:8000
docker build --tag django:1.1 .
docker run --name django -d -p 80:8000 django:1.1
  • 확인
    image

  • 웹서버 받아 올리기
    yum -y install wget
    yum -y install zip
    mkdir web
    cd web
    mkdir web
    cd web
    wget http://100.100.100.100:8888/web.zip    # 완성된 웹서버 다운
    unzip web.zip
    vi secret.json  # 내 정보를 기입한다.
    cd ..
    vi Dockerfile
    
    FROM python:3.9.14-buster
    ADD ./web/ /web/    # web 프로젝트 폴더를 컨테이너 web디렉토리 안에 넣는다.
    RUN pip install django
    WORKDIR /web
    RUN pip install -r requirements.txt
    RUN python manage.py migrate
    EXPOSE 8000
    CMD python manage.py runserver 0.0.0.0:8000
    
    docker build --tag web:1.1 .
    docker run --name web -d -p 80:8000 web:1.1
    
  • 확인
    image