도커 실습 1 - 컨테이너 연동, 파일 복사, 볼륨 마운트, 도커 이미지 생성 > 도커 & 쿠버네티스

본문 바로가기

[실습] 도커 실습 1 - 컨테이너 연동, 파일 복사, 볼륨 마운트, 도커 이미지 생성

필기자
2024-09-21 10:40 1,584 0

본문


목차
  • 컨테이너 연동
  • 파일 복사
  • 볼륨 마운트
  • 도커 이미지 생성

컨테이너 연동

컨테이너 연동 실습 시나리오
  • network 구성
  • mysql 컨테이너 설치
  • 워드프레스 컨테이너 설치
  • 워드프레스 <-> mysql 연동

워드 프레스
  • 웹 사이트를 만들기 위한 소프트웨어
  • 워드프레스가 동작하려면 워드프레스 프로그램 외에도 아파치, 데이터베이스, PHP 런타임 필요
  • 워드프레스 공식 이미지에 워드프레스 프로그램(본체)와 아파치, PHP 런타임 포함
  • 워드프레스는 데이터베이스 중 MySQL 및 MariaDB를 지원


2049277881_9zoLg8nt_4987d7f8fad0c110a0d15f141d5b43a39e088dac.png


도커 네트워크 생성
  • 워드프레스 프로그램이 MySQL에 저장된 데이터를 읽고 쓰기 위해 두 컨테이너가 연결되어야 함
  • 가상 네트워크를 생성하고 이 네트워크에 두 개의 컨테이너를 소속시켜 두 컨테이너를 연결


#네트워크 생성
docker network create wordpress000net1

2049277881_tmGWZw2U_eed1320bb56a849f7a17512fce650b3df2611e3e.png

MySQL 컨테이너 생성 
  • 데이터베이스 서버를 미리 구축하고 설정한 후 워드프레스 컨테이너와 연동하여 사용하기 위해 MySQL 컨테이너를 먼저 생성
    • 컨테이너가 중지되었을 때 자동 재시작 옵션 : --restart unless-stopped

#MySQL 컨테이너 생성
docker run --name mysql000ex11 -dit --net=wordpress000net1 -e MYSQL_ROOT_PASSWORD=myrootpass -e MYSQL_DATABASE=wordpress000db -e MYSQL_USER=wordpress000kun -e MYSQL_PASSWORD=wkunpass mysql:8.0 --character-set-server=utf8mb4 --collation-server=utf8mb4_unicode_ci --default-authentication-plugin=mysql_native_password

2049277881_EngQi1Fq_631c940d62d7652fbd7902b326a3691f41b7b31c.png

MySQL 컨테이너 생성시 각 옵션 및 인자의 역할
  • MySQL 데이터베이스를 초기화하고 워드프레스와 연동하기 위해 필요한 설정을 지정
옵션 및 인자 의미
--net=wordpress000net1 ‘wordpress000net1’ 네트워크에 컨테이너 연결
-e MYSQL_ROOT_PASSWORD=myrootpass MySQL 루트 계정의 비밀번호를 ‘myrootpass’ 설정
-e MYSQL_DATABASE=wordpress000db MySQL 데이터베이스의 이름을 ‘wordpress000db’ 설정
-e MYSQL_USER=wordpress000kun MySQL에 생성할 사용자 계정의 이름을 ‘wordpress000kun’으로 설정
-e MYSQL_PASSWORD=wkunpass 위 사용자 계정의 비밀번호를 ‘wkunpass’로 설정
--character-set-server=utf8mb4 MySQL 서버의 기본 문자셋을 ‘utf8mb4’로 설정
문자셋은 다양한 언어와 이모지를 지원하는 유니코드 문자셋
--collation-server=utf8mb4_unicode_ci MySQL 서버의 기본 콜레이션(정렬 규칙)을 ‘utf8mb4_unicode_ci’로 설정
콜레이션은 문자열 비교와 정렬 방식을 지정, 유니코드 문자열의 비교를 위해 사용
정렬 규칙은 문자열을 비교하고 정렬하는 방식을 정의함
utf8mb4_unicode_ci는 유니코드 문자 정렬을 기준으로 하며, 대소문자를 구분하지
않고 비교 및 정렬하는 Case Insensitive(CI) 방식
--default-authentication-plugin=mysql_native_password MySQL 사용자 계정의 기본 인증 플러그인을 mysql_native_password로 설정
  - caching_sha2_password :  SHA-256, 8.0부터 지원 강력한 암호화
  - mysql_native_password : SHA-1, 5.0부터 지원, 구버전
  - auth_socket : 운영체제 계정, 로컬 연결
  - auth_pam : 운영체제 계정, PAM(Pluggable Authentication Modules)
                    즉, 생체인식, OTP 등등 연결

