[docker] docker-compose 배포 실습

Hoon·2022년 8월 22일
0

Docker

목록 보기
7/13
post-thumbnail

실습

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

Answer)

docker-compose down
docker volume create testvol3
docker network create teset1net
vi 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
  db:
    image: mysql:5.7
    networks:
      - test1net
    volumes:
      - testvol3:/var/lib/mysql
    environment:
      - MYSQL_ROOT_PASSWORD=test123
      - MYSQL_DATABASE=testdb

networks:
  test1net:
    external: true
volumes:
  testvol3:
    external: true

#배포하기
rapa@rapa:~/0822/wordpress$ docker-compose 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
rapa@rapa:~/0822/wordpress$ docker-compose 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:8006->80/tcp,:::8006->80/tcp
wordpress_wordpress_2   docker-entrypoint.sh apach ...   Up      0.0.0.0:8005->80/tcp,:::8005->80/tcp

wordpress_1 에서 wordpress를 설정하면 wordpress_2의 포트인 localhost:8005로 접속해도 동일한 결과를 볼 수 있다.

실습

Goal
1. mkdir 0822/testlab을 만든다
2. 해당 디렉토리 내에서 Dockerfile을 생성하여 이미지 testweb:1.0을 생성한다. 이미지는 아래의 내용을 포함해야 한다.

  • 베이스 이미지: ubuntu:18.04
  • 설치 패키지: nginx
  • 0822/testlab에 index.html 파일을 curl을 이용하여 간단히 생성하고 해당 파일을 nginx의 기본 웹 폼 디렉토리에 올린다.
  • 80번 포트가 열려 있어야 하며, 컨테이너로 배포시에는 자동으로 nginx가 실행되어야 한다.
  1. docker-compose 파일을 아래의 내용을 포함하여 작성한다.
    • web: testweb:1.0 사용
    • 변수: DB_NAME: testdb, DB_USER: root, DB_PASSWORD: test123(나중에 docker conatiner exec testlab_web_1 env하면 위의 정보가 보여야 함) 외부 노출시 자신의 80번 포트를 호스트의 8001~8009를 사용한다.
    • db: mysql:5.7
    • 변수: MYSQL_ROOT_PASSWORD=test123, MYSQL_DATABASE=testdb
    • 두 서비스 모두(미리 만들어 두어야 함) testnetwork1 에 연결 되어야 한다. 또한 생성된 컨테이너는 linux 재부팅시 자동으로 활성화 되어야 한다.
    • db는 미리 생성해 두었던 testvolume1에 연결되어야 하는데, /var/lib/mysql 로 마운트 된다.
  2. docker container run을 활용하여 cadvisor(p.87)를 설치하고 이를 통해 앞서 만들어 두었던 컨테이너들을 확인할 수 있어야 한다. 물론 cadvisor도 testnetwork1에 연결되어 있어야 한다.

Answer)

docker network create testnetwork1
docker volume create testvolume1
vi Dockerfile
#Dockerfile
FROM ubuntu:18.04
RUN apt-get update
RUN apt-get install -y nginx
COPY index.html /var/www/html
EXPOSE 80
CMD ["nginx", "-g", "daemon off;"]
vi docker-compose.yml
version: '3.7'
services:
  web:
    build: . # 현재 디렉토리
    image: testweb:1.0
    networks:
      - testnetwork1
    links:
      - "db:mysql"
    ports:
      - "8881-8889:80"
    depends_on:
      - db
    environmet:
      - DB_NAME=testdb
      - DB_USER=root
      - DB_PASSWORD=test123
  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
docker-compose ps
    Name                 Command             State             Ports           
-------------------------------------------------------------------------------
testlab_db_1    docker-entrypoint.sh         Up      3306/tcp, 33060/tcp       
                mysqld                                                         
testlab_web_1   nginx -g daemon off;         Up      0.0.0.0:8883->80/tcp,:::88
                                                     83->80/tcp                

cadvisor 컨테이너 실행

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

0개의 댓글