docker-compose

docker-compose(康剖斯)介绍
docker-compose是一个容器中的服务编排工具
docker镜像在创建之后,往往需要自己手动pull来获取镜像,然后执行docker run命令来运行。当服务需要用到多种容器,容器之间又产生了各种依赖和连接的时候,部署一个服务的手动操作是令人感到十分厌烦的。
dcoker-compose技术,就是通过一个.yml配置文件,将所有的容器的部署方法、文件映射、容器连接等等一系列的配置写在一个配置文件里,最后只需要执行docker-compose up命令就会像执行脚本一样的去一个个安装容器并自动部署他们,极大的便利了复杂服务的部署。
工作原理
Docker Compose 将所管理的容器分为三层,分别是工程(project)、服务(service)、容器(container)
服务(service) :一个应用的容器,实际上可以包括若干运行相同镜像的容器实例。
工程(project) :由一组关联的应用容器组成一个完整业务单元,在docker-compose.yml文件中定义。
docker-compose运行的目录下的所有文件(docker-compose.yml, extends文件或环境变量文件等)组成一个工程,若无特殊指定工程名即为当前目录名。一个工程当中可包含多个服务,每个服务中定义了容器运行的镜像,参数,依赖。一个服务当中可包括多个容器实例,docker-compose并没有解决负载均衡的问题,因此需要借助其他工具实现服务发现及负载均衡。借助其他工具做到服务发现以及负载均衡
可以将docker-compose间接的理解为ansible,我们可以使用ansible来为多台主机部署服务,而docker-compose可以为多个容器部署服务
Docker Compose的工程配置文件默认为docker-compose.yml
docker-compose项目整个结构是由python完成的,调用docker服务来提供API对容器进行管理,因此操作的平台支持docker API,就可以通过docker-compose进行服务的编排
docker-compose安装
在官网寻找安装方法,点https://docs.docker.com/
找到下图位置
在这里插入图片描述

在docker主机中运行以下,其实就是下载一个命令脚本

sudo curl -L “https://github.com/docker/compose/releases/download/1.25.4/docker-compose- ( u n a m e − s ) − (uname -s)- (unames)(uname -m)” -o /usr/local/bin/docker-compose
在这里插入图片描述在这里插入图片描述

Compose文件构建语法解析
1 version: "3"  # 指定docker-compose语法版本
  2 services:    # 从以下定义服务配置列表
  3   server_name:   # 可将server_name替换为自定义的名字,如mysql/php都可以
  4     container_name: container_name  # 指定实例化后的容器名,可将container_name替换为自定义名
  5     image: xxx:latest # 指定使用的镜像名及标签
  6     build:  # 如果没有现成的镜像,需要自己构建使用这个选项
  7       context: /xxx/xxx/Dockerfile  # 指定构建镜像文件的路径
  8       dockerfile: ....     # 指定Dockerfile文件名,上一条指定,这一条就不要了
  9     ports:
 10       - "00:00"  # 容器内的映射端口,本地端口:容器内端口
 11       - "00:00"  # 可指定多个
 12     volumes:
 13       - test1:/xx/xx  # 这里使用managed volume的方法,将容器内的目录映射到物理机,方便管理
 14       - test2:/xx/xx  # 前者是volumes目录下的名字,后者是容器内目录
 15       - test3:/xx/xx  # 在文件的最后还要使用volumes指定这几个tests
 16     volumes_from:  # 指定卷容器
 17        - volume_container_name  # 卷容器名
 18     restarts: always  # 设置无论遇到什么错,重启容器
 19     depends_on:       # 用来解决依赖关系,如这个服务的启动,必须在哪个服务启动之后
 20       - server_name   # 这个是名字其他服务在这个文件中的server_name
 21       - server_name1  # 按照先后顺序启动
 22     links:  # 与depend_on相对应,上面控制容器启动,这个控制容器连接
 23       - mysql  # 值可以是- 服务名,比较复杂,可以在该服务中使用links中mysql代替这个mysql的ip
 24     networks: # 加入指定的网络,与之前的添加网卡名类似
 25       - my_net  # bridge类型的网卡名
 26       - myapp_net # 如果没有网卡会被创建,建议使用时先创建号,在指定
 27     environment: # 定义变量,类似dockerfile中的ENV
 28       - TZ=Asia/Shanghai  # 这里设置容器的时区为亚洲上海,也就解决了容器通过compose编排启动的 时区问题!!!!解决了容器的时区问题!!!
 29       变量值: 变量名   # 这些变量将会被直接写到镜像中的/etc/profile
 30     command: [                        #使用 command 可以覆盖容器启动后默认执行的命令
 31             '--character-set-server=utf8mb4',            #设置数据库表的数据集
 32             '--collation-server=utf8mb4_unicode_ci',    #设置数据库表的数据集
 33             '--default-time-zone=+8:00'                    #设置mysql数据库的 时区问题!!!! 而不是设置容器的时区问题!!!!
 34     ]
 35   server_name2:  # 开始第二个容器
 36     server_name:
 37       stdin_open: true # 类似于docker run -d
 38       tty: true  # 类似于docker run -t
 39 volumes:   # 以上每个服务中挂载映射的目录都在这里写入一次,也叫作声明volume
 40   test1:
 41   test2:
 42   test3:
 43 networks:  # 如果要指定ip网段,还是创建好在使用即可,声明networks
 44   my_net:
 45     driver: bridge  # 指定网卡类型
 46   myapp_net:
 47     driver: bridge

