[클라우드/Docker 기본(13) - Docker-compose(5) : 포트 범위 지정]

SooYeon Yeon·2022년 8월 30일
0

클라우드 Docker

목록 보기
14/24

yml 파일 실습하기

미리 만들어둔 network는 test1net, volume은 testvol3을 활용하여 외부에 워드프레스 서비스를 제공한다. 단, db의 /var/lib/mysql은 testvol3에 마운트 된다. 또한 워드프레스는 외부 노출시 8001~8009번을 활용한다.

  • testvol3 볼륨 만들기
rapa@rapa:~/0822/wordpress$ docker volume create testvol3
testvol3
  • docker-compose.yml
rapa@rapa:~/0822/wordpress$ cat docker-compose.yml 
version: '3.7'

services: 
  wordpress: 
    image: wordpress 
    networks: 
      - test1net 
    links: 
      - "db:mysql" 
    ports: 
      - "8001-8009:80" 
    depends_on: 
      - db 
    environment: 
      - WORDPRESS_DB_PASSWORD=test123 
      - WORDPRESS_DB_USER=root 
      - WORDPRESS_DB_NAME=testdb 
    volumes: 
      - ./www:/var/www/html    # 현재 디렉토리아래에 www를 하고 web의 /var/www/html과 연결(호스트의 특정 디렉토리-컨테이너의 특정 디렉토리)
    restart: always
  db: 
    image: mysql:5.7 
    networks: 
      - test1net 
    volumes: 
      - testvol2:/var/lib/mysql 
    environment: 
      - MYSQL_ROOT_PASSWORD=test123 
      - MYSQL_DATABASE=testdb 

networks: 
  test1net: 
    external: true

volumes: 
  testvol2: 
    external: true
  • 배포하기 (wordpress의 scale=2로)
rapa@rapa:~/0822/wordpress$ dc up --scale wordpress=2 -d
Creating wordpress_db_1 ... done
WARNING: The "wordpress" service specifies a port on the host. If multiple containers for this service are created on a single host, the port will clash.
Creating wordpress_wordpress_1 ... done
Creating wordpress_wordpress_2 ... done
  • docker-compose 확인
rapa@rapa:~/0822/wordpress$ dc ps
        Name                       Command               State                 Ports              
--------------------------------------------------------------------------------------------------
wordpress_db_1          docker-entrypoint.sh mysqld      Up      3306/tcp, 33060/tcp              
wordpress_wordpress_1   docker-entrypoint.sh apach ...   Up      0.0.0.0:8004->80/tcp,:::8004->80/
                                                                 tcp                              
wordpress_wordpress_2   docker-entrypoint.sh apach ...   Up      0.0.0.0:8005->80/tcp,:::8005->80/
                                                                 tcp

localhost:8004와 localhost:8005가 있는데, 8005로 접속하면 8004로 연결된다.

8004로 들어와 설치할 때 접속한 주소가 홈페이지 주소로 잡히기 때문에 홈페이지의 기본주소인 8004로 넘겨줘서 똑같은 페이지를 동일하게 볼 수 있다.

  • www 디렉토리 확인
rapa@rapa:~/0822/wordpress$ ls www
index.php        wp-blog-header.php    wp-content         wp-login.php      xmlrpc.php
license.txt      wp-comments-post.php  wp-cron.php        wp-mail.php
readme.html      wp-config-docker.php  wp-includes        wp-settings.php
wp-activate.php  wp-config.php         wp-links-opml.php  wp-signup.php
wp-admin         wp-config-sample.php  wp-load.php        wp-trackback.php