워드프레스 컨테이너 생성


#워드프레스 컨테이너 생성
docker run --name wordpress000ex12 -dit --net=wordpress000net1 -p 8085:80 -e WORDPRESS_DB_HOST=mysql000ex11 -e WORDPRESS_DB_NAME=wordpress000db -e WORDPRESS_DB_USER=wordpress000kun -e WORDPRESS_DB_PASSWORD=wkunpass wordpress

2049277881_vNRX3aoq_5acccda611d8f4a5b310a59d7d0914aa47bc575e.png

워드프레스 컨테이너 생성시 각 옵션 및 인자의 역할
  • 워드프레스와 MySQL 간의 연동을 위해 설정한 데이터베이스 정보를 워드프레스 컨테이너에 전달
옵션 및 인자 의미
--net=wordpress000net1 ‘wordpress000net1’ 네트워크에 컨테이너 연결
-p 8085:80 호스트의 8085 포트와 컨테이너의 80 포트를 매핑하여 외부에서 컨테이너에 접근 가능
-e WORDPRESS_DB_HOST=mysql000ex11 워드프레스가 사용할 MySQL 데이터베이스 호스트의 주소를 ‘mysql000ex11’ 설정
-e WORDPRESS_DB_NAME=wordpress000db 워드프레스가 사용할 데이터베이스의 이름을 ‘wordpress000db‘로 설정
-e WORDPRESS_DB_USER=wordpress000kun 워드프레스와 연결할 데이터베이스 사용자 계정의 이름을 ‘wordpress000kun’ 설정
-e WORDPRESS_DB_PASSWORD=wkunpass 위 사용자 계정의 비밀번호를 ‘wkunpass’로 설정

웹 브라우저를 통해 로컬호스트와 해당 포트번호로 접속 워드프레스 초기 화면
2049277881_DUlFYX0R_9e0d5e1eb8d4503e014f70779265168a017cfe8b.png

워드프레스 가입
  • 정보를 입력한 후 '워드프레스 설치' 버튼 클릭
2049277881_3RIU6qAG_6290344d73e9b5554fb5913e18acc6e66a03edc1.png

MySQL 컨테이너 내부에 접속하여 워드프레스와 연동이 되어 있는지 가입한 계정 정보 확인
  • 컨테이너에서 리눅스 명령어를 실행하려면 우리 명령을 전달하는 프로그램인 셸(Shell)이 필요

#MySQL 컨테이너 내부로 들어가서 'bash'라는 셸 프로그램 실행
docker exec -it mysql000ex11 bash



#MySQL 데이터베이스 서버에 'wordpress000kun' 사용자로 접속
mysql -u wordpress000kun -p

2049277881_XwAng6Ko_80be980a74434544ab39aeacc111eb89575388a6.png

계정 정보가 있는 데이터베이스 및 테이블 확인


#사용할 데이터베이스 선택
use wordpress000db;



#계정에 있는 모든 테이블 확인
SHOW TABLES;

2049277881_D1P7dkA4_bbdcff134f14f5b068acefcee0d48ae8dfcfd48d.png

계정 정보가 있는 테이블 확인


#계정 정보가 있는 테이블 확인
SELECT * FROM wp_users;

2049277881_8REfokKi_f89e2b6c4bc473fed119a47ab6055c121e641f88.png

도커 명령어 실행을 위해 MySQL 서버 및 컨테이너에서 나가기


#나가기
exit

2049277881_S72sX08u_005003978907f9534bdeca57b33ccd71c43a4f7d.png

