본문 바로가기
자격증/AWS Certified Solutions Architect

도커(Docker) 란?(설치 및 실습/도커에서 ubuntu설치,도커에서MySQL설치/도커에서 모니터 설치, 도커에서 MySQL워크벤치 설정/ 도커에서 Python서버 실행,도커에서 nginx(webserver))

by Royal! 2021. 5. 27.
728x90
반응형

도커란

도커는 컨테이너 기반 오픈소스 가상화 플랫폼이며,
라이브러리, 시스템 도구, 코드, 런타임을 포함한 소프트웨어를 컨테이너로 패키징시키는 것이다.

로컬 PC, AWS, GCP, Azure 등 환경에 관계없이 빠르게 배포 및 테스트할 수 있다.

 

VM(가상머신)은 Guest OS가 있다.(Guest OS는 독립된 커널을 가지고 있다.)

즉, 애플리케이션을 설치하면 커널의 관리를 받는다

도커(Docker) 컨테이너는 호스트OS만 존재하며 커널이 없다. 즉, 커널이 없는 OS다.

정확하게는 Host Operation System의 커널을 공유한다.

(Host Operation Systemdml OS를 같이 공유해서 같이 쓴다는 의미)
공유의 개념에는 namespaces, cgroups, chroot이 있다.


namespaces : device ,network .. 관련 커널 기능제공
cgroups : 자원소비제어(cpu,memory, disk, network)
chroot : container = process, 독린된 process로 컨테이너를 실행

컨테이너는 쉽게 생각해서 독립된 프로세스라고 보면 된다.

대규모 서비스에는 적합하지 않고 마이크로 서비스에 유용하다. 대규모 서비스에는 VM이 더 효과적이다.  

컨테이너는 VM보다 처리속도가 빠르다

그렇다면 왜 컨테이너라는 말을 사용할까?

컨테이너는 격리된 공간이며, 필요한(애플리케이션, 데이터베이스, OS 등) 것만 담는다.

(우리가 알고 있는 모든것을 담을 수 있다.)

컨테이너는 포트로만 접속(접근)이 가능하다. 따라서 포트를 열어 놓지 않으면 접근이 불가하다.

Docker container image : 인프라구성요소 및 애플리케이션 모두 설치된 고정 환경 
도커 이미지를 실행(run)하면 컨테이너(=Process)가 된다. 
EX) EC2를 구성하는데 5분이 소요된다면 도커 컨테이너는 5초정도면 이미지를 다운받고 실행할 수 있다.

도커는 매우 탄력적이고 민첩하다(=애자일)

 

먼저 도커(Docker) install에는 제약 사항이 있다.

 

도커는 64bit, kernel 버전 3.1 ~ 이상에서만 설치가 가능하다.

 

1. 설치

sudo apt-get install -y \                            # \ 이어쓰기
apt-transport-https \
ca-certificates \
curl \ 
software-properties-common \

#  \이어쓰기이다. \ 후에 Shift + Enter 눌리면 다음 줄로 넘어간다. 

 

이어서 나머지 코드도 입력해준다.

 

설치가 완료되면 마지막에 ok가 뜬다.

 

이어서 도커를 만들려면 키가 필요하다. 키를 만들기 위해서는 먼저 키를 확인해야한다.

 

키를 찾는 명령어는 sudo apt-key fingerprint 이다.

위와 같이 8자리가 키이다. sudo apt-key fingerprint OEBF8888형식과 같이 띄어쓰기 없이 입력해준다.

 

sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu  $(lsb_release -cs) stable"

tail /etc/apt/sources.list

sudo apt-get update

 

tail은 내가 설치한 것이 깔렸는지 확인하기 위한것. 확인해보면 된다. 다운 받아져 있다면 다시 업데이트를 해준다.

 

여기서 만약 오류가 난다면 아래와 같이 다시 한 번 설치해본다.

 curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -
 
sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable"

sudo apt-get update

설치가 완료됐다면 아래 명령어를 입력 후 docker version이라는 명령어를  입력해본다. docker info가 뜨면 성공이다.

sudo docker version
sudo usermod -aG docker ubuntu
sudo systemctl enable docker
sudo systemctl restart docker
sudo reboot

 

우선 도커를 이용하려면 hud.docker.com에 회원가입을 해야한다.

로그인 하기위해서는 docker login이라는 명령어를 입력한다.

 


 

 

도커에서 ubuntu 설치하기

 

docker pull ubuntu:14.04 #pull은 이미지를 다운받는 명령어

 

docker images -> 우분투가 깔린것을 확인 할 수 있다. 읽기 전용이다.

 

이미지(정적)를 실행(run)하면 컨테이너가 된다. image는 복사본으로 생각하면 된다.

 

container = process(동적, 읽고 쓰기)

 

docker run -i -t --name=ubuntu1 ubuntu:14.04 -> run을 사용하여 컨테이너 실행.

컨테이너로 바뀐 것을 확인할 수 있다. 나오고 싶으면 exit를 치면 된다. docker ps -a를 입력하면 확인 할 수 있다.

 

