1. Ubuntu 22.04 에서 Docker 사용하기 (APM 기본 설치)

반응형

 

[ Docker 설치 ]

1. 패키지 목록 최신화 및 업그레이드
# apt -y update

# apt -y upgrade
# apt -y install apt-transport-https ca-certificates curl gnupg lsb-release

2. Docker 공식 GPG 설치
# curl -fsSL https://download.docker.com/linux/ubuntu/gpg |gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg

3. Docker 공식 저장소 추가
# echo \
  "deb [arch=amd64 signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/ubuntu \
  $(lsb_release -cs) stable" |tee /etc/apt/sources.list.d/docker.list > /dev/null

4. Docker 설치 및 확인

# apt -y update
# apt -y install docker-ce docker-ce-cli containerd.io
# docker --version

5. Compose 설치 및 확인

도커 컨테이너 구동 명령시 옵션으로 환경 값을 줄 수 있는데, 이경우 명령 라인이 길어지는 불편함이 있습니다.

docker-compose 는 이런 불편함을 없애고, 미리 준비한 환경을 파일(.yml) 을 사용하며 여러 컨테이너를 한 번에 관리할 수 있습니다.

 

1) Plugin 형태로 사용할 경우 (매뉴얼 진행 형태)
# apt -y install docker-compose-plugin
# docker compose version

 

2) Standalone 형태로 사용할 경우
# curl -SL https://github.com/docker/compose/releases/download/v2.12.2/docker-compose-linux-x86_64 -o /usr/local/bin/docker-compose
# chmod +x /usr/local/bin/docker-compose
# docker-compose --version

 


[ Docker 삭제 ]

1. Docker 관련 패키지를 제거
# apt purge docker-ce docker-ce-cli containerd.io

2. 호스트의 이미지, 컨테이너, 볼륨 또는 사용자 지정 구성파일 제거 (모든 이미지, 컨테이너 및 볼륨 수동 삭제)
# rm -rf /var/lib/docker
# rm -rf /var/lib/containerd

 


[ APM 설치 ]

1. 설치 및 확인
특정 버전을 명시하지 않으면 최신 버전의 이미지가 다운로드 됩니다.
사용 예) docker pull {이미지}:{버전}
# docker pull httpd:2.4.54
# docker pull php:8.2.0-fpm
# docker pull mysql:8.0.31

 

다운로드 된 이미지 리스트를 출력합니다.

# docker images

 

(기타 명령 - 설치)

# docker search mysql    // 다운로드 가능한 이미지 출력

# docker pull mysql         // mysql:8.0.31 와 같이 특정 버전을 지정하지 않으면 최신 버전이 설치됩니다.

                                           (mysql 또는 mysql:latest)

                                           아래 URL 에서 제공하는 버전을 확인 할 수 있습니다.

                                           https://hub.docker.com/_/mysql

                                           https://hub.docker.com/_/php

                                           https://hub.docker.com/_/httpd

 

(기타 명령 - 삭제)

이미지 삭제는 컨테이너 우선 삭제 후 가능합니다.

# docker ps                                 // 컨테이너 리스트 출력

# docker rm cea0f7b8d47f          // 출력된 컨테이너 ID 로 컨테이너 삭제

# docker images                          // 이미지 리스트 출력

# docker rmi httpd                        // 이미지 삭제

* 참고

이미지 삭제시 아래와 같은 메세지가 출력되는 경우는 REPOSITORY 가 같고 버전의 차이가 없는 경우입니다.

(예 : httpd:2.4.54 와 httpd:latest 가 같은 버전일 경우)
Error response from daemon: conflict: unable to delete 157dcdf23d6c (must be forced) - image is referenced in multiple repositories

아래와 같이 -f 옵션으로 강제 삭제를 하게 되면 두개의 이미지가 동시 삭제 됩니다.

# docker rmi -f 157dcdf23d6c


2. 가동

APM 환경 파일을 컨테이너와 연결하여 생성합니다.
# vi docker-compose.yml

version: '3.9'

services:
    httpd:
        image: httpd:2.4.54
        container_name: httpd
        restart: unless-stopped # 서버 부팅시 컨테이너 가동
        ports:
            - "80:80"
        volumes:
            - /home/sysdocu/httpd/html/:/usr/local/apache2/htdocs/ # 웹 소스 파일 경로

    mysql:
        image: mysql:8.0.31
        container_name: mysql
        restart: unless-stopped
        tty: true
        ports:
            - "3306:3306"
        environment:
            MYSQL_HOST: localhost
            MYSQL_ROOT_PASSWORD: 12345678 # 초기 mysql root 비밀번호
            SERVICE_TAGS: dev
            SERVICE_NAME: mysql
            TZ: Asia/Seoul

    php:
        image: php:8.2.0-fpm
        container_name: php
        restart: unless-stopped
        ports:
            - "9000:9000"
        volumes:
            - /home/sysdocu/httpd/html/:/var/www/html/  # php 소스 코드를 사용하기 위해 필수 설정
        command:
            - /bin/sh
            - -c
            - |
              echo "security.limit_extensions = .html .htm .php" >> /usr/local/etc/php-fpm.d/www.conf  # 특정 확장자만 php 소스 코드 사용
              php-fpm

 

파일 맨 위에 compose version 은 docker 버전에 맞추어 사용해야 합니다. 아래 URL 에서 확인이 가능합니다.

https://docs.docker.com/compose/compose-file/compose-versioning/#compatibility-matrix

 

이제 컨테이너를 가동합니다.

# docker compose up -d               // 백그라운드로 전체 서비스 (컨테이너) 올리기

* 이 작업이 선행 되어야 컨테이너 별로 제어 (시작/중지) 가 가능함

 

index.html 를 만들고 브라우저로 접속하면 아래 내용 (New index) 이 출력되는것을 확인할 수 있습니다.

# echo "New index" > /home/sysdocu/httpd/html/index.html

 

그리고 변경된 내용이 httpd 컨테이너 내에도 확인됩니다.

( 실 데이터 저장 위치 : /home/sysdocu/httpd/html/ )

# docker exec -it httpd /bin/bash

root@771473b9edc0:/usr/local/apache2# cd htdocs
root@771473b9edc0:/usr/local/apache2/htdocs# cat index.html 
New index

 

현재 컨테이너 구동 상태입니다.

# docker compose ps
NAME                COMMAND                  SERVICE             STATUS              PORTS
httpd               "httpd-foreground"       httpd               running             0.0.0.0:80->80/tcp, :::80->80/tcp
mysql               "docker-entrypoint.s…"   mysql               running             0.0.0.0:3306->3306/tcp, :::3306->3306/tcp, 33060/tcp
php                 "docker-php-entrypoi…"   php                 running             0.0.0.0:9000->9000/tcp, :::9000->9000/tcp

 

(기타 명령)

# docker compose images       // 올려진 서비스 (컨테이너) 가 사용중인 이미지 리스트 출력. (모든 이미지 출력 : docker images)

# docker compose ps               // 올려진 서비스 (컨테이너) 출력

# docker compose stop php     // 올려진 서비스 (컨테이너) 선택 중지

# docker compose start php     // 올려진 서비스 (컨테이너) 선택 시작

# docker rm -v php                    // 올려진 서비스 (컨테이너) 삭제
# docker compose up -d php    // 하나의 서비스 (컨테이너) 만 구동

 

모든 컨테이너를 더이상 사용하지 않을때 아래와 같이 내립니다.

# docker compose down    // 컨테이너 중지 및 삭제

 

반응형

댓글()