Docker-compose教程

1.Compose介绍
Docker Compose是一个用来定义和运行复杂应用的Docker工具。一个使用Docker容器的应用,通常由多个容器组成。使用Docker Compose不再需要使用shell脚本来启动容器。 
Compose 通过一个配置文件来管理多个Docker容器,在配置文件中,所有的容器通过services来定义,然后使用docker-compose脚本来启动,停止和重启应用,和应用中的服务以及所有依赖服务的容器,非常适合组合使用多个容器进行开发的场景

2.Compose和Docker兼容性

 

Docker版本变化说明:

Docker从1.13.x版本开始,版本分为企业版EE和社区版CE,版本号也改为按照时间线来发布,比如17.03就是2017年3月。

Docker的linux发行版的软件仓库从以前的https://apt.dockerproject.org和https://yum.dockerproject.org变更为目前的https://download.docker.com, 软件包名字改为docker-ce和docker-ee。


3.安装docker
Docker的社区版(Docker Community Edition)叫做docker-ce。老版本的Docker包叫做docker或者docker-engine,如果安装了老版本的docker得先卸载然后再安装新版本的docker。docker的发展非常迅速,apt源的更新往往比较滞后。所以docker官网推荐的安装方式都是下载docker安装脚本安装。 
卸载老旧的版本(若未安装过可省略此步):

$ sudo apt-get remove docker docker-engine docker.io

安装最新的docker:

$ curl -fsSL get.docker.com -o get-docker.sh
$ sudo sh get-docker.sh

shell会提示你输入sudo的密码,然后开始执行最新的docker过程 
或者

$ curl -sSL https://get.docker.com/ | sh 

4.安装docker-compose

两种最新的docker安装方式

1.从github上下载docker-compose二进制文件安装

下载最新版的docker-compose文件 

sudo curl -L https://github.com/docker/compose/releases/download/1.16.1/docker-compose-`uname -s`-`uname -m` -o /usr/local/bin/docker-compose

 若是github访问太慢,可以用daocloud下载

sudo curl -L https://get.daocloud.io/docker/compose/releases/download/1.25.1/docker-compose-`uname -s`-`uname -m` -o /usr/local/bin/docker-compose

添加可执行权限

sudo chmod +x /usr/local/bin/docker-compose

测试安装结果

$ docker-compose --version
 
docker-compose version 1.16.1, build 1719ceb

5.docker-compose文件结构和示例

docker-compose文件结构:

version: '3.7'

services:
  #构建mysql服务
  mysql:
    image: mysql:(自行修改ID!ID必须一致) #容器运行使用的镜像
    build: 
      context: .
      dockerfile: MySQL_dockerfile
    container_name: php_mysql #定义容器名称
    ports:
      - "3306:3306"  #映射端口,格式为 "主机端口:容器端口"
  #构建php变体php-apache服务
  web:
    image: php:(自行修改ID!ID必须一致)
    build:
      context: .
      dockerfile: php-apache_dockerfile
    container_name: php-apache
    depends_on:   #设置依赖的服务
      - mysql
    volumes:
      - ./www/:/var/www/html/ #将主机中的目录挂载到容器中的工作目录,易于对web服务的管理
    ports:
      - "8080:80"
  #构建phpmyadmin服务
  phpmyadmin:
    image: phpmyadmin:(自行修改ID!ID必须一致)
    build:
      context: .
      dockerfile: phpmyadmin_dockerfile
    environment:
      PMA_HOST: php_mysql #设置所连接的MySQL服务器名称
    container_name: phpmyadmin
    depends_on:
      - mysql
      - web
    ports:
      - "8081:80"

docker-compose使用示例
通过docker-compose构建一个在docker中运行的基于python flask框架的web应用。

注意:确保你已经安装了Docker 和Docker Compose。 您不需要安装Python或Redis,因为这两个都是由Docker镜像提供的。

 2: 创建容器的Dockerfile文件

这个可以查看我的作品——(Dockerfile镜像编辑),里面有详细过程噢!

web容器: 

使用当前docker-compose.yml文件所在目录的上级目录(compose_test/Dockerfile)中的Dockerfile构建映像。 

将容器上的暴露端口5000映射到主机上的端口5000。 我们使用Flask Web服务器的默认端口5000。

4: 使用Compose构建并运行您的应用程序

在compose_test/docker/目录下执行docker-compose.yml文件:

$ docker-compose up
# 若是要后台运行: $ docker-compose up --build
# 若不使用默认的docker-compose.yml 文件名:
$ docker-compose -f server.yml up -d 

 5: 编辑compose文件以添加文件绑定挂载

上面的代码是在构建时静态复制到容器中的,即通过Dockerfile文件中的COPY src /opt/src命令实现物理主机中的源码复制到容器中,这样在后续物理主机src目录中代码的更改不会反应到容器中。 
可以通过volumes 关键字实现物理主机目录挂载到容器中的功能(同时删除Dockerfile中的COPY指令,不需要创建镜像时将代码打包进镜像,而是通过volums动态挂载,容器和物理host共享数据卷):
 

version: '3'
services:
  web:
    build: ../
    ports:
     - "5000:5000"
    volumes:
     - ../src:/opt/src
  redis:
    image: "redis:3.0.7"

通过volumes(卷)将主机上的项目目录(compose_test/src)挂载到容器中的/opt/src目录,允许您即时修改代码,而无需重新构建镜像。

重新构建和运行应用程序

使用更新的compose文件构建应用程序,然后运行它。

 docker-compose up --build

6.compose常用服务配置参考
Compose文件是一个定义服务,网络和卷的YAML文件。 Compose文件的默认文件名为docker-compose.yml。

提示:您可以对此文件使用.yml或.yaml扩展名。 他们都工作。

与docker运行一样,默认情况下,Dockerfile中指定的选项(例如,CMD,EXPOSE,VOLUME,ENV)都被遵守,你不需要在docker-compose.yml中再次指定它们。

同时你可以使用类似Bash的$ {VARIABLE} 语法在配置值中使用环境变量,有关详细信息,请参阅变量替换。

本节包含版本3中服务定义支持的所有配置选项。
 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值