[Container] Docker
도커
- 가상머신 같은 컨테이너를 생산함
- 운영체제를 설치안해도 됨
- 도커허브에서 여러 이미지들을 다운받을 있다.
수동으로 컨테이너 환경 만들기
-
가상 OS 설정(docker : 192.168.197.200)
가상화 허용으로 바꾼다. -
네트워크 인식이 잘 안될때
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 # 도커 허브에서 우분투 이미지를 가져옴
왼쪽이 기존 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/ - 컨테이너 개발 순서
- 디렉토리를 준비, 이미지에 포함시킬 파일들을 모은다.
- Dokerfile 작성
- 유닛 테스트
- 이미지 빌드
- 컨테이너 동작 확인
- 간단한 이미지 만들기
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
- 이미지 파일 실행
docker run hello:1.0
환경 변수
- 이미지 만들기
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로 바꿔 출력한다.
환경변수(파이썬)
- 파이썬 설치
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
- 도커에서 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
일단 접속에 성공했다.
- 우주선 띄우기
장고를 재대로 실행하려면settings.py
의 설정을 변경해야 한다.
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
-
확인
- 웹서버 받아 올리기
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
- 확인