1. 개요

도커에 익숙해지기 위해 완성된 컨테이너를 지우고 다시 만드는 과정만 어인 1주가 지났지만 예기치 않은 오류가 종종 생겼다. 따라서 노션에 정리해뒀던 기본 명령어를 정리해서 여기에 올리고자 한다. 아직 없는 것도 많아서 추가될 수 있다..(진짜 몰라서)

이번 게시글에선 다음과 같이 진행될 예정이다

  1. 컨테이너 제어 명령어 
  2. 파이썬 2,3 설치
  3. 파이썬 가상 환경 설치 및 활성화

2. 컨테이너 제어 명령어

기존에 설치했던 도커 데스크탑에서 터미널을 열어 진행하고자 한다. 파워셀을 열고 싶다면 두번째 사진과 같이 윈도우 로고 옆 검색창에서 powershell을 찾아 실행해준다.

[사진1] 도커 데스크탑 터미널과 파워셀

2-1. 설치된 도커 확인하기

docker --version
>> Docker version 27.5.1, build 9f9e405

2-2. 현재 실행 중인 컨테이너 확인하기

dockcer ps -a

2-3. 도커 이미지 가져오기

docker pull ubuntu:[tag]
docker pull ubuntu:latest
  • docker pull :  도커 hub에 있는 이미지를 가져온다.
  • ubuntu:latest : 최근 우분투 버전으로. (우분투 뒤에 붙어있는 ' : ' 이거는 tag라고 하며 뒤에 원하는 버전을 입력할 수 있다)
  • 밑에 있는 링크에서 태그 목록을 확인할 수 있다.
 

ubuntu Tags | Docker Hub

docker pull ubuntu:oracular-20241120

hub.docker.com

2-4. 도커 컨테이너 실행하기

docker run -it --name [컨테이너 이름] ubuntu bash
  • -it : 터미널 모드로 실행
  • --name [컨테이너 이름] : 컨테이너 이름을 정해줘야 한다.
  • ubuntu : 최신 우분투 이미지 사용
  • bash : 컨테이너 내부에서 bash 셸을 사용한다

2-3. 생성한 컨테이너 터미널로 진입하기

docker exec -it [컨테이너 이름] bash

2-4. 필수 유틸리티 설치

우분투 컨테이너는 초반에 필수 유틸리티가 깔려져 있지 않아 nano, vi같은 에디터나 ifconfig 같은 명령어를 사용할 수 없는 상태이기 때문에 컨테이너에 진입한 상태에서 개별적으로 설치해줘야한다.  

apt update && apt install -y curl net-tools nano vim
  • curl : Client URL의 약자로, URL을 사용해서 데이터를 가져오는 데 필요함
  • net-tools : 리눅스에서의 네트워크 관리 명령어가 담긴 패키지(ex. ifconfig)
  • nano vim : nano는 간단하게 텍스트 편집하기 좋고,  vim은 초보자들이 사용하기엔 복잡하지만 기능이 많고 성능이 좋다

2-5. 컨테이너 정지 및 삭제

docker stop [컨테이너 이름]
docker rm [컨테이너 이름]

2-6. 컨테이너 실행

docker start [컨테이너 이름]
docker attach [컨테이너 이름]

2-7. 컨테이너를 이미지로 저장

docker commit [컨테이너 이름] [이미지 이름]
docker commit my-first-docker my-first-docker-image

3. 파이썬 2, 3 설치

파이썬3은 알겠는데 2는 왜 설치하는지 궁금할 수 있는데 구버전 익스플로잇이나 워게임에서 파이썬2 기반으로 작성된 코드를 만날 수 있다. 다만 pip끼리 충돌나는 건 방지하기 위해 파이썬2는 최소한으로 깔아두고 3버전에 좀 더 치중하기로 한다.

3-1. 우분투 시스템 최신화 및 업데이트 후 파이썬 설치

apt update && apt upgrade
apt install -y python2 python2-dev python3 python3-pip

[참고사항!] 만약 설치 중 Geographic Area나 TimeZone 관련된 문구 나올 시 5번(Asia) / 68번(Seoul) 순으로 입력해주면 된다

3-2. 파이썬 버전 및 pip 버전 확인

python2 --version
python3 --version
pip3 --version

3. 파이썬 가상환경 설치 및 활성화 

가상환경 venv를 사용하면 우분투 시스템에 영향을 주지 않고 격리된 환경에서 패키지를 관리하거나 패키지를 설치할 수 있다. 이건 파이썬 3버전으로 설치해보기로 한다.