cat /etc/os-release명령어로 os도 한번 확인해보면 된다.

docker start ubuntu1를 치면 다시 실행 할 수 있다.

 

docker exec -it ubuntu1 bash

다시 실행된 것을 알 수 있다.

 

read escape sequence  입력 후  ctrl+p+q를 눌리면 종료하지 않고 빠져 나올 수 있다.

다시 빠져 나온 것을 알 수 있다.


도커에서 MySQL 설치하기

 

docker pull mysql:5.7    #pull은 이미지를 다운받는 명령어  

 

docker images로 용량이 얼마나 되는지 확인해보자.

 

docker run -i -t --name=mysql-container mysql:5.7 bash     # mysql 이름을 설정해 주는 것 

 

mysql -u root하면 오류난다. /etc/init.d/mysql start를 해준 다음 mysql -u root를 입력한다.

 


패스워드를 넣어주기 위해서 다시 mysql를 실행하는 모습

docker run -it -d --name=mysql157 \          

-p 13306:3306 \

-e MYSQL_ROOT_PASSWORD=password# \ 

mysql:5.7

도커를 실행해준다.

# -d는 백그라운드로 돌아가기 위해서 넣어주는 명령어

# p는 포트. 포트맵핑을 해준다. 내가 원하는 포트만(3306,mysql) 열고 그걸 13306에만 연결한다는 뜻.

# 비밀번호가 password#이다.

 

백그라운드에서 설치 중. 

docker exec -it mysql157 bash

mysql -uroot -p  명령어를 통해 mysql에 접속한다. 

 

MySQL에 접속한 모습

 

create database awsdb;  #awsdb 생성

use awsdb; #사용

create table t1 (prod_id int, prod_name varchar(20)); #테이블 id와 name 생성

insert into t1 values (100,'AWS'); #값 익력 

select * from t1; # 테이블 확인

위의 명령어를 입력해서 테이블을 만들어 준다.

테이블을 만들고 확인해준다.


아래의 명령어를 통해 포

ubuntu@ip-172-31-35-54:~$ sudo netstat -nlp | grep 13306

 

p명령어는 pid를 확인해주는 명령어 

ps -ef | grep 3322도 확인해준다. #외부에서 항상 13306접속하면 3306으로 포트를 열어준다는 것을 알 수 있다.


도커로 접속할 수 있는 유일한 방법은 포트접속이다. 따라서 해당 EC2에서 인바운드 보안규칙을 설정해줘야 접속 할 수 있다. 

 

보안규칙을 저장한 모습.

 

도커에서 MySQL Workbench를 붙일 수 있다.


컨테이너를 모니터링 할 수 있는 것이 있다.

 

cAdvisor (c어드바이저) :container monitoring container

 

docker run \

--volume=/:/rootfs:ro \

--volume=/var/run:/var/run:rw \

--volume=/sys:/sys:ro \

--volume=/var/lib/docker/:/var/lib/docker:ro \

--publish=9559:8080 \

--detach=true \

--name=cadvisor \

google/cadvisor:latest

 

 

 

모니터링 도구 확인 (부엉이)


 

docker pull nginx:1.19

 

docker run -it -d -p 8080:80 --name=webserver1 nginx:1.19        #백그라운드로 실행

 

<html>  <head>   <title>Amazon EC2 base docker  Application</title>    <style>body {margin-top: 40px; background-color: #333;} </style>  </head>  <body>   <div style=color:white;text-align:center>    <h1> Complete! </h1>    <h2> TS K.. </h2>     <p>Application is now good running on Docker nginx  web.</p>   </div>  </body> </html>

 

vi index.html 하나 만들어준다

 

docker cp index.html webserver1:/usr/share/nginx/html/index.html (도커에서 index.html도 덮어 써진다.)

 

 

아래와 같이 덮어 써진다.

docker stop webserver1 #멈춤

docker start webserver1 #시작


도커에서 Python 서버 실행하기

 

먼저 vi index.py의 파일을 만들어서 아래와 같이 스크립트를 넣어준다.

 

from http.server 

import BaseHTTPRequestHandler, 

HTTPServer port = 8900 class SimpleHTTPRequestHandler(BaseHTTPRequestHandler):     def do_GET(self):         self.send_response(200)         self.send_header('Content-Type', 'text/html; charset=utf-8')         self.end_headers()         self.wfile.write('<h1>[Python Web Server running~]</h1>'.encode('utf-8')) httpd = HTTPServer(('0.0.0.0', port), SimpleHTTPRequestHandler) print(f'Server running on port:{port}') httpd.serve_forever()

 

 

docker run -it -d --name=python_test -p 8900:8900 python:3.9-slim #이름 설정

sudo netstat -nlp | grep 8900 # 8900포트가 잡히는지 확인.

docker cp py_http.py python_test:/ # 복사를 해준다.

docker exec -it python_test bash #도커를 실행 해준다.

python py_http.py  #파이썬 스크립트를 실행 해준다.

728x90
반응형