Go, Vantage point
가까운 곳을 걷지 않고 서는 먼 곳을 갈 수 없다.
Github | https://github.com/overnew/
Blog | https://everenew.tistory.com/
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..
github actions로 폴더마다 다른 도커 image를 build 하고 AWS ECR로 업로드해보자. 일단 레퍼지토리에서 단 하나의 docker image를 빌드한다면 다른 분이 만든 workflow를 이용하면 쉽다. https://github.com/jwalton/gh-ecr-push/tree/master GitHub - jwalton/gh-ecr-push: GitHub Action to push a docker image to Amazon ECR. GitHub Action to push a docker image to Amazon ECR. - GitHub - jwalton/gh-ecr-push: GitHub Action to push a docker image to Amazon ECR. gith..
Selenium 4.10 버전 Selenuim으로 작성한 크롤링 파일을 Docker로 build 하려 했는데, docker는 화면 자체가 없고 chrome driver도 따로 설치해 주어야 하기 때문에 그대로 코드를 동작시킬 수 없다. 문제는 Selenium이 최신 버전인 4.10 까지 지속적인 업데이트를 하면서, 기존의 docker 상에서 Selenium 동작시키는 정보들을 따라 하면 오류가 발생한다. (덕분에 트러블 슈팅에 개고생을...) 여러 사이트의 정보로 시행착오를 거치며 결국 build에 성공한 4.10 버전의 build 방식을 소개하겠다. Dockerfile 일단 Dockerfile의 작성은 아래의 게시글 작성자 분이 잘 설명해 주고 있다. https://velog.io/@ywoosang/a..