欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

Docker Compose

程序员文章站 2022-05-15 09:17:33
...

1、介绍

Compose是一个定义和管理多容器的工具,使用Python语言编写。使用Compose配置文件描述多个容器应用的架构,比如使用什么镜像、数据卷、网络、映射端口等;然后 一条命令管理所有服务,比如启动、停止、重启等。

docker-compose是一个方便部署的工具,用docker我们只能同时部署一个容器,用了docker-compose可以同时部署一套容器,大大提高效率

 

2、安装

 

curl -L https://github.com/docker/compose/releases/download/1.15.0/docker-compose-`uname -s`-`uname -m` -o /usr/local/bin/docker-compose
chmod +x /usr/local/bin/docker-compose
或者
pip install docker-compose

3、YAML文件格式及编写注意事项

YAML是一种标记语言很直观的数据序列化格式,可读性高。类似于XML数据描述语言,语法比XML简单的很多。

YAML数据结构通过缩进来表示,连续的项目通过减号来表示,键值对用冒号分隔,数组用中括号括起来,hash用花括号括起来。

 

YAML文件格式注意事项:

1. 不支持制表符tab键缩进,需要使用空格缩进

2. 通常开头缩进2个空格

3. 字符后缩进1个空格,如冒号、逗号、横杆

4. 用井号注释

5. 如果包含特殊字符用单引号引起来

6. 布尔值(true、false、yes、no、on、off)必须用引号括起来,这样分析器会将他们解释为字符串。

 

 

配置文件常用字段:

字段

描述

build

    dockerfile

    context

指定Dockerfile文件名构建镜像上下文路径

image

指定镜像

command

执行命令,覆盖默认命令

container_name

指定容器名称,由于容器名称是唯一的,如果指定自定义名称,则无法scale

deploy

指定部署和运行服务相关配置,只能在Swarm模式使用

environment

添加环境变量

networks

加入网络,引用*networks下条目

ports

暴露端口,与-p相同,但端口不能低于60

volumes

挂载宿主机路径或命名卷。如果是命名卷在*volumes定义卷名称

restart

重启策略,默认no,always|on-failure|unless-stopped

hostname

容器主机名

 

官方文档:https://docs.docker.com/compose/compose-file

 

常用命令:

字段

描述

build

重新构建服务

ps

列出容器

up

创建和启动容器

exec

在容器里执行命令

scale

指定一个服务容器启动数量

top

显示容器进程

logs

查看容器输出

down

删除容器、网络、数据卷和镜像

stop/start/restart

停止/启动/重启服务

Compose应用案例

docker-compose.yml

version: '3'
services:
  nginx:
    hostname: nginx
    build:
      context: ./nginx
      dockerfile: Dockerfile
    ports:
      - 81:80
    networks:
      - lnmp
    volumes:
      - ./wwwroot:/usr/local/nginx/html

  php:
    hostname: php
    build:
      context: ./php
      dockerfile: Dockerfile
    networks:
      - lnmp
    volumes:
      - ./wwwroot:/usr/local/nginx/html

  mysql:
    hostname: mysql
    image: mysql:5.6
    ports:
      - 3306:3306
    networks:
      - lnmp
    volumes:
      - ./mysql/conf:/etc/mysql/conf.d
      - ./mysql/data:/var/lib/mysql
    command: --character-set-server=utf8
    environment:
      MYSQL_ROOT_PASSWORD: 123456
      MYSQL_DATABASE: wordpress         #这里会自动创建数据库吗
      MYSQL_USER: user
      MYSQL_PASSWORD: user123

networks:
  lnmp: 

nginx Dockerfile

FROM centos:7
MAINTAINER www.aliangedu.com
RUN yum install -y gcc gcc-c++ make openssl-devel pcre-devel
ADD nginx-1.12.1.tar.gz /tmp

RUN cd /tmp/nginx-1.12.1 && \
    ./configure --prefix=/usr/local/nginx && \
    make -j 2 && \
    make install

RUN rm -rf /tmp/nginx-1.12.1* && yum clean all

COPY nginx.conf /usr/local/nginx/conf

WORKDIR /usr/local/nginx
EXPOSE 80
CMD ["./sbin/nginx", "-g", "daemon off;"]

php Dockerfile

FROM centos:7
MAINTAINER www.aliangedu.com
RUN yum install -y gcc gcc-c++ make gd-devel libxml2-devel libcurl-devel libjpeg-devel libpng-devel openssl-devel
ADD php-5.6.31.tar.gz /tmp/

RUN cd /tmp/php-5.6.31 && \
    ./configure --prefix=/usr/local/php \
    --with-config-file-path=/usr/local/php/etc \
    --with-mysql --with-mysqli \
    --with-openssl --with-zlib --with-curl --with-gd \
    --with-jpeg-dir --with-png-dir --with-iconv \
    --enable-fpm --enable-zip --enable-mbstring && \
    make -j 4 && \
    make install && \
    cp /usr/local/php/etc/php-fpm.conf.default /usr/local/php/etc/php-fpm.conf && \
    sed -i "s/127.0.0.1/0.0.0.0/" /usr/local/php/etc/php-fpm.conf && \
    sed -i "21a \daemonize = no" /usr/local/php/etc/php-fpm.conf
COPY php.ini /usr/local/php/etc

RUN rm -rf /tmp/php-5.6.31* && yum clean all

WORKDIR /usr/local/php
EXPOSE 9000
CMD ["./sbin/php-fpm", "-c", "/usr/local/php/etc/php-fpm.conf"]

mysql   引用的使用官方的镜像