본문 바로가기

Docker20

[Docker] 복습 출처 - https://futurecreator.github.io/2018/11/16/docker-container-basics/ namespace 먼저 컨테이너라는 가상의 독립된 환경을 만들기 위해 리눅스 커널의 namespace 라는 기능을 사용합니다. 쉽게 얘기하면 리눅스 오브젝트에 이름표를 붙여 같은 이름표가 붙여진 것들만 묶어 관리합니다. 아래 내용에서 격리(isolated)라는 의미는 다른 네임스페이스에서는 접근이 불가능하다는 걸 의미합니다. 네임스페이스설명 항목 설명 PID namespace 각 프로세스에 할당된 고유한 ID 인 PID 를 기준으로 다른 프로세스를 격리. 네임스페이스가 다르면 액세스 불가. Network namespace 네트워크 리소스(IP 주소, 포트 번호, 라우팅 테이블.. 2023. 4. 20.
Ubuntu 에 Docker 설치 실행환경 Ubuntu 22.04 Docker 설치방법 1. 우분투 시스템 패키지 업데이트 sudo apt-get update 2. 필요한 패키지 설치 sudo apt-get install apt-transport-https ca-certificates curl gnupg-agent software-properties-common 3. Docker의 공식 GPG키를 추가 curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add - 4. Docker의 공식 apt 저장소를 추가 sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu $(ls.. 2023. 4. 20.
Docker-Compose 설치 (1) docker-compose 설치 sudo curl -L "https://github.com/docker/compose/releases/download/1.29.2/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose (2) 권한 부여 sudo chmod +x /usr/local/bin/docker-compose ※ docker-compose설치 후 명령 이 실패하면 경로를 확인하십시오. /usr/bin경로에 있는 다른 디렉토리에 대한 심볼릭 링크를 만들 수도 있습니다 . sudo ln -s /usr/local/bin/docker-compose /usr/bin/docker-compose (3) 설치 후 version 확인 .. 2021. 11. 18.
[Docker] 10. Docker-Compose (from build to operation) Docker-Compose 여러 컨테이너를 일괄적으로 정의하고 실행할 수 있는 툴 하나의 서비스를 운영하기 위해서는 여러 개의 애플리케이션이 동작해야 함 컨테이너화 된 애플리케이션들을 통합 관리할 수 있음 Docker-Compose로 컨테이너 실행 예를 들어, docker hub에 올라가 있는 wordpress의 경우 아래와 같이 yaml 파일이 구성되어 있다. version: '3.1' services: wordpress: image: wordpress restart: always ports: - 8080:80 environment: WORDPRESS_DB_HOST: db WORDPRESS_DB_USER: exampleuser WORDPRESS_DB_PASSWORD: examplepass WORDPRE.. 2021. 11. 18.
[Docker-실습] 9.Container Network (요약) - 컨테이너 네트워크 사용하기 - 컨테이너 포트 외부로 노출하기 - User-Defined Network 구성하기 - 컨테이너 간 통신 wordpress, mysql 컨테이너 서비스 구축하기 1. 컨테이너 네트워크 사용하기 docker0 bridge Network ip addr brctl show docker run --name c1 -it busybox docker inspect c1 docker run --name c2 -it busy box docker inspect c2 - sandbox : c1의 container의 network 환경을 만들어준 것. - Endpoint : Veth, 컨테이너 안에 있는 네트워크 인터페이스. - IP, Gateway, Mac 정보 등을 확인 가능. do.. 2021. 11. 15.
[Docker-실습] 8.Container Storage [1. mysql db data 영구 보존] -v : $ docker run -d --name db -v /dbdata:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=password mysql:latest -v $ docker run -d --name db2 -v /var/lib/mysql -e MYSQL_ROOT_PASSWORD=password mysql:latest (mysql container에 접속해서 database 생성 후, Host에 마운트된 Volume 에서 생성된 것 확인하기) $ docker exec -it db /bin/bash $ mysql -u root $ create database jaewon; $ show databases; mysql container의.. 2021. 10. 13.
[Docker] 8.Container Storage [Docker Container Volume] - 컨테이너 이미지는 ReadOnly. 즉, 수정할 수 없고 새로운 내용을 집어넣을 수 없다. - Docker run 후 컨테이너에 추가되는 데이터들은 이미지 Layer에 추가되는 것이 아니라 별도의 RW Layer에 저장 ※ Union File System(=overlay) : Docker가 가지고 있는 Layer를 관리해주는 기술. - 컨테이너 이미지의 ReadOnly Layer와 RW Layer의 변경사항을 마치 하나인 것처럼 보여주는 기술. MySQL 컨테이너를 잘 운영 중이었다고 가정하자. 실수로 docker rm 명령어를 입력할 경우, 이미지의 ReadOnly Layer와 추가된 데이터의 RW Layer가 삭제되고 DB데이터들은 복원할 수 없다. .. 2021. 9. 23.
[Docker-실습] 7.Container 리소스 관리 ※ stress container 생성 컨테이너 빌드 : 부하 테스트 프로그램 stress 를 설치하고 동작시키는 컨테이너 빌드 CPU 부하 테스트 : 2개 cpu core를 100% 사용하도록 부하 발생 : stress --cpu 2 메모리 부하 테스트 : 프로세스 2개와 사용할 메모리만큼 부하 발생 : stress --vm 2 --vm-bytes $vi dockerfile FROM debian MAINTAINER jwjeong RUN apt-get update; apt-get install stress -y CMD ["/bin/sh", "-c", "stress -c 2"] [Docker 컨테이너 메모리 리소스 제한] swap 메모리 용량 제한이 실제 메모리 제한과 어떤 관련성이 있는 지 확인 dock.. 2021. 9. 9.
[Docker] 7.Container 리소스 관리 [컨테이너 하드웨어 리소스(CPU, Mem, Disk I/O) 제한] - 기본적으로 컨테이너는 호스트 하드웨어 리소스의 사용 제한을 받지 않는다. 리소스를 제한하지 않으면 하나의 컨테이너가 모든 리소스를 사용할 수 있게 되고, 다른 컨테이너가 상대적으로 적은 리소스를 사용할 수 밖에 없게 된다. docker run 과정에서 옵션을 통해 리소스를 제한할 수 있다. (1) Memory 리소스 제한 - 제한 단위는 b, k, m, g 로 할당 옵션 의미 --memory, -m 컨테이너가 사용할 최대 메모리 양을 지정 --memory-swap 컨테이너가 사용할 스왑 메모리 영역에 대한 설정 메모리+스왑, 생략 시 메모리의 2배가 설정됨 --memory-reservation --memory 값보다 적은 값으로 구.. 2021. 9. 7.
[Docker-실습] 6.Container 운영 [컨테이너 운영 명령어 사용] (1) 이미지 검색 $ docker search nginx - Official 이미지를 사용하거나, 직접 만들어서 사용하자. (보안) (2) 도커 이미지 다운로드 $ docker pull nginx:1.14 $ docker pull mysql (3) 다운 받은 이미지 확인 $ docker images $ docker images --no-trunc : 이미지 명을 풀네임으로 출력하는 옵션 (4) 컨테이너 생성 docker create 명령어의 경우, 기본적으로 백그라운드로 실행 $ docker create --name websvt ningx:1.14 : latest 버전이 아닌 경우 태그 생략 안 됨. $ docker ps -a 해당 컨테이너를 RUN 하게 되면 COMMAN.. 2021. 8. 27.
[Docker] 5.Container 운영 ※ Docker Host : 리눅스 시스템에 Docker Daemon을 띄어서 Running 중 인 상태. ※ Docker Hub : 도커 컨테이너를 모아놓은 저장소. 다른 말로 Registry [컨테이너 이미지 관리] (1) 명령어 이미지 검색 $ docker search [옵션] 이미지 다운로드 $ docker pull [옵션] 다운 받은 이미지 목록 출력 $ docker images 다운 받은 이미지 상세보기 : 다운 받은 이미지의 정보(어떻게 만들어졌는 지)를 확인 $ docker inspect [옵션] 이미지 삭제 $ docker rmi [옵션] [컨테이너를 실행하고 종료하는 명령어] - 컨테이너 이미지 실행, 삭제 1. 컨테이너 실행 (1) 명령어 컨테이너 생성 $ docker create [.. 2021. 8. 24.
[Docker-실습] 5.Container Registry 1. Public Repository(hub.docker.com) 에 컨테이너 업로드 및 다운로드 $ docker login ( /root/.docker/config.json. 에 login 정보 저장됨) (1) 이미지 검색 $ docker search [이미지명]:[태그] $ docker search httpd:latest : hub.docker.com 에서 컨테이너 이미지 검색. (2) 이미지 다운로드 $ docker pull [이미지명]:[태그] $ docker pull httpd:latest (3) 이미지 확인 $ docker images (4) docker hub에 Repository에 업로드 다운 받은 이미지의 개인 Repository에 Push하기 위해서는 이미지의 tag를 바꿔주어야 한다... 2021. 8. 23.
[Docker] 4.Container Registry Container Registry : 컨테이너를 모아놓은 저장소 Q1. 컨테이너 보관창고(Container Registry) Registry : 컨테이너 이미지를 저장하는 저장소 Docker Hub : hub.docker.com Private Registry : 사내의 컨테이너 저장소 Q2. docker hub(registry) https://hub.docker.com/ Docker Hub Container Image Library | App Containerization We and third parties use cookies or similar technologies ("Cookies") as described below to collect and process personal data, such .. 2021. 8. 12.
[Docker-실습] 4.Container 만들기(2) (목표) 주어진 script를 실행하는 컨테이너를 빌드하시오. - 컨테이너 이름 : fortune:20.02 - dockerfile의 내용 - base image: debian - 컨테이너에 아래의 webpage.sh 파일을 복사 webpage.sh #!/bin/bash mkdir /htdocs while : do /usr/games/fortune > /htdocs/index.html sleep 10 done - 컨테이너에 fortune 애플리케이션 설치 - 컨테이너 실행 시 저장한 webpage.sh가 실행되도록 구성 1. 디렉토리 생성 $ mkdir fortune $ cd fortune (2) script 파일 생성 $ vi webpage.sh webpage.sh #!/bin/bash mkdir /h.. 2021. 8. 11.
[Docker-실습] 3.Container 만들기 [vi dockerfile 생성 -> docker build(이미지만들기) -> docker run] 1. node.js 애플리케이션 컨테이너 만들기 : hello.js (Application을 운영해주는 컨테이너) (1) 디렉토리 생성 $ mkdir hellojs $ cd /hellojs (2) hello.js 파일 준비 $ vi hello.js hello.js $ cat > hello.js const http = require('http'); const os = require('os'); console.log("Test server starting..."); var handler = function(request, response) { console.log("Received request from ".. 2021. 8. 9.
[Docker] 3.Container(3) Q1. 무엇을 컨테이너로 만드는가? - 개발한 애플리케이션(실행파일)과 운영환경이 모두 들어있는 독립된 공간. - 개발한 프로그램과 실행환경을 모두 컨테이너로 만들어, MSA(Micro Service Architecture) 환경이 Polyglot 애플리케이션 운영. 예를 들어, shopping cart는 java, competed order는 php로 Inventory&Item price는 node.js로 Application을 개발하는 데 가장 적합한 언어를 선택하여 하나의 플랫폼(E-commerce Platform)을 구현할 수 있다. - 위와 같이 개발될 경우, Shopping Cart에 업데이트할 사항이 있다면 해당 컨테이너만 업데이트시켜주면 된다. 독립된 공간으로 서비스가 되기 때문에 다른 컨.. 2021. 8. 3.
[Docker-실습] 2.Docker 명령어 [Docker Status 확인] $ systemctl status docker $ docker version [Docker Hub에서 Container 이미지 검색] : 내가 원하는 container image가 hub에 존재하는 지 검색. (예시는 nginx 검색) $ docker search nginx [컨테이너 이미지 다운로드 후 Image Layer 보기] System에 Docker가 설치되면 /var/lib 아래 docker 디렉토리가 있다. overlay2에 Container Image Layer가 들어간다. (1) container image를 확인 $ docker images 혹은 $ docker image ls 를 입력한다. (2) container image 다운로드 (예시는 ngin.. 2021. 8. 2.
[Docker] 2.Container(2) [컨테이너와 컨테이너 이미지의 구조] - 컨테이너는 하나의 Application 프로세스 - 컨테이너 1개 = Application 1개 - 컨테이너의 특징 : 완전하게 Application 들이 독립된 공간으로 분리되어 운영됨. ○ CPU, Memory, Network, Disk 등 H/W 리소스를 각각 따로 가지고 있다. ○ 또한, 사용되는 Hostname, User ID 도 모두 독립적. - 즉, Frontend 단의 Node.js 는 PHP, MySQL(DB)에 동작되면서 영향을 주지 않는다. [Docker Architecture] ※ Docker Host : Docker Daemon이 동작되고 있는 리눅스 커널이 있는 시스템 ○ Docker가 Container들을 실행할 수 있는 Platform.. 2021. 7. 30.
[Docker-실습] 1.Install Docker Engine on CentOS7 [Docker사이트 공식 설치 메뉴얼(리눅스)] - https://docs.docker.com/engine/install/ 1. OS 요구사항 - CentOS 7 or 8 Version 2. 이전 버전 제거 $ sudo yum remove docker \ docker-client \ docker-client-latest \ docker-common \ docker-latest \ docker-latest-logrotate \ docker-logrotate \ docker-engine ※ /var/lib/docker/이미지, 컨테이너, 볼륨 및 네트워크를 포함한 의 내용 은 보존됩니다. 3. 저장소 설정 새 호스트 시스템에 처음으로 Docker Engine을 설치하기 전에 Docker 저장소를 설정해야 합.. 2021. 7. 29.
[Docker] 1.Container 1. 왜 리눅스에서 운영해야 하는가? - 리눅스 커널의 기능을 기반으로 컨테이너가 만들어짐. (1) chroot : 독립된 공간을 형성 (2) namespace : 독립된 공간에 6가지 isolate를 제공 (각 컨테이너가 마치 하나의 가상 시스템인 것처럼) (3) cgroup : 필요한만큼의 H/W를 지원. ※ Container Engine : Linux Kernel에 있는 Storage, Namespaces, Networking 을 Docker Platform 에서 쓸 수 있도록 지원해주는 것이 Container Engine이다. ※ Windows와 MacOS에는 kernel이 없으므로, Hypervisor 를 활성화시켜서 그 위에 Container를 돌린다. 즉, 라이센스 비용이 들어가지 않는 Li.. 2021. 7. 29.