Go, Vantage point
가까운 곳을 걷지 않고 서는 먼 곳을 갈 수 없다.
Github | https://github.com/overnew/
Blog | https://everenew.tistory.com/
Docker 컨테이너들의 대부분은 리눅스 컨테이너로 만들어졌다. 하지만 AWS의 ECS(Docker engine base) 세팅에서 알 수 있듯이, Windows OS인 EC2 상에서도 리눅스 컨테이너는 동작할 수 있다.Windows에서는 리눅스 컨테이너가 어떤식으로 동작하는지 알아보자. WSL(Windows Subsystem for Linux)Windows OS를 사용한다면, 리눅스 환경을 위해 타입 1 혹은 2의 하이퍼바이저를 통해 리눅스 가상머신을 실행해야 한다.하지만 WSL을 사용하면, 별도의 가상머신 없이도 Windows OS에서도 리눅스 환경을 제공받아 리눅스 명령어를 실행할 수 있게 된다.WSL 1과 2는 구조적 차이가 존재한다. WSL 11버전에서는 Linux 커널 요청인 Sys..
Docker를 사용하다 보면, Ubuntu Image위에 세팅을 하여 container Image를 빌드하고는 한다.그렇다면 이 Image는 하나의 VM처럼 Ubuntu OS를 가상화해 제공해 주는 것일까?Host OS의 커널을 공유하기 때문에 경량화와 최적화가 가능했는데, 이런 것이 가능할까?또는 CentOS에 Docker를 설치하고 Ubnutu Image를 실행하면, 동작이 가능한 것일까? (미리 언급하면 가능하다.) 이번에는 이 주제에 대해서 알아보자. 핵심은 Host OS의 커널 공유 왼쪽에서 확인할 수 있듯이, Docker는 Host OS위에 Docker engine이 동작하여 Container 들이 이 커널을 공유하는 형태이다.따라서 container는 일종의 프로세스처럼 취급될..
Docker 3 Tier 환경 모두 같은 bridge에 위치시켜 서로 간의 통신은 가능하게 하고, Web server만 포트를 외부로 노출시키자. 같은 브릿지 내에서는 container의 이름으로 IP가 매칭되므로 세부 ip 세팅은 신경 쓰지 말자. Web server 컨테이너 Httpd image를 사용할 것이다. Httpd는 apache server의 image이지만, 세팅 방식이 상당히 다르다. docker run -itd --name web -p 8080:80 --network my_network httpd --netowork : 자신이 새로 생성한 network bridge의 이름을 넣어주자. #컨테이너 접속 docker exec -it httpd /bin/bash #접속 후 편집기 설치 apt..
Wordpress와 Mysql을 사용하여 2 Teir 환경을 컨테이너에서 세팅해 보자. Wordpress와 Mysql은 같은 bridge와 연결하여 통신이 가능하게 하고, 다른 컨테이너와 분리한다. 외부로 노출되는 port는 Wordpress에 새로운 Bridge를 연결하여 Host pc에서 접속이 가능하게 한다. 이때 접속을 위해 사용하는 것이 Docker0에 연결하는 DNS container이다. Wordpress 와 MySQL 연동 Mysql 설치 docker run -d --name mysql --network my_network -v mysql:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=wordpress -e MYSQL_DATABASE=wordpress -e MYSQL_..
Docker image 파일을 다양한 방법으로 백업해 보자. 1. Docker Hub에 public한 백업 2. VM의 저장소에 SCP로 백업(private) 3. Docker Registry container에 private한 백업 image들을 백업하는 방식도 있지만, -v 옵션으로 특정 경로의 데이터만 마운트 시켜서 저장하는 방식도 백업에 일종으로 볼 수 있다. 컨테이너는 외부에 데이터를 저장하고 컨테이너는 그 자체로 동작하는 stateless 설계가 매우 바람직하다. 따라서 전체 Image가 아닌 데이터만 따로 백업하는 방식이 효율적일 수 있다. 어떤 상황에서 어떤 전략이 최선일지 판단하기 위해 서로 간의 차이를 명확히 알아두는 것이 중요하다. 1. Docker Hub에 public한 백업 이전 ..
컨테이너의 storage 받아온 image는 변경이 불가능하고 container layer에 작업하게 된다. 계층별로 디자인을 위에서 찍는 그림이 유니온 파일 시스템이다. 한번에, 오버레이하여 서로 겹치지만 않으면 된다. 겹치면 위에 것이 읽히고, 아래 데이터는 보호할 수 있다. 최종적으로 맨 위에 쌓이는 계층이 읽기 쓰기를 제공하므로, 우리는 읽기 쓰기가 되는 것처럼 보인다. 하지만 Image layer는 읽기 전용이므로 변경이 되지 않는다. 즉, 우리가 컨테이너에서 변경하던 것은 container layer이었다.이였다. 유니온 파일 시스템 유니온 파일 시스템은 여러 개의 파일 시스템을 하나의 단일 파일 시스템으로 합치는 기술이다. 이것은 여러 개의 디렉터리와 파일들을 하나로 통합하여, 사용자에게는 ..
만약 작업 중에 container가 강제 종료 된다면 지금까지 작업한 것이 물거품이 될 수 있다. 따라서 실행 중인 도커 파일을 docker hub에 업로드하자. 일단 도커 허브에 가입하자. Docker commit docker commit으로 실행중인 컨테이너로 이미지를 만들 수 있다. docker commit dns-server everenew/dns-jin:latest Docker login Docker login으로 docker hub에 로그인하자. 일단 repository를 만들어 준다. 본인의 경우는 dns-jin로 만들었기 때문에, 아이디가 앞에 붙어 everenew/dns-jin라는 이름 등록이 된다. 이름이 everenew/dns-jin인 이미지를 push 할 수 있으므로 이름이 잘못 설..
최종 완성 DNS image 바로 실행하기 docker run -d --name dns-server -p 53:53/udp --restart=always everenew/dns-jin:latest https://hub.docker.com/repository/docker/everenew/dns-jin Docker hub.docker.com 아래에서는 글은 위의 이미지를 만들기 위한 세팅 방법과 연결 테스트 정보를 담았다. DNS 이미지 실행 docker run -d --name dns-server -p 53:53/udp --restart=always sameersbn/bind:latest ubuntu에 bind9 이 설치된 이미지이다. UDP 53번 포트는 DNS 프로토콜이 동작하는 포트이므로 이를 노출시..
Ubuntu docker 설치 가이드 https://docs.docker.com/engine/install/ubuntu/ Install Docker Engine on Ubuntu Jumpstart your client-side server applications with Docker Engine on Ubuntu. This guide details prerequisites and multiple methods to install Docker Engine on Ubuntu. docs.docker.com Jenkins Jenkins는 지속적인 통합(Continuous Integration, CI) 및 지속적인 배포(Continuous Deployment, CD)를 지원하는 오픈 소스 자동화 도구이다. Jen..
docker attach docker attach CONTAINER option --no-stdin : 표준 입력은 컨테이너에 연결하지 않습니다. 컨테이너 표준 출력 및 오류 스트림만 연결 Local 표준 입력, 출력 및 오류 스트림을 실행 중인 컨테이너에 연결. ubnutu 이미지인 mzc-ct01에 접속해보자. attach로 컨테이너 진입한 상태에서는, 빠져 나오기 위해서는 ctrl+pq 키 조합을 사용. exit 명령어로 입력할 경우 컨테이너 자체가 종료됨. 종료가 되어버리는 것에서 유추 할 수 있듯이, 실행 중인 컨테이너에 직접 들어가 명령어를 실행 (내부 접근)한다는 것이 된다. -> 여기서 exit은 container가 자신을 종료하라는 의미가 되어 종료횐다. docker run 명령어의 -i..