3-1. 가상환경 설치 및 생성

apt update && apt install -y python3.12-venv
python3 -m venv venv
  • python3 -m venv : 파이썬의 venv 모듈을 실행한다
  • venv : 가상환경을 만들 폴더 이름

3-2. 가상환경 활성화 / 비활성화

source venv/bin/activate
deactivate

 

'컴퓨터 > Server' 카테고리의 다른 글

[Docker] 포트포워딩으로 웹서버를 열어보자  (0) 2025.02.17

1. 개요

예전에 팀 프로젝트로 구글 클라우드를 사용해서 웹사이트를 구축하고 외부에 웹서버를 열었던 게 생각나는데, 원래 방법은 클라우드 대신 도커와 포트포워딩을 함꼐 사용하는 것이었지만, 어디선가 계속 막혔기에 개별적으로 공부했던 걸 올리기로 해봅니다.

2. 포트포워딩의 목적

[대표사진] 포트포워딩을 간략히 그린 구성도

포트포워딩(Port Forwarding)이란 말은 생소할 수 있지만, 개념 자체가 어렵진 않습니다. 지금 내 컴퓨터, 휴대폰이 사용하고 있는 네트워크가 바로  내부 네트워크이며, 여기에서 실행한 서버를 로컬 서버라고 합니다.
하지만 로컬 서버는 같은 네트워크 안에서만 접근할 수 있기 때문에, 외부에서도 내 서버에 접속하려면 별도의 설정이 필요합니다. 이때, 특정 포트를 열어 외부에서 내 서버로 연결될 수 있도록 공유기에 알려주는 작업을 포트포워딩이라고 하며, 이를 설정하면 내 컴퓨터에서 직접 웹사이트(블로그, 쇼핑몰 등의 각종 서비스)를 운영할 수도 있습니다.

3. 실습환경 구성 및 과정

[사전 준비사항] : 도커 데스크탑 설치

혹시 도커 데스크탑 설치가 안되어있다면, 하단의 링크에서 사용하는 운영체제에 맞게 설치하면 됩니다.

 

Docker: Accelerated Container Application Development

Docker is a platform designed to help developers build, share, and run container applications. We handle the tedious setup, so you can focus on the code.

www.docker.com

다음은 도커에서 실습할 환경의 구성을 간략히 정리한 표로, Ubuntu / Apache / PHP가 설치된 환경에서 진행될 예정입니다.

Docker 실습 환경 구성
운영체제 웹 서버 사용 언어
Ubuntu 24.04 Apache PHP

실습하려는 과정을 단계적으로 나열하면 다음과 같습니다. 

  1. 도커 데스크탑에서 우분투 컨테이너 실행 및 포트포워딩 설정
  2. 현재 컨테이너에 PHP, Apache 설치
  3. phpinfo 페이지 생성
  4. 외부 접속을 위해 공유기에서 포트포워딩 설정
  5. 외부에서 접속 후 확인

3-1.도커 데스크탑에서 우분투 컨테이너  실행 및 포트포워딩 설정

[사진1] 우분투 컨테이너 실행 및 포트 설정 결과

 도커에서 우측 하단의 터미널을 열거나 따로 파워셀을 열어서 다음의 명령어를 입력합니다.

docker run -dit --name [컨테이너 이름] -p 8080:80 ubuntu:24.04
  • --name [컨테이너 이름] : 여기선 사용자가 직접 이름을 설정해주면 되며, 이 글의 경우 my-first-server
  • -p 8080:80 : 호스트 컴퓨터, 즉 지금 사용하고 있는 컴퓨터의 8080번 포트를 도커 컨테이너의 80번 포트와 연결
  • ubuntu:24.04 : 사용하려는 환경을 우분투 24.04 이미지로 설정

3-2. 현재 컨테이너에 PHP, Apache 설치

[사진2] 도커 컨테이너에 접속한 상태

우선 컨테이너에 접속하기 위해 다음의 명령어를 입력합니다.

docker exec -it my-first-server bash

다음으로, 컨테이너 내부의 패키지 업데이트 및 Apache,PHP를 설치합니다.

apt update && apt upgrade -y
apt install -y curl
apt install -y apache2 php libapache2-mod-php

[참고사항1] 설치할 때 "Please selecet the geographic area in which you live"가 뜨면, 다음처럼 입력해주면 됩니다.

  • Geographic area : 5
  • Timezone : 68

