Docker의 네트워킹 하위 시스템은 드라이버를 사용하여 연결 가능합니다. 여러 드라이버가 기본적으로 존재하며 핵심 네트워킹 기능을 제공합니다.
docker container ls
docker container inspect []
네트워크에 두개의 컨테이너의 값이 저장되어 있는 것을 보실 수 있습니다.
Compose는 다중 컨테이너 Docker 애플리케이션을 정의하고 실행하기 위한 도구입니다. Compose에서는 YAML 파일을 사용하여 애플리케이션의 서비스를 구성합니다. 그런 다음 단일 명령으로 구성에서 모든 서비스를 만들고 시작합니다.
- image: 컨테이너를 생성할 때 쓰일 이미지 지정
- build: 정의된 도커파일에서 이미지를 빌드해 서비스의 컨테이너를 생성하도록 설정
- environment: 환경 변수 설정, docker run 명령어의 --env, -e 옵션과 동일
- command: 컨테이너가 실행될 때 수행할 명령어, docker run 명령어의 마지막에 붙는 커맨드와 동일
- depends_on: 컨테이너 간의 의존성 주입, 명시된 컨테이너가 먼저 생성되고 실행
- ports: 개방할 포트 지정, docker run 명령어의 -p와 동일
- expose: 링크로 연계된 컨테이너에게만 공개할 포트 설정
- volumes: 컨테이너에 볼룸을 마운트함
- restart: 컨테이너가 종료될 때 재시작 정책
- no: 재시작 되지 않음
- always: 외부에 영향에 의해 종료 되었을 때 항상 재시작 (수동으로 끄기 전까지)
- on-failure: 오류가 있을 시에 재시작
💡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: 백그라운드에서 실행하기
https://docs.docker.com/compose/reference/
💡 도커로 컨테이너를 일일이 관리하고 네트워크로 연결하려면 비용소모가 크다!
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 rm wordpress_net
docker system prune
컨테이너 간 복잡한 설정..
아래의 docker-compose.yml
파일에 생성하고자하는 컨테이너를 정의해주자
네트워크를 따로 설정하지 않으면 Default network가 bridge로 생성됨.
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
실행이 완료되었다!
회사에서 개발하고 있는 백엔드 서버에 필요한 인프라
• Database
• Redis
• rabbitMQ
• 설정 파일을 도커 CLI로 번역하는 역할
version: '3.0'
services:
mariadb10:
image: mariadb:10
ports:
- "3310:3306/tcp"
environment:
- MYSQL_ROOT_PASSWORD=my_db_passward
- MYSQL_USER=docker_pro
- MYSQL_PASSWORD=docker_pro_pass
- MYSQL_DATABASE=docker_pro
redis:
image: redis
command: redis-server --port 6379
restart: always
ports:
- 6379:6379
rabbitmq:
image: rabbitmq:3-management-alpine
container_name: 'rabbitmq'
ports:
- 5672:5672
- 15672:15672
volumes:
- ~/.docker-conf/rabbitmq/data/:/var/lib/rabbitmq/
- ~/.docker-conf/rabbitmq/log/:/var/log/rabbitmq
networks:
- rabbitmq_go_net
networks:
rabbitmq_go_net:
driver: bridge
docker compose -f local-infra.yml up --build
이전에 nginx와 wordpress와 mariadb를 도커 위에 올려 블로그를 배포한 적이 있었는데, 잊어버렸던 지식이 살아나는 느낌이 들었따!
출처: