728x90

 

--Docker Compose(p.76)

  • 기존의 Dockerfile을 통한 Container 실행 방법

  • 다른 컨테이너 접속

    • Docker CLI’s Networking Features

    • Use Docker Compose

 

  • 도커 애플리케이션을 정의하고 실행하는 도구

  • Tool for defining and running multi-container Docker applications)

    • 각 컨테이너별로 별도의 Docker 명령어 실행 (long-winded arguments)

    • 한번에여러개의컨테이너동시실행

 

 

  • Docker 커맨드 or 복잡한 설정을 쉽게 관리하기 위한 도구

    • YAML format에 Docker 생성 , 설정 관련 된 작업을 작성해 놓은 Script 파일

 

 

  • Docker 커맨드 or 복잡한 설정을 쉽게 관리하기 위한 도구

    • YAML format에 Docker 생성 , 설정 관련 된 작업을 작성해 놓은 Script 파일

  • Docker compose 실행

    • $ docker-compose up

    • $ docker-compose up --build à Dockerfile을 다시 빌드

 

(docker docs)

https://docs.docker.com/compose

 

Overview of Docker Compose

 

docs.docker.com

 

 

$mkdir my_docker_compose

 

**Docker container 실행 (mysql) 

1. - 이미지 -> mysql:5.7    
2. - 볼륨마운트 -> 호스트PC 폴더:/var/lib/mysql    
3. - ROOT Password -> secret    
4. - DB -> mydb    
5. - PORT forwarding -> 3306:3306

 

$docker run -p 3306:3306 --volume /Users/mhee4/my_docker_compose/mysql_volume:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=secret -e MYSQL_DATABASE=mydb --name mysql_server mysql:5.7

 

 

$docker exec -it mysql_server /bin/bash

root@5953eb26ef7d:/# mysql -h127.0.0.1 -uroot -p

root@5953eb26ef7d:/# mysql -h127.0.0.1 -uroot -p mydb

mysql> create table member(id varchar(10), name varchar(10));

 

 

**docker compose작업하기

https://docs.docker.com/compose

 

Overview of Docker Compose

 

docs.docker.com

 

$code docker-compose.yml

 

#docker-compose.yml

version: "3.9"
services:
  my-mysql:
    image: mysql:5.7
    volumes:
      - ./mysql-data:/var/lib/mysql
    ports:
      - 3306:3306
    environment:
      MYSQL_ROOT_PASSWORD: secret
      MYSQL_DATABASE: mydb

 

$docker-compose --version

docker-compose version 1.27.4, build 40524192

 

$docker-compose --help

$docker-compose up

 

$docker-compose ps

         Name                   Command           State           Ports         

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

my_docker_compose_my-mysql_1          docker-entrypoint.sh mysqld       Up      0.0.0.0:3306->3306/tcp, 33060/tcp     

 

$docker-compose down

 

(image pull받기 -> image없으면)

$docker pull mhee4321/mymysql:latest

 

$docker run -d -p 3306:3306 mhee4321/mymysql

$docker logs 554e

$docker exec -it 554e /bin/bash

root@554eba5a917d:/# mysql -h127.0.0.1 -uroot -p

 

$code my-docker-compose.yml

 

#my-docker-compose.yml

version: "3.9"
services:
  my-mysql:
    image: mhee4321/mymysql:latest
    volumes:
      - ./mysql-mydata:/var/lib/mysql
    ports:
      - 3306:3306
    environment:
      MYSQL_DATABASE: mydb

$docker-compose --file my-docker-compose.yml up

 

compose 장점 => 서비스파일을 여러개 등록가능

 

 

$docker run -d -p 8000:8000 mhee4321/mydjango:1.0

$docker exec -it ef78 /bin/bash

root@ef78feabc6a4:/mydjango#

 

 

#my-docker-compose.yml

version: "3.9"
services:
  my-mysql:
    container_name: mysql_server
    image: mhee4321/mymysql:latest
    volumes:
      - ./mysql-mydata:/var/lib/mysql
    ports:
      - 3306:3306
    environment:
      MYSQL_DATABASE: mydb
  my-django:
    image: mhee4321/mydjango:1.0
    ports:
      - 8000:8000
    depends_on:
      - my-mysql

 

$docker-compose --file my-docker-compose.yml up

 

$docker ps -a

$docker-compose ps

 

$docker-compose --file my-docker-compose.yml down

  =>mysql_server만 기동됨, Table 'mydb.bookmark_bookmark' doesn't exist"

 

#my-docker-compose.yml

version: "3.9"
services:
  my-mysql:
    container_name: mysql_server
    image: mhee4321/mymysql
    # volumes:
      # - ./mysql-mydata:/var/lib/mysql
    ports:
      - 3306:3306
    environment:
      MYSQL_DATABASE: mydb
    networks:
      - my-network
  my-django:
    # deploy:
      # replicas: 2(2개로 복제)
      container_name: django_server
      image: mhee4321/mydjango:1.0
      ports:
        - 8000:8000
      depends_on:
        - my-mysql
      networks:
        - my-network
