可以理解为批处理工具
根据定义的yml管理docker容器
强大在于同时管理多个容器
下面以构建wordpress + mysql 来体会下docker-composer的魅力
如果你是参照我的文章《centos 安装Docker》安装的docker环境 那么compose是已经安装了的
通过 docker compose version 看下有没有安装好
没有安装的话,参考 https://docs.docker.com/compose/install 文档进行安装
不使用docker-compose 怎么构建呢?
要先启动mysql容器,再启动wordpress容器
wordpress要和mysql通信(要么 link 或者共同使用新创建的网络,新创建的网络自带link)
然后wordpress和本地端口映射
先去dockerhub查看下wordpress需要什么文件配置
下面文件从https://github.com/docker-library/wordpress/blob/master/wp-config-docker.php拷贝
mysql需要一个默认的wordpress数据库,然后需要设置密码,用户用默认的root
wordpress 设置连接mysql地址,mysql用户名以及密码
/** The name of the database for WordPress */
define( 'DB_NAME', getenv_docker('WORDPRESS_DB_NAME', 'wordpress') );
/** Database username */
define( 'DB_USER', getenv_docker('WORDPRESS_DB_USER', 'example username') );
/** Database password */
define( 'DB_PASSWORD', getenv_docker('WORDPRESS_DB_PASSWORD', 'example password') );
/** Database hostname */
define( 'DB_HOST', getenv_docker('WORDPRESS_DB_HOST', 'mysql') );
# 启动mysql 并创建wordpress库 设置root密码123456
docker run -d --name=mysql -e MYSQL_DATABASE=wordpress -e MYSQL_ROOT_PASSWORD=123456 mysql
# 启动wordpress
docker run -d --name=wordpress --link mysql -e WORDPRESS_DB_USER=root -e WORDPRESS_DB_PASSWORD=123456 -e DB_HOST=mysql:3306 -p 80:80 wordpress
# 然后就能通过url访问了
docker-compose.yml
services:
mysql:
image: mysql
environment:
MYSQL_DATABASE: wordpress
MYSQL_ROOT_PASSWORD: 123456
wordrpress:
image: wordpress
links:
- mysql
ports:
- 80:80
environment:
WORDPRESS_DB_USER: root
WORDPRESS_DB_PASSWORD: 123456
DB_HOST: mysql:3306
启动
然后就能通过url访问了
docker compose up
services:
# 设置了mysql容器相关信息
# image指定了镜像
# volumes 指定存储相关挂载
# network 指定了使用的网络
# environment 设置环境变量
# 等价于 docker run -d -v mysql-data:/var/lib/mysql --network my-bridge -e MYSQL_DATABASE=wordpress -e MYSQL_ROOT_PASSWORD=123456 mysql
mysql:
image: mysql
volumes:
- "mysql-data:/var/lib/mysql"
networks:
- my-birdge
environment:
MYSQL_DATABASE: wordpress
MYSQL_ROOT_PASSWORD: 123456
# ports 设置端口映射
# 等价于 docker run -d --network my-bridge -e WORDPRESS_DB_USER=root -e WORDPRESS_DB_PASSWORD=123456 -e DB_HOST=mysql:3306 -p 80:80 wordpress
wordrpress:
image: wordpress
networks:
- my-birdge
# 使用了自己创建的网络,则不需要使用link了
links:
- mysql
ports:
- 80:80
environment:
WORDPRESS_DB_USER: root
WORDPRESS_DB_PASSWORD: 123456
DB_HOST: mysql:3306
# 等价于 docker network create -d bridge my-bridge
networks:
my-birdge:
driver: bridge
# 等价于 docker volume create mysql-data
volumes:
mysql-data:
如果需要根据Dockerfile镜像,可以使用build
# docker-compose.yml
# 使用 ../Dodckerfile 文件构建
services:
m-nginx:
build: ../
ports:
- 80:80
如果文件不叫Dockerfile,可以通过dockerfile: 指定文件名
# docker-compose.yml
# 使用 ../my_file 文件构建
services:
m-nginx:
build:
context: ../
dockerfile: my_file
ports:
- 80:80
# 根据当前目录下docker-compose.yml 启动
docker compose up
# 可以加载指定位置的yml文件启动
docker compose -f /usr/lib/docker-compose.yml up
# 停止
docker compose stop
# 启动
# 和 docker compose up 的区别在于不会重新构建
docker compose start
# 查看运行中的compose
docker compose ps
# 列出compose 中的容器和image信息
docker compose images
# 进入容器内部
# 以bash 进入 m-nginx 容器
docker compose exec m-nginx bash
# 删除已经停止了的compose
docker compose down