--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
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 프로젝트에서 시작
-
2017년 Docker에 정식으로 통합된 사실상 표준
-
- DockerCon EU 2017
Swarm : 요즘엔 거의 사용하지 않는다
--google trend
-
Kubernetes 설치
-
- Minikube
-
이전에는 로컬 환경에서 Kubernetes를 구축하기 위해 사용
-
- 2018년부터 안정버전에서도 설치 가능
-
- 윈도우 설치
-
- 바탕화면 트레이 > 도커 아이콘 (오른쪽 클릭) > Setting 메뉴 > Kebernetes 탭
-
- Enable Kubernetes 선택 ->Install
-
최소단위 = pod(pod 안에 container가 있음)
-
kubectl 설치
-
- Kubernetes를 다루기 위한 Command Line Interface
-
- 윈도우 설치
-
- https://storage.googleapis.com/kubernetes-release/release/v1.17.0/bin/windows/amd64/kubectl.exe
-
- 다운로드, PATH 추가
-
- $ kubectl version
-
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/
**간단한 리눅스 설치를 위한 프로그램(vagrant) - 기본적으로 vritualBox 나 VM Ware이 설치되어 있어야 함
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.
'CLOUD > Docker' 카테고리의 다른 글
2/19 - 도커/쿠버네티스 활용 컨테이너 개발 8차시 (0) | 2021.02.19 |
---|---|
2/16 - 도커/쿠버네티스 활용 컨테이너 개발 7차시 (0) | 2021.02.16 |
2/10 - 도커/쿠버네티스 활용 컨테이너 개발 5차시 (0) | 2021.02.10 |
2/9 - 도커/쿠버네티스 활용 컨테이너 개발 4차시 (0) | 2021.02.09 |
2/8 - 도커/쿠버네티스 활용 컨테이너 개발 3차시 (0) | 2021.02.08 |