networks:
  my-network:
    driver: bridge

$docker network create my-network

$docker network ls

 

$docker network inspect my_docker_compose_my-network

$docker exec -it mysql_server /bin/bash

root@214454a6e3fe:/# mysql -h127.0.0.1 -uroot -p

 

$docker exec -it 9817 /bin/bash

root@98177fbcebc8:/mydjango# python manage.py migrate

root@98177fbcebc8:/mydjango# python manage.py createsuperuser

 

**volume mount를 다시 시작해서 걸어주면 내가 만든 데이터베이스가 덮어쓰기되어 날아갈 수 있다.

  => volume mount 걸어준 폴더를 지우든 volume mount를 주석처리 해야 함

 

**MySQL TOOL => Heidsql이나 workbench


**Kubernetes(182p)

 

  • 쿠버네티스는 컨테이너 운영을 자동화하기 위한 컨테이너 오케스트레이션 도구로, 구글의 주도로 개발됨

  • 많은 수의 컨테이너를 협조적으로 연동시키기 위한 통합 시스템

  • 명령행 도구 : kubectl

 

 

(강사님 저장소)

https://github.com/joneconsulting/k8s

 

joneconsulting/k8s

Contribute to joneconsulting/k8s development by creating an account on GitHub.

github.com

 

(docker image, container, volume 정리하기)

$docker volume ls

$docker volume rm

$docker rmi

$docker system prune

 

 

**kubernetes 설치

$kubectl get nodes

NAME             STATUS   ROLES    AGE   VERSION

docker-desktop   Ready    master   11m   v1.19.3

 

$kubectl get pods

$kubectl version

 

(위에 도커 데스크톱이 작동안된다면 쿠버네티스 미니큐브 설치)

https://github.com/kubernetes/minikube/releases(windows)

(https://kubernetes.io/ko/docs/tasks/tools/install-kubectl/

curl -LO https://storage.googleapis.com/kubernetes-release/release/v1.20.0/bin/darwin/amd64/kubectl

 

chmod +x ./kubectl

 

 

sudo mv ./kubectl /usr/local/bin/kubectl

 

 

kubectl version --client

)=>사용안함

 

(이 방식 사용v)

https://sunbee.xyz/k8s-mac-minikube

 

Mac에서 minikube 로 쿠버네티스 시작하기 | sunbee

Mac에서 혼자 이것 저것 테스트해볼 수 있는 나만의 쿠버네티스 클러스터를 만들어보자. 이런 목적으로 설치해볼 수 있는 것이 minikube이다. Mac에서는 homebrew를 이용하여 kubectl과 minikube를 설치한

sunbee.xyz

$ brew install kubectl minikube

 

$ minikube start

설치되는 과정이 너무 귀엽군..

$kubectl version

$kubectl get nodes

$kubectl get pods

 

$minikube stop

 

 

https://kubernetes.io/docs/concepts/overview/components

 

Kubernetes Components

A Kubernetes cluster consists of the components that represent the control plane and a set of machines called nodes.

kubernetes.io

-kubernetes components

 

 

Control Plane = master node

node = worker node

=>총 4개의 pc

container(docker) 설치를 전제로 함

 

 

$kubectl create deployment nginx --image=nginx

$kubectl get pods

NAME                     READY   STATUS    RESTARTS   AGE

nginx-6799fc88d8-smwnq   1/1     Running   0          53s

 

(new terminal)

$minikube dashboard(보안상 이유로 잘 사용하지 않음)

 

**쿠버네티스의 주요 개념(192p)

 

  • Docker Container 운영을 자동화하기 위한 컨테이너 오케스트레이션 툴

    • -  컨테이너배포및배치전략

    • -  Scale in/Scale out

    • -  Service discovery

    • -  기타운용 § 구글의 Borg 프로젝트에서 시작

  • 2017Docker에 정식으로 통합된 사실상 표준

    • - DockerCon EU 2017

문어 귀엽다

Swarm : 요즘엔 거의 사용하지 않는다

 

--google trend