在这里插入图片描述

构建一个nginx镜像
nginx: # service名字
container_name: nginx11 #项目名字
image: nginx:latest #使用镜像
ports:
- “8091:80” #端口映射
volumes:
- /www/wwwroot/8091:/usr/share/nginx/html #映射目录
hostname: nginx.test.com #主机名(在docker可以进入查看)

nginx-php:
container_name: nginx92
image: nginx:latest
ports:
- “8092:80”
volumes:
- /www/wwwroot/8092:/usr/share/nginx/html
hostname: nginx-php.test.com
在这里插入图片描述

![在这里插入图片描述](https://img-blog.csdnimg.cn/20210107102342390.png)





启动
![在这里插入图片描述](https://img-blog.csdnimg.cn/20210107102352823.png)

他说必须要在脚本目录里构建(project)
![在这里插入图片描述](https://img-blog.csdnimg.cn/20210107102400563.png)

这样就OK了

这样两个容器就构建成功了
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

开启服务 停止服务  这里使用的是脚本里的模块名称
![在这里插入图片描述](https://img-blog.csdnimg.cn/20210107102430518.png)

删除练习

如果修改了.yml文件名 并不在 本目录行运行 改这么做尼
如下

练习完了 记得把名字改回

运行一个带有mysql的容器

因为没有mysql镜像所以还的下载

编写一个mysql的compose文件 做个博客Wordpress是一个bai以PHP和MySQL为平台的免费自由du开源的博客软件和内容管zhi理系统
version: ‘3’
services:
db:
image: mysql:5.7
volumes:
- db_data:/var/lib/mysql
restart: always
environment:
MYSQL_ROOT_PASSWORD: wordpress
MYSQL_DATABASE: wordpress
MYSQL_USER: wordpress
MYSQL_PASSWORD: wordpress

wordpress:
depends_on:
- db
image: wordpress:latest
links:
- db
volumes:
- wp_site:/var/www/html
ports:
- “80:80”
- “443:443”
restart: always
environment:
WORDPRESS_DB_HOST: db:3306
WORDPRESS_DB_USER: wordpress
WORDPRESS_DB_PASSWORD: wordpress

volumes:
db_data:
wp_site:

启动

这样就可以了

也可以把镜像下载下来进行使用

挂起

运行

要删除的话先停止容器 在删

编辑网络compose  怎么编写能让容器的网络相连
 
 
version: '2'
services:
  web1:
    image: nginx:latest
    ports:
      - "6061:80"
    container_name: "web1"
    networks:
      - dev

  web2:
    image: nginx:latest
    ports:
       - "6062:80"
    container_name: "web2"
    networks:
      - dev
      - test

  web3:
    image: nginx:latest
    ports:
      - "6063:80"
    container_name: "web3"
    networks:
      - test

networks:
  dev:
    driver: bridge
  test:
driver: bridge

web1连接dev网卡 web2连接 dev和test网卡 web3连接test

运行

连接网卡

Web2 因为给了 两快网卡

通过dockerfile来构建镜像,然后通过构建的镜像 用compose运行容器


version: '2'
services:
  web1:
    build: ./dockerfile
    ports:
      - "6061:80"
    container_name: "web1"
    networks:
      - my_net
networks:
  my_net:
driver: bridge

文件名写错了 改一下就可以了






如果我们想要容器进行扩展scale在扩展的时候需要改名字该端口,将docker-compose.yml修改为


Container_name 也需要删除

查看卷 先删除没有在使用的卷

刚刚编写的内容 也会被以卷的形式保存到默认地址
、~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
`docker-compose`是一个用于管理应用及其依赖环境的强大工具。它允许开发者通过单个YAML文件配置应用程序的所有服务、网络和卷,并使用一个命令启动整个应用环境。以下是关于`docker-compose`的一些基本概述: ### `docker-compose`的主要用途 1. **简化部署**:通过将所有服务、依赖项和配置信息组织在一个地方,`docker-compose`使得应用的部署过程变得简单而统一。 2. **跨平台一致性**:无论您是在本地开发环境中还是在生产服务器上运行应用,`docker-compose`都能提供一致的体验。 3. **便于维护**:对于有多个微服务的应用程序,`docker-compose`帮助保持各个组件之间的相互依赖性和配置的一致性。 4. **快速迭代**:支持快速测试和修改服务配置,无需每次都重启容器。 5. **集成自动化**:可以轻松地将构建、测试、部署等步骤整合到CI/CD流程中。 ### 使用示例 假设有一个简单的Web应用,包含前端(React)和服务端(Node.js)。我们可以创建两个Dockerfile分别构建这两个服务,并编写一个`docker-compose.yml`文件来定义它们以及它们之间的连接。 ```yaml version: '3' services: web: build: . ports: - "8080:80" depends_on: - db db: image: postgres:latest ``` 在这个例子中,我们定义了两个服务:web和服务端数据库。`web`服务使用当前目录下的Dockerfile进行构建,并将其暴露在外部主机的8080端口上。同时,它依赖于名为`db`的服务。这意味着在启动web服务之前,数据库服务会先启动并准备就绪。 ### 安装和运行 通常,您需要安装`docker`和`docker-compose`。然后,只需在包含`docker-compose.yml`文件的项目根目录下执行以下命令即可启动应用: ``` docker-compose up ``` 这个命令将会根据`docker-compose.yml`文件的内容启动所有指定的服务,并自动处理依赖关系。当所有的服务都已准备好时,终端将显示一条确认消息。 ###
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值