0부터 시작하는 Docker 공부 - Dockerfile & DockerCompose 실습

Jaehong Lee·2022년 8월 23일
0
post-thumbnail

1. Web 서비스 Daemon 위치

  • 이미지 자체가 httpd 일 때

    /usr/local/apache2/htdocs

  • 이미지 자체가 nginx 일 때

    /usr/share/nginx/html

  • 이미지가 centos / ubuntu 이고, 여기에 httpd 나 nginx 를 설치할 때

    /var/www/html

index.html 은 위 경로에 위치한다

2. Dockerfile 실습

  • 디렉터리를 두 개 생성하여 각각 Dockerfile 과 docker-compose.yml 파일을 생성해주자

Dockerfile 작성하기

FROM ubuntu:18.04
RUN apt update
RUN apt -y install apache2
ADD index.html /var/www/html
EXPOSE 80 8080
CMD apache2ctl -DFOREGROUND
  • 위와 같이 작성하자. ubuntu 이미지에 httpd 를 설치하고, index.html 을 붙여넣기 하고, Port 를 열어주고, httpd 를 컨테이너 배포시 실행하게 설정하였다

index.html 생성

  • index.html 도 생성해주자. index.html 은 Dockerfile 과 같은 디렉터리에 있어야 한다

이미지 build

docker build -t myweb:1.0 test1/.

  • 작성한 Dockerfile 로 myweb:1.0 이라는 이미지를 build 하자

이미지 살펴보기

docker image inspect myweb:1.0

  • 생성한 이미지의 상세 정보를 확인하자

컨테이너 배포하기

docker container run -d -p 8008:80 --name myweb01 myweb:1.0

  • 컨테이너를 배포해주자. Host 의 8008 번 Port 와 연결하였다

확인하기

  • 8008 번 Port 에 접속하면, 우리가 생성하여 붙여넣은 index.html 이 잘 출력된다

3. DockerCompose 실습

p. 224

docker-compose.yml 작성하기

  • 동일한 code 를 다른 사용자가 사용할 수 있게 docker compose 를 통해 생성한 Network 와 Volume 은 이름 앞에 디렉터리 이름이 붙어서 생성된다
    • external 옵션을 true 로 하면, 새로 생성하지 않고, 기존에 생성된 Network 나 Volume 을 사용한다
version: '3.7'
services:
  wordpress:
    image: wordpress
    networks:
      - testnetwork1
    volumes:
      - /home/rapa/0823/test2/html:/var/www/html #mount nfs
    ports:
      - "8881-8882:80"
    links:
      - "db:mysql"
    depends_on:
      - db
    environment:
      - WORDPRESS_DB_NAME=testdb
      - WORDPRESS_DB_USER=root
      - WORDPRESS_DB_PASSWORD=test123
  db: 
    image: mysql:5.7 
    networks: 
      - testnetwork1
    volumes: 
      - testvolume1:/var/lib/mysql # volume mount iscsi 
    environment:
      - MYSQL_DATABASE=testdb
      - MYSQL_ROOT_PASSWORD=test123
networks:
  testnetwork1: 
    external: true
volumes: 
  testvolume1: 
    external: true
  • docker-compose.yml 파일에 위와 같이 작성하자. wordpress 컨테이너와 db 컨테이너를 배포하여 wordpress 를 서비스할 것이다

  • Container 를 두 개 배포할 것이므로, Port 를 두 개 열어두자

사용할 Network & Volume 생성

  • 사용할 Network 와 Volume 을 생성하자

Container 배포하기

docker-compose up --scale wordpress=2 --scale db=2 -d

  • scale 을 조정하여 Container 를 두 개씩 배포하자

확인하기

docker-compose ps

  • ps 는 현재 디렉터리에서 docker compose 를 통해 배포한 컨테이너만 확인 가능하다

docker compose 명령어는 p. 238 을 참조하자

삭제하기

docker-compose down

  • 현재 디렉터리에서 docker compose 를 통해 생성한 Container 들을 중지하고, 삭제시킨다
    • 이때, Network 와 Volume 은 External 로 외부에서 생성한 것이므로 삭제되지 않는다. 만약, docker compose 를 통해 생성한 Network 와 Volume 이라면 삭제된다
profile
멋진 엔지니어가 될 때까지

0개의 댓글