Docker로 테스트 환경 만들기
1. Full version 우분투 서버 만들기
0. Docker로 우분투 서버, 우분투 데스크탑을 만드는 이유
WSL 2이 제공하는 가상머쉰 환경에 우분투 서버를 설치하면, 캐노니컬(Canonical)사에서 제공하는 모든 서버기능을 사용할 수 있고, 실제 운영하는 우분투 서버와 동일하거니 매우 유사한 환경에서 작업할 수 있는 장점이 있다. 하지만, WSL 2의 가상머쉰이 가지는 네트워크 제한 문제를 인식하지 않고 작업하다가 낭패를 당하는 경우가 종종 생긴다.
그래서 나는 Git를 설치할 때 같이 설치되는 Git Bash로 사용할 수 있는 제한된 MinGW 환경을 종종 이용한다.
리눅스 기반의 실행환경과 비슷하게 개발환경을 윈도우에 구성하기 위해서는, 리눅스 서버에서 실행되는 프로그램에 대응하는 윈도우 프로그램 들을 하나씩 설치하면서 환경을 비슷하게 맞추는 노력이 필요하다. 하지만, 리눅스 서버와 유사한 환경을 만들 수 있다면 서버에서 작업할 때와 비슷한 명령을 사용해서 쉽게 구성 수 있기 때문에, 이런 유사한 환경을 제공하는 MinGW를 설치하기 위해 과거에는 Cygwin이나 MSYS2를 많이 이용했었다.
하지만 최근에는 Git을 설치하면 따라서 설치되는 MinGW환경, Git Bash를 많이 사용하는 분위기이다. Git Bash는
- MinGW를 바탕으로 하는 윈도우 프로그램이고,
- 별도의 가상환경이나 플랫폼 없이 가볍게 실행되며,
- 나처럼 노트북으로 작업하는 사람들이 CPU사용량을 줄여 배테리를 절약할 수 있어 장시간 작업할 수 있는 장점이 있다.
하지만, 그래도 리눅스서버 환경을 그대로 사용해야 하는 경우가 생긴다면, WSL 2로 우분투를 설치하고 네트워크 문제를 해결하기 위해 노력하기보다, 때로는 간편하게 Docker로 우분투를 만들고 필요한 패키지를 설치해서 사용해 보는 것도 좋은 대안인 것 같다.
물론, 이렇게 만드는 Docker환경은
- 개발 또는 또는 테스트를 위한 환경이고,
- 한 번에 하나의 작업만을 올리는 것을 권고하는 Docker사용 기준에는 맞지 않으며,
- 패키지를 설치하면서 잠겨있는 권한을 열기도 하기 때문에 보안에도 문제가 있을 수 있어 그대로 운영에 적용하는 것은 바람직하지 않다.
1. Docker로 우분투 서버 만들기
먼저, 윈도우에 Docker Desktop이 설치되어 있지 않으면 설치한다.
- Docker에서 우분투 이미지를 검색해 본다.
docker search ubuntu
- 우분투 이미지를 내 컴퓨터에 내려받는다.
검색결과에는 ngingx, squid, apache2, mysql 등 패키지가 설치되어 있는 우분투 이미지가 많았는데, 아무 패키지도 설치되어 있지 않는 우분투 이미지를 내려받는다. 버전을 지정하지 않으면 최신버전(latest)을 내려받기 때문에, 만일 원하는 버전이 있는 경우 ubuntu:18.04와 같이 버전을 지정한다.
docker pull ubuntu
- docker로 우분투를 실행하고 bash로 접속한다.
만일 이미 한번 사용한 컨테이너가 있는 경우 --rm (remove) 옵션을 추가해서 컨테이너를 생성하기 전에 먼저 삭제하고, 그렇지 않은 경우 아래 명령으로 우분투 컨테이너를 만들고 /bin/bash를 실행하고 명령을 넣을 수 있게 -it (interactive tty) 옵션으로 접속한다.
docker run --rm -it ubuntu /bin/bash
- lsb-core를 설치한다.
"apt update"로 repository의 정보를 업데이트해서 패키지 설치가 가능하게 만들고, 다양한 패키지 설치에 필요한 lsb-core(Linux Standard Base core support package)를 설치한다.
apt update && apt install lsb-core -y
lsb-core를 설치하면 아래 화면에서 확인할 수 있듯이 많은 패키지들이 설치되기 때문에 네트워크 속도에 따라 다운로드하는 데에도 많은 시간이 걸리는 것을 화인 할 수 있었다.
- 이제 몇몇 우분투 명령어를 실행하고 정보를 확인해 본다.
lsb_release -d
로 확인해 보면 현재 내가 실행하고 있는 우분투가 "Ubuntu 22.04.3 LTS"인 것을 확인할 수 있었고, curl, tar, python3 같은 많이 사용하는 명령어들이 실행되는 것을 확인할 수 있었다.
여기서부터 실제 서버 구성에 따라 필요한 패키지들을 추가로 설치할 수 있지만, 나는 여기서 잠시 멈추고 현재까지 설치된 내용을 저장해서 다시 사용할 수 있도록 이미지로 만들기로 했다.
- 먼저, Ctrl+p, Ctrl+q로 현재 컨테이너를 종료하지 않고 Cmd로 빠져나간다.
- 이제, commit 명령으로 컨테이너를 image로 저장한다.
docker commit [컨테이너id] [사용할 이미지 이름]:[사용할 버전]
- 그런 다음, image목록을 검색하고 내가 저장한 이미지가 있는지 확인한다.
docker image list
테스트를 위해 새로운 컨테이너를 내가 만든 이미지(여기서는 lsb-ubuntu)에서 만들고 lsb-core에서 설치한 명령어를 실행해 보면 정상적으로 동작하는 것을 확인할 수 있다.
docker run -it [새로 만든 이미지 이름] /bin/bash
2. Unminimize
docker로 설치한 우분투는 기본적으로 minimized version이다. Full version 우분투에 설치된 패키지를 한 번에 설치하는 또 다른 방법은 unminimize 명령을 사용하는 것이다.
이 절차 역시 다운로드 시간이 많이 걸리기 때문에 자주 사용하려 한다면, Ctrl+p, Ctrl+q를 눌러 컨테이너를 빠져나온 다음 commit으로 이미지를 저장하면, 다음에 바로 시작할 수 있을 것이다.
결과에서 볼 수 있듯이 이미지 크기는 unminimized version이 lsb-core를 설치한 것에 비해 적은 사이즈인 것을 확인할 수 있다. 설치되어 있는 패키지 목록에서 확인할 수 있듯이 unminimized version에는 gcc, make, python3등 python을 이용해서 시스템 자동화를 시키는 작업까지 바로 테스트해 볼 수 있고, c나 ruby 등 library를 추가로 설치할 때 gcc를 사용해서 패키지를 리빌딩해 줘야 하는 경우 유리할 것으로 보인다.
'윈도우 개발환경' 카테고리의 다른 글
Docker로 테스트 환경 만들기; 2. 우분투 데스크탑 만들기 (0) | 2023.12.12 |
---|---|
윈도우에 만드는 파이썬 개발 환경; 4. VSCode에 Jupyter연결 (0) | 2023.12.01 |
Git Bash 활용하기 - 2. 리눅스 기능으로 Node.js 개발환경 만들기 (1) | 2023.10.19 |
윈도우에 만드는 리눅스 개발 환경; 7. 윈도우 11에 우분투 설치 (0) | 2023.09.10 |
윈도우에 만드는 파이썬 개발 환경; 3. 아나콘다 없이 무료로 Jupyter notebook 설치 (0) | 2023.05.18 |