워드프레스 사이트 구축 정리
  • 컨테이너 종료
    • docker stop mysql000ex11
    • docker stop wordpress000ex12
  • 컨테이너 삭제
    • docker rm mysql000ex11
    • docker rm wordpress000ex12
  • 이미지 삭제
    • docker image rm mysql
    • docker image rm wordpress
  • 네트워크 삭제
    • docker network rm wordpress000net1

워드프레스 사이트 시스템 구성 및 데이터 흐름
20241018200212_4536f0e37b95d727ccf5a11734363655_qfsu.png
  1. 윈도우(호스트) == 가상 NAT 라우터 (게이트웨이 IP: 192.168.135.1)
    • 역할: VMware의 NAT 라우터로서 외부 네트워크와 내부 네트워크 간의 IP 변환(NAT)을 수행한다.
    • 기능: 외부에서 들어오는 요청을 가상 네트워크로 전달하고, 내부 네트워크에서 나가는 트래픽을 외부 네트워크로 변환하여 전달한다.
    • 입력 포트 IP: 172.25.80.1 (윈도우 랜카드의 IP)
    • 출력 포트 IP: 192.168.135.1 (VMware 내부 네트워크의 게이트웨이 IP)
  2. 가상 스위치 (VMware 네트워크 내)
    • 역할: 윈도우(호스트)와 우분투(게스트) 간의 네트워크 트래픽을 스위칭한다.
    • 기능: VMware 내부에서 호스트와 게스트 간의 패킷을 MAC 주소 기반으로 전달하며, 물리적 스위치처럼 작동한다.
  3. 우분투(게스트) == 가상 NAT 라우터 (게이트웨이 IP: 172.18.0.1)
    • 역할: Docker 네트워크 내부의 NAT 라우터로, 내부 컨테이너 간 패킷 라우팅을 수행하고, IP 변환을 통해 외부와 통신한다.
    • 입력 포트 IP: 192.168.135.130 (VMware 우분투 IP)
    • 출력 포트 IP: 172.18.0.1 (Docker 가상 네트워크의 게이트웨이 IP)
    • NAT 기능
      • 내부 IP를 외부에 숨기고, 외부에서 들어오는 트래픽을 내부 적절한 IP로 전달한다.
    • 포트포워(Port Forword) 기능
      • NAT 기능의 일부이다.
      • 외부 특정 포트로 들어오는 트래픽을 내부의 특정 IP와 포트로 전달
        • docker run --name wordpress000ex12 -dit --net=wordpress000net1 -p 8085:80 ...
          • 8085 포트의 패킷을 -> wordpress000ex12:80으로 즉 결정된 IP와포트(172.18.0.3:80)로 패킷을 전달한다.
  4. 가상의 스위치 (Docker 네트워크 내)
    • 역할: Docker 네트워크 내부에서 컨테이너 간 패킷을 전달하는 스위치 역할을 한다.
    • 기능: Docker 네트워크 내에서 각 컨테이너 간의 트래픽을 관리하고 MAC 주소를 기반으로 전달한다.
  5. 워드프레스 컨테이너 (IP: 172.18.0.3)
    • 역할: 웹 애플리케이션 제공 컨테이너로, Docker 네트워크에서 실행된다.
    • 기능: 웹 요청을 처리하고, 데이터베이스와 통신한다.
  6. MySQL 컨테이너 (IP: 172.18.0.4)
    • 역할: 데이터베이스 제공 컨테이너로, 워드프레스 컨테이너와 통신한다.
    • 기능: 데이터 저장 및 조회 작업을 처리한다.

파일 복사

컨테이너 내부와 호스트 간에 파일을 복사하는 작업의 필요성
  • 데이터 복원 
    • 컨테이너 안의 데이터를 호스트로 백업하거나, 호스트에서 데이터를 컨테이너로 복원할 때 필요
    • 중요한 데이터를 보존하고 컨테이너가 삭제되더라도 안전하게 데이터를 유지
  • 파일 공유
    • 호스트와 컨테이너 간 파일 공유 시 사용
    • 컨테이너 내에서 생성된 결과물이나 로그 파일 등을 호스트에서 확인하고 사용
    • 컨테이너에서 생성된 파일을 호스트에서 사용해야 할 때

