AWS & Docker

[Docker] 도커 image, compose, file

dalooong 2023. 8. 3. 22:55
  • 도커 이미지 빌드하기 
  • 도커 이미지를 도커 허브에 올리기
  • 도커 네트워크 

1. 도커 이미지

도커 파일 공식문서 참조 https://docs.docker.com/build/guide/intro/
  • FROM : 베이스 이미지 선정
  • WORKDIR : work directory 선정
  • COPY : 복사할 파일 선정 (예: 작업한 서비스 파일들)
  • RUN : 실행할 명령어
  • ENTRYPOINT : 컨테이너가 시작할 때 실행할 명령어 (예: 서버실행)

2. 도커 이미지를 도커 허브에 올리기

✅ 도커 이미지 만들기

  • 이미지 태그 설정
  • Docker hub에 이미지를 등록하려면 아래와 같은 규칙을 준수해야한다.
[Docker Hub 사용자명]/이미지명:[태그명]

 

  • 태그방법

docker build -t my-httpd .

docker images
// 도커 tag 달기 
docker tag my-httpd yudaeon/new-httpd:latest
// 도커 로그인 
docker login
// 로그인 완료 후 도커 push 
docker push yudaeon/new-httpd

push가 완료된걸 확인할 수 있다.

만약 한번에 여러 네트워크를 열어야 할 땐??

docker network create wordpress_net

docker \
run \
    --name "db" \
    -v "$(pwd)/db_data:/var/lib/mysql" \
    -e "MYSQL_ROOT_PASSWORD=root_pass" \
    -e "MYSQL_DATABASE=wordpress" \
    -e "MYSQL_USER=docker_pro" \
    -e "MYSQL_PASSWORD=docker_pro_pass" \
    --network wordpress_net \
mysql:latest


docker \
    run \
    --name app \
    -v "$(pwd)/app_data:/var/www/html" \
    -e "WORDPRESS_DB_HOST=db" \
    -e "WORDPRESS_DB_NAME=wordpress" \
    -e "WORDPRESS_DB_USER=docker_pro" \
    -e "WORDPRESS_DB_PASSWORD=docker_pro_pass" \
    -e "WORDPRESS_DEBUG=1" \
    -p 8000:80 \
    --network wordpress_net \
wordpress:latest

도커 네트워크

네트워크 드라이버 

docker network ls

// 네트워크에 대해서 자세히 보고싶을 때 
docker network inspect 92855d066cd8

도커 네트워크 드라이버 목록

✅ Network Drivers 

  • bridge : 기본 네트워크 드라이버, 동일한 도커 호스트에서 컨테이너 간의 통신을 도와줌
  • host : 호스트의 네트워크를 직접 사용
  • overlay : 서로 다른 도커 호스트의 컨테이너 간 통신을 도와줌 

도커 브리지 사용하기 

도커 네트워크 삭제 명령어 

docker network rm <네트워크 이름>

2. 도커 컴포즈 

// yaml 파일에 있는 db들을 한번에 불어올 수 있음 
docker-compose -f(파일) .yaml(yml)

위에 사진처럼 컴포즈 명령어를 사용하면 redis, mariadb, rabbitmq 등과 같은 database 설정들을 한번에 가지고 올 수 있다. 

 

✅ 도커 컴포즈 파일 구성

• version

• services

• network

• volume

• config

• secret

 

1. version

2. services **

  • 실행하려는 컨테이너들을 정의하는 역할
  • 이름, 이미지, 포트, 매핑, 환경 변수, 볼륨 등을 포함
  • 해당 정보를 가지고 컨테이너를 생성하고 관리 

3. 도커 컴포즈 명령어 

docker-compose vs docker compose ?
  • docker-compose 명령어가 docker compose로 흡수되었음.
  • 이전에는 Docker에서는 docker-compose 명령어가 별도로 설치되어야 했지만,
  • Docker 1.13 이후로는 docker-compose 명령어가 Docker CLI에 통합됨

✅ 도커 컴포즈 명령어 

docker-comopse -f local-infra.yml up -d
  • up : 도커 컴포즈 파일로, 컨테이너를 생성하기  
  • -f : 도커 컴포즈 파일 지정하기
  • -d : 백그라운드에서 실행하기 

 

✅ 도커 CLI로 여러개 컨테이너 관리하기 

// 도커 네트워크 리스트 조회
docker network ls

- bridge: 도커 엔진에 의해 자동으로 생성되는 가상 네트워크. 컨테이너끼리 연결되는 기본 네트워크

- host: 호스트 컴퓨터의 네트워크 인터페이스를 그대로 사용하는 네트워크

- none: 네트워크를 사용하지 않는 컨테이너

 

# 도커 네트워크 생성
docker network create wordpress_net

- 도커 네트워크를 생성하는 명령어 (네트워크의 이름을 지정)

# mysql db container 생성
docker \
run \
 --name "db" \
 -v "$(pwd)/db_data:/var/lib/mysql" \
 -e "MYSQL_ROOT_PASSWORD=root_pass" \
 -e "MYSQL_DATABASE=wordpress" \
 -e "MYSQL_USER=docker_pro" \
 -e "MYSQL_PASSWORD=docker_pro_pass" \
 --network wordpress_net \
mysql:latest
# wordpress container 생성
docker \
 run \
 --name app \
 -v "$(pwd)/app_data:/var/www/html" \
 -e "WORDPRESS_DB_HOST=db" \
 -e "WORDPRESS_DB_NAME=wordpress" \
 -e "WORDPRESS_DB_USER=docker_pro" \
 -e "WORDPRESS_DB_PASSWORD=docker_pro_pass" \
 -e "WORDPRESS_DEBUG=1" \
 -p 8000:80 \
 --network wordpress_net \
wordpress:latest
version: "3.0"
services:
 db:
 image: mysql:latest
 volumes:
 - ./db_data:/var/lib/mysql
 restart: always
 environment:
 MYSQL_ROOT_PASSWORD: root_pass
 MYSQL_DATABASE: wordpress
 MYSQL_USER: docker_pro
 MYSQL_PASSWORD: docker_pro_pass

 app:
 depends_on:
 - db
 image: wordpress:latest
 volumes:
 - ./app_data:/var/www/html
 ports:
 - "8000:80"
 restart: always
 environment:
 WORDPRESS_DB_HOST: db:3306
 WORDPRESS_DB_NAME: wordpress
 WORDPRESS_DB_USER: docker_pro
 WORDPRESS_DB_PASSWORD: docker_pro_pass
docker compose -f docker-compose.yml up --build