클라우드 엔지니어/클라우드 캠프과정

docker 도커

해아's 2022. 10. 12. 17:27

우리만의 컨테이너 이미지를 만들기위해 docker 를 배운다.

 

 

    (1) centos에 설치
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
systemctl enable docker

  1) 컨테이너 기본
    (1) 컨테이너 실행 및 중지
      [1] 실행
docker run -it [리포지터리명]/[이미지이름]:[버전] 쉘
docker run -it ubuntu bash
docker run -it --name centos7 centos:7 bash
-i : 키보드 입력을 포준 입력으로 쉘에 전달
-t : 터미널 디바이스와 쉘을 연결
--name : 컨테이너의 이름 지정
-d : 백그라운드로 실행, -it와 반대

 

 

 

      [2] 중지
실행된 터미널에서 exit 또는 Ctrl + d, 컨테이너 중지 및 빠져나오기

 

 

실행된 터미널에서 Ctrl + p,q 컨테이너 중지하지 않고 빠져나오기

도커상태보는법 docker ps [ -a 모든녀석 ]

 

 [4] 컨테이너 시작 및 들어가기, 나오기
docker start [이름] or [ID] 시작
docker attach [이름] or [ID] 접속

docker start [컨테이너 아이디]

docker stop [이름] or [ID]  중지

      [7] 컨테이너 삭제
docker rm [이름] or [ID]
rm : 컨테이너 삭제 (중지된 컨테이너만 삭제됨)
rm -f : 실행중인 컨테이너 삭제

docker container prune
중지된 모든 컨테이너 삭제

 

 

 

 

 docker images 내가받아둔 도커 이미지를 받아둔 리스트다

이미 받아온 이미지는 생성할때 매우빠르다

이미지만 받아오는 명령어

docker pull [이미지명]

 

 

-------------------------------------------------------------

 

04. 컨테이너 개발
  1) 베이스 이미지
	컨테이너를 개발할 때 기본이 되는 이미지를 베이스 이미지라고 한다.
	도커 허브에 다양한 베이스 이미지들이 등록되어 있다.

	리눅스 배포판	: ubuntu, centos, debian, fedora, amazonlinux 등
	프로그래밍 언어	: node, golang, php, pythom, openjdk, java 등
	NoSQL DB	: redis, mongo, memcached 등
	SQL DB		: postgres, mysql, mariadb 등
	Web 서버		: nginx, httpd 등
	서블릿/JSP 서버	: tomcat, jetty 등
	콘텐츠 관리 시스템	: wordpress, ghost 등
	컨테이너		: docker, swarm 등
	CD/CI		: maven, jenkins 등
	로그와 메트릭 분석	: ElasticSearch, Logstach, Kibana 등

  2) 컨테이너 개발 순서
	1. 디렉토리를 준비, 이미지에 포함시킬 파일들을 모은다.
	2. Dockerfile 작성
	3. 컨테이너에서 실행할 애플리케이션 코드를 작성하고 유닛 테스트 실행
	4. 이미지 빌드
	5. 컨테이너를 실행하여 동작을 확인

Dockerfile << 대소문자 구분 (각종 명령어들을 모아둠)

 

FROM  alpine:latest
RUN   apk update && apk add figlet
ADD   ./message /message
CMD   cat /message | figlet

 

alpine 알파인 리눅스 마지막버전

apk update 업데이트 및 figle을 설치

 

FROM  원본 템플릿?
RUN   실행할 소스 이미지를 만들때 실행되는 명령어
ADD   추가할 파일
CMD   cat /message | figlet   이미지를 다만들고 컨테이너를 실행할때

 

4) 이미지 빌드
	docker build --tag hello:1.0 [도커파일 경로]

  5) 실행 및 확인
	docker images
	docker run hello:1.0

그 밖에 많이 쓰는 커맨드
	COPY [원본] [사본]			# 컨테이너 내 파일을 컨테이너의 다른 곳에 복사
	ENV [변수]=[값]				# 환경 변수 설정
	EXPOSE [포트]				# 공개 포트 설정
	WORKDIR [경로]				# 컨테이너 내에서 작업 디렉토리 지정, cd 같은 것
	MAINTAINER [이름]				# 이미지에 대한 작성자 추가

-e옵션으로 ENV값을 바꿀수 있다.

파이썬으로 만들어주자

 

파이썬에게 환경변수 넣어서 만들어보자

 

실습

환경변수로 숫자두개 전달받아 더한결과를 파이썬 코드가 실행되는 컨테이너

 

 

docker run --name django1 -d yoskr/django:0.1

 

docker ps

 

docker run --name django2 -d -p 80:800 yoskr/django_project:0.5

도커 실행  이름은 django2 로 포트포워딩 80을 8000으로 보낸다

 

FROM  python:3.9.14-buster
RUN   pip install django
RUN   mkdir /django_project
WORKDIR  /django_project
RUN   django-admin startproject config .
WORKDIR  /django_project/config
RUN  sed -i "s/ALLOWED\_HOSTS \= \[\]/ALLOWED_HOSTS \= \[\'\*\'\]/g" settings.py
EXPOSE 8000
WORKDIR  /django_project
CMD   python manage.py runserver 0.0.0.0:8000

 

실습

 

파이썬 이미지에서

프로젝트 폴더 추가

프로젝트 경로로 이동

pip install -r requirements.txt

python manage.py migrate

 

 

리눅스상에서
wget http://100.100.100.100:8888/web.tar
tar -xvf web.tar
cd web
vi secrit.json #파일수정
vi Dockerfile

FROM  python:3.9.14-buster  #파이썬 3.9.14 설정
ADD   ./web/ /web/  #웹폴더를 컨테이너의 웹폴더로 이동
WORKDIR  /web #작업폴더를 웹으로 이동
RUN   pip install -r requirements.txt  #설정requirements 셋팅
RUN   python manage.py migrate #마이그레이션 실행
EXPOSE 8000 #포트오픈
CMD   python manage.py runserver 0.0.0.0:8000 #서버실행




리눅스
docker build --tag yoskr/django_web:0.4 ./
docker run --name django3 -d -p 80:8000 yoskr/django_web:0.4

 

도커 실행시 아규먼트를 만들어서 설정파일을 그때그떄 가져오게 할수도 있겟다.

 

 

 

 

도커 아규먼트로 셋팅파일 불러오게 해서 셋팅파일별로 도커 실행하게 하게 하기

FROM  python:3.9.14-buster
ADD   ./web/ /web/
WORKDIR  /web
RUN   pip install -r requirements.txt
RUN   python manage.py migrate
EXPOSE 8000
ENV TYPE=test
CMD /web/script.sh $TYPE && python manage.py runserver 0.0.0.0:8000

/web/script.sh

#!/bin/bash
if [ $1 = "online" ]
then
        wget "http://192.168.179.1:8888/secret.json_on"
        rm -R ./secret.json
        mv ./secret.json_on ./secret.json
elif [ $1 = "test" ]
then
        wget "http://192.168.179.1:8888/secret.json_test"
        rm -R ./secret.json
        mv ./secret.json_test ./secret.json
fi

docker run -e TYPE=online -d -p 80:8000 yoskr/dj_w:0.2

docker run -e TYPE=test -d -p 81:8000 yoskr/dj_w:0.2

728x90
반응형