파일 복사 명령어
  • 파일 복사는 양방향 모두 가능
  • 컨테이너로 파일을 복사하는 커맨드 사용 예(호스트 -> 컨테이너)
    • docker cp [호스트_경로] [컨테이너_이름] : [컨테이너_경로]
  • 호스트로 파일을 복사하는 커맨드 사용 예(컨테이너 -> 호스트)
    • docker cp [컨테이너_이름] : [컨테이너_경로] [호스트_경로]

컨테이너와 호스트 간에 파일 복사 실습
  • 호스트의 html 파일을 아파치 컨테이너 내부로 복사하여 초기 화면 변경

디렉토리 생성 및 html 파일 생성

#홈 디렉토리 아래 '~/example_html' 디렉토리 생성
mkdir ~/example_html



#nano 텍스트 에디터를 사용 '~/example_html' 디렉토리에 새로운 HTML 파일 생성
nano ~/example_html/index.html

html 내용 작성

<html>
    <meta charset="utf-8"/>
    <body>
        <div> 안녕하세요! </div>
    </body>
</html>


아파치 컨테이너 생성 

#아파치 컨테이너 생성
docker run --name apa000ex19 -d -p 8089:80 httpd

웹 브라우저를 통해 로컬호스트와 해당 포트번호로 접속 2049277881_XVifNrEB_3c92d35e7646f0ea992445c6d9bb89853b98ac46.png

복사 명령어로 호스트에서 컨테이너로 index.html 파일 복사

#'~/example_html/index.html' 파일을 아파치 컨테이너인 'apa000ex19'의 '/usr/local/apache2/htdocs/' 경로로 복사
#아파치 컨테이너의 경로는 아파치 서버가 웹 브라우저에 제공하는 웹 루트 디렉토리
docker cp ~/example_html/index.html apa000ex19:/usr/local/apache2/htdocs/



웹 브라우저에서 로컬호스트와 지정된 포트 번호로 접속하여 업데이트된 초기 화면을 확인 2049277881_Hs4KYx7S_b4ce3371b03e38a37ae7edf12f84747ce60b3e4c.png

볼륨 & 마운트

컨테이너의 휘발성
  • 컨테이너가 시작되고 실행되는 동안에는 컨테이너 내의 모든 데이터 및 상태가 보존
  • 컨테이너가 삭제되면 컨테이너 내부의 데이터와 상태는 사라짐(파일, 프로세스 상태, 메모리 내용 등)
  • 컨테이너의 휘발성을 극복하기 위해 볼륨이라는 저장 공간을 이용해 데이터의 영속성을 보장

도커 볼륨(Docker Volume)
  • 컨테이너와 호스트 머신 간 데이터를 안전하게 저장, 관리 및 공유하기 위한 독립적인 저장 공간
  • 도커 엔진에 의해 관리되며 호스트 머신의 파일 시스템과는 분리되어 작동
  • 데이터의 영속성을 보장하고 여러 컨테이너 간에 데이터를 공유 및 백업이 가능

데이터 퍼시스턴시(data persistency)
  • 데이터를 옮기는 작업 대신 처음부터 컨테이너 외부에 데이터를 보관하고 이를 컨테이너에서 사용하는 개념
  • 바인드 마운트, 도커 볼륨

마운트
  • 데이터 퍼시스턴시 구현 방법, 즉 마운트는 데이터시스턴시를 구현하는 방법임
  • 호스트의 파일 시스템이나 볼륨을 도커 컨테이너 내부의 특정 경로에 연결하는 작업

마운트의 종류 
  • 바인드 마운트(Bind Mount)
    • 호스트 머신의 디렉토리를 컨테이너 내부에 마운트하여 데이터를 실시간으로 동기화하는 방식
    • 주로 개발 중인 소스 코드나 파일을 컨테이너와 컴퓨터 간에 실시간으로 공유하고 변경 내용을 바로 확인할 때 사용
    • 개발 작업을 편리하게 하고 컨테이너와 호스트 간에 데이터를 손쉽게 주고받을 수 있음
  • 도커 볼륨(Docker Volume)
    • 볼륨은 컨테이너에 디스크 형태로 마운트되어 안전하게 데이터를 저장하고 공유하는 방식
    • 데이터베이스나 중요한 설정 파일과 같은 컨테이너 안의 파일을 안전하게 보관하고 다른 컨테이너와 공유할 때 사용
    • 컨테이너 간 데이터를 안전하게 공유하고 영속성을 확보