[사진3,4] Geographic area 및 timezone 설정

3-3. phpinfo 페이지 생성

[사진5] phpinfo 페이지 작성 후 확인

서버가 정상적으로 작동하는 걸 눈으로 확인하기 위해 Apache가 설치된 경로에 phpinfo 라는 php를 생성합니다.
정상적으로 작성했을 경우, 해당 경로로 들어가 확인해보면 됩니다.

echo "<?php phpinfo(); ?>" > /var/www/html/phpinfo.php
cd /var/www/html
cat phpinfo.php
  • echo "<?php phpinfo(); ?>" /var/www/html/phpinfo.php : phpinfo 페이지를 Apache 기본 경로에 생성
  • cd /var/www/html : Apache가 제공하는 웹 문서(HTML, PHP 등)를 저장하는 기본 경로로 이동
  • cat phpinfo.php : 터미널 창에서 phpinfo.php 파일의 내용을 확인

다음으로 Apache 웹 서버를 실행한 후, 확인을 위해 두번째 코드에 적혀있는 주소로 접속해봅니다.

service apache2 start
http://localhost:8080/phpinfo.php

[참고사항2] "AH00558: apache2: Could not reliably determine the server's fully qualified domain name" 뜰 때

[사진6] service apache2 start가 안되는 경우

Apache가 서버의 도메인 이름을 자동으로 찾으려고 하는데, 도커 컨테이너는 도메인 설정이 없어서 뜨는 경고로, 지금은 연습차원이니 무시해도 되지만 메시지를 출력하고 싶지 않으면 다음의 명령어를 입력합니다.

echo "Servername localhost" >> /etc/apache2/apache2.conf
service apache2 restart
  • Servername localhost : Apache가 도메인을 찾지 않게 설정 후 경고 메세지를 출력하지 않음
  • service apache2 restart : Apache를 재시작합니다. 

성공하면 다음처럼 뜹니다.

[사진7] 굉장히 아름다운 비주얼..이 아니라 phpinfo.php 페이지 출력 확인

3-4. 외부 접속을 위해 공유기에서 포트포워딩 설정

이제 테스트 환경을 모두 세팅했지만 현재 사용하고 있는 컴퓨터에서만 접속이 가능한 상태입니다.
따라서 사용하고 있는 공유기에 따라 관리자 페이지로 접속 후에 포트포워딩을 진행해야 합니다.

제 공유기의 경우, iptime을 사용하고 있으므로 192.168.0.1로 접속하겠습니다. (비번 까먹었음)

[사진6] 공유기 관리자 페이지 진입 후 설정

외부 포트 8080
내부 IP (호스트 컴퓨터 내부 IP) 192.168.x.xxx
내부 포트 8080

포워딩 설정을 해야하는데, 상단의 표처럼 입력한 후 터미널에서 공인 IP를 확인합니다. 확인할 주소는 두번째 코드입니다.

curl ifconfig.me
http://공인IP:8080/phpinfo.php

3-5. 외부에서 접속 후 확인

외부에서 접속할 때 이 페이지가 뜨면 성공입니다.

[사진7,8] 데스크탑, 모바일에서 확인할 경우

4. 마무리

이제 원래 상태로 되돌려 놓기 위해 다음의 단계를 거쳐야 합니다. 

  1. Apache 서버 중지 후 phpinfo.php 삭제
  2. 공유기 관리자 페이지에서 포트포워딩 규칙 삭제
  3. 현재 작동 중인 도커 컨테이너 중단 및 삭제

4-1. Apache 서버 중지 후 phpinfo.php 삭제

service apache2 stop
rm /var/www/html/phpinfo.php

4-2. 공유기 관리자 페이지에서 포트포워딩 규칙 삭제

이건 개별적인 것으로, 아까처럼 각자의 공유기에 맞는 관리자 페이지에 들어가 삭제해주시면 됩니다.

4-3. 현재 작동 중인 도커 컨테이너 중단 및 삭제

도커 데스크탑에서 그냥 중지 버튼 눌러도 되지만 명령어로 입력하려면 다음처럼 입력해줍니다.

exit
docker ps
docker stop <컨테이너 이름 및 ID>
docker rm <컨테이너 이름 및 ID>

 

'컴퓨터 > Server' 카테고리의 다른 글

[Docker] 도커 기본 명령어 모음  (0) 2025.02.17

+ Recent posts