Docker-Docker Compose的安装与使用

Docker Compose是什么

  • Docker Compose是用于定义和运行多容器Docker应用程序的工具。通过Compose,您可以使用YAML文件来配置应用程序的服务。然后使用一个命令,就可以从配置中创建并启动所有服务。
  • 简单说就是,为虚拟化容器实现批处理提供了一种实现方式
  • 使用Compose基本上是三步
    • 编辑Dockerfile定义应用环境,以便可以在任何地方复制它
    • 定义组成应用程序的服务,docker-compose.yml用于描述容器与容器之间的运行环境
    • 执行 docker-compose up,启动您的整个应用程序(你所描述的)
  • docker-compose.yml看起来是
    version: '3'
    services:
      web:
        build: .
        ports:
        - "5000:5000"
        volumes:
        - .:/code
        - logvolume01:/var/log
        links:
        - redis
      redis:
        image: redis
    volumes:
      logvolume01: {}
    
    • 注意yaml的语法规则
  • Docker Compose具有管理整个应用程序声明周期的命令
    • 启动,停止和重建服务
    • 查看正在运行的服务的状态
    • 流运行服务的日志输出
    • 对服务运行一次性命令

Docker Compose的安装

  • 前置条件
    • 已安装Docker Engine
  • 下载Docker Compose的二进制文件
    sudo curl -L "https://github.com/docker/compose/releases/download/1.24.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的卸载

  • 使用curl安装的docker compose的卸载
    sudo rm /usr/local/bin/docker-compose
    
  • 使用pip安装的docker compose的卸载
    pip uninstall docker-compose
    

Compose File与Docker版本上的关系

Compose file formatDocker Engine release
3.718.06.0+
3.618.02.0+
3.517.12.0+
3.417.09.0+
3.317.06.0+
3.217.04.0+
3.11.13.1+
3.01.13.0+
2.417.12.0+
2.317.06.0+
2.21.13.0+
2.11.12.0+
2.01.10.0+
1.01.9.1.+

Docker Compose常用命令

命令描述命令描述
build Usage: build [options] [–build-arg key=val…] [SERVICE…] --no-cache 不使用缓存构建镜像重新构建服务up Usage: up [options] [–scale SERVICE=NUM…] [SERVICE…] -d 在后台运行容器 -no-deps 不启动连接服务 --no-recreate 如果容器存在,不重建他们 --no-build 不构建镜像,即使它丢失 --build 启动容器下构建镜像 --scale SERVICE=NUM 指定一个服务(容器)的启动数量创建和启动容器
config Usage: config [options] -q, --quiet 只验证不打印 --services 只打印服务名称,每行一个 --volumes 打印数据卷名称,每行一个验证和查看Compose文件stop Usage: stop [SERVICE…]停止服务
exec Usage: exec [options] SERVICE COMMAND [ARGS…] -d 在后台运行命令 --privileged 给这个进程赋予特权权限 -u, --user USER 作为该用户运行该命令 -T 禁用分配伪终端,默认分配一个终端 --index=index 多个容器时的索引数字,默认1在运行的容器里执行命令start Usage: start [SERVICE…]启动服务
port Usage: port [options] SERVICE PRIVATE_PORT --protocol=proto tcp或udp,默认tcp --index=index 多个容器时的索引数字,默认1打印绑定的开放端口restart Usage: restart [options] [SERVICE…]重启服务
ps Usage: ps [options] [SERVICE…] -q 只显示ID列出容器top Usage: top [SERVICE…]显示容器运行进程
rm Usage: rm [options] [SERVICE…] -f, --force 强制删除 -s, --stop 删除容器时如果需要先停止容器 -v 删除与容器相关的任何匿名卷删除停止的服务容器logs -f, --follow 实时输出日志 -t, --timestamps 显示时间戳 --tail=“all” 从日志末尾显示行数显示容器的输出
scale Usage: scale [options] [SERVICE=NUM…]指定一个服务启动容器数量down停止容器和删除容器、网络、数 据卷和镜像
  • 查看命令
    docker-compose --help
    

试用Docker Compose(一)

  • 选取合适的路径
  • 创建与编辑docker-compose.yml文件
    touch docker-compose.yml
    
    version: '3'
    services:
      web:
        build: .
        ports:
          - "8888:80"
    
  • 创建与编辑Dockerfile
    touch Dockerfile
    
    FROM centos:7
    MAINTAINER learn docker compose
    RUN yum install -y httpd php php-gd php-mysql
    RUN echo "<?php phpinfo()?>" > /var/www/html/index.php
    CMD ["/usr/sbin/httpd","-D","FOREGROUND"]
    EXPOSE 80
    
  • 启动,该命令需要在docker-compose.yml所在路径下执行
    docker-compose up
    
  • 查看效果
    • 浏览器访问 对应主机IP:8888
    • docker-compose ps,该命令需要在docker-compose.yml所在路径下执行
      • 输出结果