바인드 마운트 실습
  • 호스트 머신에 디렉토리 생성 후 컨테이너의 내부 경로와 마운트 및 초기 화면 변경

#홈 디렉토리 아래 마운트 할 디렉토리 생성
mkdir ~/apa_folder



#디렉토리와 마운트하는 아파치 컨테이너 생성
#'~/apa_folder' 디렉토리를 아파치 컨테이너의 '/usr/local/apache2/htdocs' 경로로 연결
docker run --name apa000ex20 -d -p 8090:80 -v ~/apa_folder:/usr/local/apache2/htdocs httpd


웹 브라우저에서 로컬호스트와 지정된 포트 번호로 접속하여 초기 화면 확인
  • http://localhost:8090
  • 아무 파일도 없는 경우 "It works"와 같은 기본 초기 화면이 출력되지만, 폴더가 마운트되면 해당 폴더 내의 파일 및 디렉토리 목록이 "Index of /" 초기 화면에 표시
2049277881_hsyTHcIP_a42abe40149c63aa78d4fd3d4ea8b1742b858b54.png

마운트된 디렉토리 경로에 HTML 파일을 넣어 초기 화면을 실시간으로 변경



#nano 텍스트 에디터를 사용 '~/apa_folder' 디렉토리에 새로운 HTML 파일 생성
nano ~/apa_folder/index.html
  • 작성 후 변경 사항 저장 에디터 종료

<html>
    <meta charset="utf-8"/>
    <body>
        <div> 안녕하세요! </div>
    </body>
</html>


웹 브라우저에서 로컬호스트와 지정된 포트 번호로 접속하여 업데이트된 초기 화면을 확인
2049277881_WS6yepsr_d8fd0640baca6b00cb56bf5f4631a1a8f543d215.png

볼륨 마운트 실습
  • 볼륨 생성 후 컨테이너의 내부 경로와 마운트 및 초기 화면 변경


#볼륨 생성
docker volume create apa000vol1



#볼륨을 마운트하는 아파치 컨테이너를 생성
docker run --name apa000ex21 -d -p 8091:80 -v apa000vol1:/usr/local/apache2/htdocs httpd

docker exec -it apa000ex21 /bin/bash -c "chown -R $(id -u):$(id -g) /usr/local/apache2/htdocs"
docker stop apa000ex21
docker rm apa000ex21
docker run --name apa000ex21 -d -p 8091:80 -v apa000vol1:/usr/local/apache2/htdocs --user $(id -u):$(id -g) httpd



#볼륨 상세 정보 확인
docker volume inspect apa000vol1

2049277881_azsUlAOq_73d8e8994e87fed1825e187fe097d4adcdd1f6fa.png


#컨테이너 상세 정보 확인
docker container inspect apa000ex21

2049277881_sVjCLAUH_625f42a70ac2a3c088e2794525a6891be21775e5.png


#볼륨 경로에서 'index.html' 파일 변경
nano /var/lib/docker/volumes/apa000vol1/_data/index.html
  • 기존 초기 화면 html

<html>
    <body>
        <h1>It works!</h1>
    </body>
</html>
  • 업데이트된 초기 화면 html

<html>
    <body>
        <h1>Hello World!</h1>
    </body>
</html>

웹 브라우저에서 로컬호스트와 지정된 포트 번호로 접속하여 업데이트된 초기 화면을 확인 2049277881_lUrdMPpE_b42e3816cac17c14e42becbbd9a70889133193b4.png

도커 이미지 생성

컨테이너에서 이미지를 추출해 생성 실습


#아파치 컨테이너 생성
docker run --name apa000ex22 -d -p 8092:80 httpd



#컨테이너에서 현재 실행 중인 상태를 그대로 새로운 이미지로 생성
#docker commit [컨테이너_이름] [새로운_이미지_이름]
docker commit apa000ex22 ex22_original1



#이미지 목록 확인
docker image ls

2049277881_szQFb3f4_67e315940730bf63bd61ab779919152d0bc7b8c9.png

