带你快速入门docker-compose

Docker Compsoe

        Docker Compose是用于定义和管理多容器Docker应用的工具,通过yaml文件配置服务、网络和数据卷,实现一键部署和全生命周期管理。

        Docker Compose将所管理的容器分为工程(project)、服务(service)、容器(container)三层。在Docker Compose运行的目录下的所有文件组成一个工程,如果没有指定工程名,那就是当前目录名。在一个工程中可以包含多个服务,在每个服务内定义多个容器。

        Docker Compose的配置文件默认为docker-compose.yml,可以通过环境变量COMPOSE_FILE或-f参数指定配置文件

#使用环境变量指定配置文件,多个文件使用“:”分隔
export COMPOSE_FILE=compose_1.yml:compose_2.yml
docker-compose up

#使用-f参数指定配置文件,多个文件写多个-f
docker-compose -f compose_1.yml -f compose_2.yml up
        核心功能:
  1. 多容器编排:将多个容器(如数据库、Web服务、缓存等)整合为一个项目,统一管理依赖关系和启动顺序。
  2. 声明式配置:通过docker-compose.yml文件定义服务、数据卷、网络,实现环境一致性。
  3. 快速启停:一条命令可以实现启动所有服务和停止并且清理资源。
  4. 跨环境移植:配置文件可复用,降低部署差异风险。

安装

#安装docker-compose
yum -y install docker-compose

#查看版本
docker-compose --version

 编写配置文件

        配置文件说明
build指定Dockerfile文件名(需要使用子级标签dockerfile指定)
dockerfile        build的自己标签,指定Dockerfile的路径
context可以使dockerfile的路径,或者是指向git仓库的URL地址
image        指定镜像
command容器启动后默认执行的命令,会覆盖dockerfile的CMD的命令
container_name指定容器名
deploy指定部署和运行服务相关配置,只在swarm模式使用
environment添加环境变量
networks加入网络,引用顶级networks下条目
ports

暴露容器端口,端口不能低于60

network_mode

设置容器网络模式
volumes挂载一个宿主机目录到容器,命名卷要在顶级volumes定义卷名称
volumes_from从另一个服务或容器挂载卷,可选参数:ro和rw,(仅版本2支持)

示例

        准备docker-compose.yml
services:
  mysql:        #服务名称
    image: mysql:5.7    #声明容器使用的镜
    container_name: mysql_db    #容器名
    environment:
      MYSQL_ROOT_PASSWORD: testroot     #环境变量,root密码
      MYSQL_DATABASE: app_db          #指定数据库
      MYSQL_USER: app_user          #普通用户
      MYSQL_PASSWORD: testuser      #普通用户密码
    ports:
      - "3306:3306"       #端口映射
    restart: always       #重启策略
    volumes:      
      - mysql_data:/var/lib/mysql       #挂载数据卷,数据持久化
      - ./init.sql:/docker-entrypoint-initdb.d/init.sql     #mysql默认回执习惯这个目录下的sql、sh等文件,这里创建一个表,插入几条数据
      - ./mysql-charset.cnf:/etc/mysql/conf.d/charset.cnf    #配置字符集
  nginx:
    build: 
      context: .
      dockerfile: ./Dockerfile                  #当前目录的Dockerfile
    container_name: nginx
    volumes: 
      - ./html:/usr/share/nginx/html                    #挂载静态网站文件
    ports:
      - 80:80
    restart: always
volumes:
  mysql_data:             #声明卷名称
    driver: local         #使用本地驱动
    driver_opts: 
      type: none          #卷类型
      device: /var/lib/mysql      #宿主机路径
      o: bind
         准备Dockerfile
FROM nginx:1.25

#这里将nginx默认显示的页面换成我们自己的
COPY ./index.html /usr/share/nginx/html/index.html

EXPOSE 80 443

CMD ["nginx", "-g", "daemon off;"]
         准备init.sql
-- 显式开启事务
START TRANSACTION;

-- 设置会话参数
SET sql_mode = 'NO_ENGINE_SUBSTITUTION';
SET autocommit = 1;

-- 创建学生表(包含自增主键)
CREATE TABLE student (
    id INT PRIMARY KEY AUTO_INCREMENT,
    name VARCHAR(50) NOT NULL,
    age INT,
    gender VARCHAR(1) CHECK (gender IN ('男', '女'))
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

-- 插入三条示例数据
INSERT INTO student (name, age, gender) VALUES
('张三', 20, '男'),
('李四', 19, '女'),
('王五', 21, '男');
ON DUPLICATE KEY UPDATE id=id;

-- 提交数据
COMMIT;
        准备mysql-charset.cnf
[mysqld]
character-set-server=utf8mb4
collation-server=utf8mb4_unicode_ci
init_connect='SET NAMES utf8mb4'

[client]
default-character-set=utf8mb4

[mysql]
default-character-set=utf8mb4
        启动
docke-compose up -d #在后台启动

#这时候就可以查看我们插入到表中的数据
docker exec -it <容器ID>  mysql -u root -p  -e "use app_db;select * from student"

#在浏览器访问宿主机的80端口或者使用curl就可以访问到我们自己设置的index.html
curl <IP>:80

#然后因为我们将html这个目录挂载到了nginx容器中,所以在html目录下修改index.html的内容后就会发现nginx的页面也会发生变化

命令

命令含义
build重新构建服务
ps列出容器
up创建和启动容器
exec在容器中执行命令
scale指定容器启动数量,如果指定了容器名则无法使用
top显示容器进程
logs查看容器输出
down删除容器、网络、数据卷和镜像
stop/start/restart停止/启动/重启服务
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值