Goal: 미리 생성해 둔 network(test1net), volume(testvol3)을 활용하여 워드프레스 서비스를 제공한다.
단, db의 /var/lib/mysql은 testvol2에 마운트 된다. 또한 워드프레스는 외부 노출 시 8001~8009번을 활용한다.
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가 실행되어야 한다.
- 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 로 마운트 된다.
- docker container run을 활용하여 cadvisor(p.87)를 설치하고 이를 통해 앞서 만들어 두었던 컨테이너들을 확인할 수 있어야 한다. 물론 cadvisor도 testnetwork1에 연결되어 있어야 한다.
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