Dockerfile
  • 도커 이미지를 빌드하기 위한 텍스트 기반의 스크립트 또는 설정 파일
  • docker 스크립트를 재료 폴더에 컨테이너에 넣을 파일과 함께 두어 이미지 생성
  • docker build -t ex22_original2 [재료_폴더_경로]
2049277881_Bj9dXWD7_0365f8918ce0bc48f63766ed865cf481e1c5eb0b.png

Dockerfile로 이미지 생성 실습


#Dockerfile을 홈 디렉토리 아래 'apa_folder' 디렉토리에 생성
nano ~/apa_folder/dockerfile

2049277881_u3kBJO9U_bc6a1be89b2a85d28bc36f37efe1e40be12b037e.png

FROM httpd

COPY index.html /usr/local/apache2/htdocs/

# /tmp 디렉토리를 생성하고 권한을 설정합니다.
RUN mkdir -p /tmp && chmod 1777 /tmp

# 패키지 관리자를 업데이트하고 패키지를 설치합니다.
RUN apt-get update && \
    apt-get install -y apt-utils


#Dockerfile로 이미지 생성
#docker build -t [이미지_이름_지정] [재료_폴더_경로]
docker build -t ex22_original2 ~/apa_folder


특수 권한
  • SetUID (4xxx):

    • 주로 파일에 사용된다.
    • 파일 사용자가 해당 파일의 소유자의 권한으로 파일을 사용할 수 있다.
    • 디렉토리에서는 거의 사용되지 않는다.
  • SetGID (2xxx):

    • 파일이나 디렉토리에 사용된다.
    • 파일에 적용되면, 파일을 사용자가 해당 파일의 소유자의 그룹 권한으로 파일을 사용할 수 있다
    • 디렉토리에서는 SetGID가 설정되면, 그 디렉토리 내에서 생성된 파일들이 그 디렉토리의 그룹 소유권을 물려받는다.
  • Sticky bit (1xxx):

    • 주로 디렉토리에 사용된다.
    • 디렉토리 내에서 파일을 생성한 사용자만 그 파일을 삭제할 수 있도록 제한한다.

2049277881_I6hVwWPD_eddaf76b8318970ed498b1a4828553ba9b82440b.png


#이미지 목록 확인
docker image ls

2049277881_ZmI7SMct_3a6e51e86da86ef1e2afb9dd23f446dbb552897e.png


#생성 이미지로 컨테이너 생성
docker run --name ex22 -d -p 8099:80 ex22_original2


웹 브라우저에서 로컬호스트와 지정된 포트 번호로 접속하여 업데이트된 초기 화면을 확인 2049277881_fbsRIvEB_dcfd2333efb6cdefc992e30a1caefdc1c42056c5.png

컨테이너 개조
  • 컨테이너를 실행 중인 상태에서 컨테이너 내부의 파일 시스템, 환경 변수, 네트워크 설정 등을 변경하는 작업

컨테이너를 개조하는 방법
  • 마운트와 파일 복사를 이용
  • 컨테이너에서 리눅스 명령어 실행

컨테이너에서 명령어를 실행하려면 셸이 필요
  • 컨테이너는 가장 일반적으로 사용되는 셸인 'bash'가 설치 되어 있음
  • 컨테이너를 아무 설정 없이 실행하면 bash가 동작하지 않는 상태로 실행되기 때문에 bash를 실행해 명령을 입력받을 수 있는 상태로 만들어야 함
  • 'bash'를 실행하려면 '/bin/bash' 인자를 전달해야 함
  • docker run 또는 docker exec 커맨드와 함께 사용 

docker exec
  • 컨테이너 속에서 명령어를 실행하는 커맨드
  • 'bash' 없이 어느 정도 명령을 직접 전달할 수는 있지만 초기 설정이 없어 동작하지 않는 경우도 있기 때문에 기본적으로는 셸을 통해 명령을 실행
  • docker exec -it [컨테이너_이름] /bin/bash

docker run
  • docker run -dit [이미지_이름] /bin/bash
  • docker run 명령어를 사용해 bash 실행 시, 컨테이너는 실행 중이지만, 기본 패키지(예: Apache 등)는 실행되지 않음.
  • 수동으로 기본 패키지를 실행하여야 함.
    • 예, service apache2 start 또는 apachectl start (이미지와 배포판에 따라 명령어가 다를 수 있음)
  • docker run은 기본 사용만 권장, bash 실행이 필요할 경우 docker exec 사용여 컨테이너 내부로 접속 권장