试用Docker Compose(二)

  • 模拟部署LNMP
    • 创建demo2文件夹
      • 准备nginx(创建nginx文件夹)
        • 创建与编辑Dockerfile(/demo2/nginx/Dockerfile)
          FROM centos:7
          MAINTAINER learn docker compose
          RUN yum install -y gcc gcc-c++ make openssl-devel pcre-devel
          ADD nginx-1.16.1.tar.gz /tmp
          RUN cd /tmp/nginx-1.16.1 && ./configure --prefix=/usr/local/nginx && make -j 2 && make install
          RUN rm -f /usr/local/nginx/conf/nginx.conf 
          COPY nginx.conf /usr/local/nginx/conf
          
          EXPOSE 80
          CMD ["/usr/local/nginx/sbin/nginx", "-g", "daemon off;"]
          
        • 下载nginx
          • 现在的稳定版
            • wget http://nginx.org/download/nginx-1.16.1.tar.gz
        • nginx的配置文件
          user  root; 
          worker_processes  auto; 
          
          error_log  logs/error.log  info;
          
          pid        logs/nginx.pid; 
          
          
          events {
              use epoll; 
          }
          
          http {
          
              include       mime.types;
              default_type  application/octet-stream;
          
              log_format  main '$remote_addr - $remote_user [$time_local] "$request" '
                                '$status $body_bytes_sent "$http_referer" '
                                '"$http_user_agent" "$http_x_forwarded_for"';
          
              access_log logs/access.log main;
              sendfile        on;
              keepalive_timeout  65;
          
              server {
                  listen 80;
                  server_name localhost;
                  root html;
                  index index.html index.php;
          
                  location ~ \.php$ {
                      root html;
                      fastcgi_pass php-cgi:9000;
                      fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; 
                      include fastcgi_params;
                  }
              }
          }
          
      • 准备MySQL
        • 准备外部的MySQL配置文件(/demo2/mysql/conf/my.conf)
          [mysqld]
          user=mysql
          port=3306
          datadir=/var/lib/mysql
          socket=/var/lib/mysql/mysql.sock
          pid-file=/var/run/mysql/mysql.pid
          log_error=/var/log/mysql/error.log
          character_set_server = utf8
          max_connections=3600
          
      • 准备PHP
        • 创建和编辑Dockerfile(/demo2/php/Dockerfile)
          FROM centos:7
          MAINTAINER learn docker compose
          RUN yum install -y gcc gcc-c++ gd-devel libxml2-devel libcurl-devel libjpeg-devel libpng-devel openssl-devel make automake
          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 2 && 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 && \
              cp ./sapi/fpm/init.d.php-fpm /etc/init.d/php-fpm && \
              chmod +x /etc/init.d/php-fpm
          COPY php.ini /usr/local/php/etc
          
          EXPOSE 9000
          CMD /etc/init.d/php-fpm start && tail -F /var/log/messages
          
        • 下载php
          • wget https://www.php.net/distributions/php-7.3.11.tar.gz PASS7.3.11的php有些麻烦(cmake3、libzip、library还有些错误)——暂时放弃
          • 妥协了,用了php5.6
        • 创建与编辑php的配置文件(/demo2/php/php.ini)
          • 暂不贴出来太长了,默认即可,暂无特殊配置
      • 准备docker-compose.yml(/demo2/docker-compose.yml)
        version: '3'
        services:
          nginx:
            hostname: nginx
            build:
              context: ./nginx
              dockerfile: Dockerfile
            ports:
              - 80:80
            links:
              - php:php-cgi
            volumes:
              - ./wwwroot:/usr/local/nginx/html
        
          php:
            hostname: php
            build: ./php
            links:
              - mysql:mysql-db
            volumes:
              - ./wwwroot:/usr/local/nginx/html
        
          mysql:
            hostname: mysql
            image: mysql:5.6
            ports:
              - 3306:3306
            volumes:
              - ./mysql/conf:/etc/mysql/conf.d
              - ./mysql/data:/var/lib/mysql
            environment:
              MYSQL_ROOT_PASSWORD: 123456
              MYSQL_DATABASE: wordpress
              MYSQL_USER: user
              MYSQL_PASSWORD: user123
        
    • 准备构建
      • docker-compose up --build
    • 访问对应地址
      • 显示403
    • 在wwwroot下,编写一个简单的php界面(info.php)
      <?php phpinfo()?>
      
    • 访问对应地址(查看效果)
      • 地址/info.php
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值