Quiz

  1. mkdir로 0822/testlab을 만든다.

  2. 해당 디렉토리 내에서 Dockerfile을 생성하여 이미지 testweb:1.0을 생성한다. 이미지는 아래의 내용을 포함해야 한다. (도커 로그인 되어있는 지 확인)

    • 베이스 이미지 = ubuntu:18.04 (FROM)
    • 설치 패키지 → nginx 설치
    • 0822/testlab에 index.html 파일을 curl을 이용하여 간단히 생성하고, 해당 파일을 nginx의 기본 웹 폼 디렉토리에 올린다.
    • 80번 포트가 열려있어야 하며, 컨테이너로 배포 시에는 자동으로 nginx가 실행되어야 한다.
  3. docker-compose 파일을 작성한다. 아래의 내용을 포함해야 한다.

    • web

      • 2에서 만든 testweb:1.0을 사용
      • 변수 : DB이름 DB_NAME 은 testdb, DB_USER은 root, DB_PASSWORD는 test123
        • 나중에 docker container exec testlab_web_1 env를 하면 위의 정보가 보여야함
      • 외부 노출 시 자신의 80번 포트를 호스트의 8881-8889를 사용
    • db → mysql:5.7을 사용

      • 변수 : MYSQL_ROOT_PASSWORD는 test123, MYSQL_DATABASE는 testdb
    • 두 서비스 모두 (미리 만들어 두어야 함)testnetwork1에 연결 되어야 한다.

    • 또한, 생성된 컨테이너는 linux 재부팅 시 자동으로 활성화 되어야 한다.(restart=always) p235

    • db는 미리 생성해두었던 testvolume1에 연결 되어야 하는데, /var/lib/mysql로 마운트 된다.

  4. docker container run을 활용하여 cadvisor를 설치하고, 이를 통해 앞서 만들어 두었던 컨테이너들을 확인할 수 있어야 한다. 물론 cadvisor도 testnetwork1에 연결되어있어야 한다. (이 cadvisor은 compose의 영향을 받으면 안됨) p87

1

디렉토리 만들기

  • mkdir로 0822/testlab을 만든다.
rapa@rapa:~/0822$ mkdir testlab
rapa@rapa:~/0822$ cd testlab

2

network, volume 만들기

  • network 만들기
docker network create testnetwork1
  • volume만들기
docker volume create testvolume1

3

Dockerfile 만들기

touch Dockerfile
vi Dockerfile

curl -o index.html https://www.naver.com
  • Dockerfile
FROM ubuntu:18.04
RUN apt-get update
RUN apt-get -y install nginx
EXPOSE 80
ADD index.html /var/www/html/index.html
CMD ["nginx","-g","daemon off;"]

4

docker-compose.yml 파일 만들기

touch docker-compose.yml
vi docker-compose.yml
version: '3.7'

services:
  web:
    build: .
    image: testweb:1.0
    networks:
      - testnetwork1
    links:
      - "db:mysql"
    depends_on:
      - db
    environment:
      - DB_NAME=testdb
      - DB_USER=root
      - DB_PASSWORD=test123
    ports:
      - "8881-8889:80"

  db:
    image: mysql:5.7
    networks:
      - testnetwork1
    volumes:
      - testvolume1:/var/lib/mysql
    environment:
      - MYSQL_ROOT_PASSWORD=test123
      - MYSQL_DATABASE=testdb
  

networks:
  testnetwork1:
    external: true
  
volumes:
  testvolume1:
    external: true
  • 배포하기
docker-compose up -d

cadvisor 생성

rapa@rapa:~/0822/testlab$ docker run --volume=/:/rootfs:ro --volume=/var/run:/var/run:rw --volume=/sys:/sys:ro --volume=/var/lib/docker/:/var/lib/docker.ro --publish=9559:8080 --detach=true --name=cadvisor --net testnetwork1 google/cadvisor:latest
3970c936f2ad12bad516bcd6b231b0cf5a3913b90f05ec53d8df02b0be47c510

5

확인하기

  • 컨테이너 test1lab_web_1의 환경변수가 잘 설정 되어있는 지 확인
rapa@rapa:~/0822/testlab$ docker container exec testlab_web_1 env
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
HOSTNAME=2f2b3a695952
DB_NAME=testdb
DB_USER=root
DB_PASSWORD=test123
HOME=/root
  • cadvisor에 접속해서 container를 확인할 수 있는 지 확인하기

  • docker-compose ps로 포트번호를 확인해서 접속하면 index.html 내용이 뜬다.

0개의 댓글