docker kubernetes > docker swarm

 

  • Kubernetes 설치

    • - Minikube

      • 이전에는 로컬 환경에서 Kubernetes를 구축하기 위해 사용

    • -  2018년부터 안정버전에서도 설치 가능

    • -  윈도우 설치

      • -  바탕화면 트레이 > 도커 아이콘 (오른쪽 클릭) > Setting 메뉴 > Kebernetes 탭

      • -  Enable Kubernetes 선택 ->Install

    • 최소단위 = pod(pod 안에 container가 있음)

 

 

  • Dashboard 설치 (= minikube dashboard)

    • -  Kubernetes에 배포된 컨테이너 등에 대한 정보를 보여주는 관리 도구

    • -  $ kubectl apply -f

      https://raw.githubusercontent.com/kubernetes/dashboard/v1.8.3/src/deploy/recommended/kubernetes-

      dashboard.yaml

    • -  $ kubectl get pod --namespace=kube-system -l k8s-app=kubernetes-dashboard

    • -  $ kubectl proxy (웹 브라우저로 대시보드를 사용할 수 있도록 프록시 서버 설정)

      http://localhost:8001/api/v1/namespaces/kube-system/services/https:kubernetes-dashboard:/proxy/

=교재 192p

 

 

 

**간단한 리눅스 설치를 위한 프로그램(vagrant) - 기본적으로 vritualBox 나 VM Ware이 설치되어 있어야 함

https://www.vagrantup.com

 

Vagrant by HashiCorp

Vagrant enables users to create and configure lightweight, reproducible, and portable development environments.

www.vagrantup.com

vagrant => linux, centOS, windows를 조금 더 쉽게 설치해주는 도구

 

Docker Engine.               Docker Engine                 Docker Engine

                           Virtual Box                    VM Ware

                                               Vagrant

                                               Host PC

 

$vagrant --version

Vagrant 2.2.14

 

$mkdir vagrant

$cd vagrant

$code .

 

$vagrant init

 

#Vagrantfile

Vagrant.configure("2") do |config|
  config.vm.box = "centos/7"
end

 

$vagrant up

->linux 설치됨

 

$vagrant status

$vagrant ssh(접속)

 

yum install docker-ce

 

$del Vagrantfile

$reb _old_Vagrantfile.txt Vagrantfile.txt

 

#Vagrantfile

Vagrant.configure("2") do |config|
  # Node1
  config.vm.define:"node-1" do |cfg|
    cfg.vm.box = "centos/7"
    cfg.vm.provider:virtualbox do |vb|
      vb.name="jenkins-server"
      vb.customize ["modifyvm", :id, "--cpus", 1]
      vb.customize ["modifyvm", :id, "--memory", 1024]
    end
    cfg.vm.host_name="jenkins-server"
    # cfg.vm.synced_folder ".", "/vagrant", type: "nfs"
    #cfg.vm.network "private_network", ip: "192.168.56.11", bridge: "en0: Wi-Fi (AirPort)"
    cfg.vm.network "forwarded_port", guest: 22, host: 19211, auto_correct: false, id: "ssh"
    cfg.vm.network "forwarded_port", guest: 8080, host: 18080
    cfg.vm.provision "shell", path: "bash_ssh_conf_4_CentOS.sh"
  end
  
  # Node2
  config.vm.define:"node-2" do |cfg|
    cfg.vm.box = "centos/7"
    cfg.vm.provider:virtualbox do |vb|
      vb.name="tomcat-server"
      vb.customize ["modifyvm", :id, "--cpus", 1]
      vb.customize ["modifyvm", :id, "--memory", 1024]
    end
    cfg.vm.host_name="tomcat-server"
    # cfg.vm.synced_folder ".", "/vagrant", type: "nfs"
    #cfg.vm.network "private_network", ip: "192.168.56.12", bridge: "en0: Wi-Fi (AirPort)"
    cfg.vm.network "forwarded_port", guest: 22, host: 19212, auto_correct: false, id: "ssh"
    cfg.vm.network "forwarded_port", guest: 8080, host: 28080
    cfg.vm.provision "shell", path: "bash_ssh_conf_4_CentOS.sh"
  end

  # master
  config.vm.define:"master" do |cfg|
    cfg.vm.box = "centos/7"
    cfg.vm.provider:virtualbox do |vb|
      vb.name="Ansible-Server"
      vb.customize ["modifyvm", :id, "--cpus", 2]
      vb.customize ["modifyvm", :id, "--memory", 2048]
    end
    cfg.vm.host_name="ansible-server"
    cfg.vm.synced_folder ".", "/vagrant", type: "nfs"
    #cfg.vm.network "private_network", ip: "192.168.56.10", bridge: "en0: Wi-Fi (AirPort)"
    cfg.vm.network "forwarded_port", guest: 22, host: 19214, auto_correct: false, id: "ssh"
    cfg.vm.network "forwarded_port", guest: 8080, host: 48080
    cfg.vm.network "forwarded_port", guest: 8001, host: 48001
  end
end
$vagrant up

$vagrant up

NFS requires a host-only network to be created.

Please add a host-only network to the machine (with either DHCP or a

static IP) for NFS to work.

 

$vagrant status

$vagrant ssh

This command requires a specific VM name to target in a multi-VM environment.

 

 

 

 

 

 

 

 

728x90

+ Recent posts