도커 엔진 명령(도커 엔진 관리 범위)
  • 도커 엔진의 시작/종료
    • sudo systemctl start docker
    • sudo systemctl stop docker 등
  • 네트워크, 디스크 설정, 실행중인 컨테이너 목록 확인 등 컨테이너 전체에 대한 관리 작업
    • docker network create
    • docker volume create
    • docker ps 등
​​​​​​
컨테이너 내부에서 실행하는 명령
  • 컨테이너 속 새로운 소프트웨어 추가

docker exec -it [컨테이너_ID 또는 이름] /bin/bash
apt-get update
apt-get install nano  # 예: nano 텍스트 편집기 설치
  • 컨테이너 속 소프트웨어의 실행/종료/설정 변경

#Apache 서버 시작
docker exec -it [컨테이너_ID 또는 이름] service apache2 start

Nginx 서버 종료
docker exec -it [컨테이너_ID 또는 이름] service nginx stop
  • 컨테이너 안과 밖의 파일 복사/이동/삭제 작업


#Apache 서버 시작
docker exec -it [컨테이너_ID 또는 이름] service apache2 start

Nginx 서버 종료
#호스트에서 컨테이너 내부로 파일 복사
docker cp [호스트_파일경로] [컨테이너_ID]:[컨테이너_경로]

#컨테이너 내부에서 호스트로 파일 복사
docker cp [컨테이너_ID]:[컨테이너_파일경로] [호스트_경로]

#컨테이너 내부에서 파일 삭제
docker exec -it [컨테이너_ID 또는 이름] rm /path/to/file



이미지 생성시 커밋(Commit)과 빌드(Build)의 차이

  • 커밋 (Commit)
    • 사용 목적: 현재 실행 중인 컨테이너의 상태를 새로운 이미지로 저장하는 과정.
    • 동작 방식: 현재 컨테이너의 파일 시스템과 그 상태(설치된 패키지, 생성된 파일 등)를 그대로 이미지에 반영.
    • 컨테이너 상태: 컨테이너 내부에서 일어난 변경 사항이 이미지에 포함됨.
    • 파일 포함: 실행 중인 컨테이너에서 발생한 모든 변경 사항이 이미지에 포함됨.
    • 관리 가능성: 변경 사항이 즉시 이미지에 저장되지만, 변경 이력 관리나 기록이 어려움.
    • 재현 가능성: 재현 가능성은 떨어지며, 체계적인 관리가 어렵다.
    • 주요 사용 상황:
      • 컨테이너 내부에서 작업한 내용을 즉시 저장하고 싶을 때,
      • 컨테이너 상태를 보존하고 이후에 동일 상태로 복원하고 싶을 때.
  • 빌드 (Build)
    • 사용 목적: Dockerfile을 사용하여 새로운 이미지를 체계적으로 생성하는 과정.
    • 동작 방식: Dockerfile에 명시된 명령어들을 순차적으로 실행하여 이미지를 빌드함.
    • 컨테이너 상태: 컨테이너의 현재 상태와는 무관하게, Dockerfile에 명시된 내용만으로 이미지가 생성됨.
    • 파일 포함: Dockerfile에 명시된 파일 복사(COPY), 패키지 설치(RUN apt-get install) 등의 작업만 이미지에 포함됨.
    • 관리 가능성: Dockerfile을 통해 이미지를 체계적으로 관리하고, 동일한 환경에서 이미지를 재생산할 수 있음.
    • 재현 가능성: 빌드 과정이 Dockerfile에 명확히 기록되므로 재현 가능한 이미지 생성이 가능.
    • 주요 사용 상황:
      • 일관된 개발 환경을 유지해야 할 때,
      • 새롭게 이미지를 만들거나 여러 환경에서 동일한 설정을 배포할 때.
  • 주의 : 두 방식 모두 마운트 된 파일으나 폴더는 이미지에 포함시키지 않음.

댓글목록0

등록된 댓글이 없습니다.
게시판 전체검색