Docker——Docker Compose应用

Docker Compose简介

  • Docker开源项目,负责实现对Docker容器集群的快速编排
  • 托管于Github上,由Python实现,调用 Docker服务的API负责实现对Docker容器集群的快速编排,即通过一个单独的yaml文件,来定义一组相关的容器来为一个项目服务
  • 所以,Docker-compose默认的管理对象是项目,通过子命令的方式对项目中的一组容器进行生命周期的管理
  • Docker Compose来轻松高效的管理容器,定义运行多个容器
  • 作用:批量容器编排

查阅官方文档

  • https://docs.docker.com/compose/
  • Compose是一个用于定义和运行容器Docker应用程序的工具
  • 使用Compose,可以使用YAML文件来配置应用程序的服务。然后,使用一个命令,从配置中创建并启动所有服务
  • Compose适用于所有环境:生产暂存开发测试以及CI工作流
  • 使用Compose基本上分为三个步骤:
    1. 使用Dockerfile定义应用程序的环境,以便可以在任何地方复制。
    2. Docker-compose.yml中定义组成应用程序的服务,以便它们可以在隔离的环境中一起运行
    3. 运行Docker compose up,Docker compose命令启动并运行整个应用程序。也可以使用Docker compose二进制文件运行Docker compose up。

Docker Compose安装

#由于官方镜像是国外的太慢,使用国内镜像下载
[root@docker ~]# curl -L https://get.daocloud.io/docker/compose/releases/download/1.25.5/docker-compose-`uname -s`-`uname -m` > /usr/local/bin/docker-compose

#为compose授权
[root@docker ~]# chmod +x /usr/local/bin/docker-compose
[root@docker bin]# docker-compose version

Docker Compose初体验

创建应用
#为项目创建目录
[root@docker docker]# mkdir composetest

#在项目目录中创建一个名为app.py的文件
[root@docker composetest]# vim app.py
import time

import redis
from flask import Flask                                 #导入Flask框架

app = Flask(__name__)
cache = redis.Redis(host='redis', port=6379)            #使用redis缓存

def get_hit_count():
    retries = 5
    while True:
        try:
            return cache.incr('hits')
        except redis.exceptions.ConnectionError as exc:
            if retries == 0:
                raise exc
            retries -= 1
            time.sleep(0.5)

@app.route('/')
def hello():
    count = get_hit_count()
    return 'Hello World! I have been seen {} times.\n'.format(count)

#在项目目录中创建另一个名为requirements.txt的文件(依赖包)
[root@docker composetest]# vim requirements.txt
flask
redis

创建Dockerfile
[root@docker composetest]# vim Dockerfile
FROM python:3.7-alpine
WORKDIR /code
ENV FLASK_APP=app.py
ENV FLASK_RUN_HOST=0.0.0.0
RUN apk add --no-cache gcc musl-dev linux-headers
COPY requirements.txt requirements.txt
RUN pip install -r requirements.txt
EXPOSE 5000
COPY . .
CMD ["flask", "run"]

在yml文件中合成服务
[root@docker composetest]# vim docker-compose.yml
version: "3"
services:
  web:
    build: .
    ports:
      - "5000:5000"
  redis:
    image: "redis:alpine"

使用Compose构建并运行应用程序

#从项目目录中,通过运行docker compose up启动应用程序
[root@docker composetest]# docker-compose up

Creating composetest_web_1   ... done
Creating composetest_redis_1 ... done

#本机测试
[root@docker composetest]# curl localhost:5000
Hello World! I have been seen 1 times.

Docker Compose配置编写规则

  • 只有三层
  • https://docs.docker.com/compose/compose-file/compose-file-v3/
    • 第一层:Version 版本,与Docker Engine对应
    • 第二层:Services服务
      • 服务1:web (服务配置)images build Network
      • 服务2:redis
    • 第三层:其他配置
      • 网络/卷,全局规则
  • Service+的参数
    • container_name:指定自定义容器名称,而不是生成的默认名称
    • depends_on表示服务之间的依赖关系,服务依赖性导致以下行为,[ 如:启动顺序 web -> redis web依赖redis ]

使用Compose一键部署Wordpress博客

#创建一个空的项目目录
[root@docker /]# mkdir my_wordpress

#编写docker-compose.yml文件
[root@docker my_wordpress]# vim docker-compose.yml
version: "3.3"
    
services:
  db:
    image: mysql:5.7                      #镜像使用mysql:5.7
    volumes:
      - db_data:/var/lib/mysql            #数据卷挂载 主机路径:容器路径
    restart: always                       #总是重启,创建容器时没有添加参数导致的后果是当Docker重启时,容器未能自动启动
    environment:                          #环境
      MYSQL_ROOT_PASSWORD: somewordpress
      MYSQL_DATABASE: wordpress
      MYSQL_USER: wordpress
      MYSQL_PASSWORD: wordpress
    
  wordpress:
    depends_on:                           #依赖于数据库db
      - db
    image: wordpress:latest               #下载wp最新版镜像
    volumes:
      - wordpress_data:/var/www/html      #数据卷挂载
    ports:
      - "8000:80"                         #本机8000端口映射容器80端口
    restart: always
    environment:
      WORDPRESS_DB_HOST: db:3306
      WORDPRESS_DB_USER: wordpress
      WORDPRESS_DB_PASSWORD: wordpress
      WORDPRESS_DB_NAME: wordpress
volumes:
  db_data: {}
  wordpress_data: {}

[root@docker my_wordpress]# docker-compose up    #前台运行
[root@docker my_wordpress]# docker-compose up -d #后台运行

在这里插入图片描述

使用Compose搭建lnmp环境

  • 创建compose目录并下载镜像
[root@docker]# mkdir /lnmp
[root@docker lnmp]# docker pull nginx:1.18
[root@docker lnmp]# docker pull  mysql:5.7
[root@docker lnmp]# docker pull php:5.6-fpm
  • 建立目录并创建文件
[root@docker lnmp]# tree
.
├── conf
│   └── default.conf
├── docker-compose.yml
└── html
    ├── index.php
    ├── index.html
  • 创建nginx配置文件
    • 直接启动容器从容器中复制配置文件进行修改
[root@docker lnmp]# vim conf/default.conf
server {
    listen       80;
    listen  [::]:80;
    server_name  localhost;

#charset koi8-r;
#access_log  /var/log/nginx/host.access.log  main;

location / {
    root   /usr/share/nginx/html;
    index  index.html index.php index.htm;
}

#error_page  404              /404.html;

# redirect server error pages to the static page /50x.html
#
error_page   500 502 503 504  /50x.html;
location = /50x.html {
    root   /usr/share/nginx/html;
}

# proxy the PHP scripts to Apache listening on 127.0.0.1:80
#
#location ~ \.php$ {
#    proxy_pass   http://127.0.0.1;
#}

# pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
#
location ~ \.php$ {
    root           /var/www/html;
    fastcgi_pass   php:9000;
    fastcgi_index  index.php;
    fastcgi_param  SCRIPT_FILENAME  $document_root$fastcgi_script_name;
    include        fastcgi_params;
}

# deny access to .htaccess files, if Apache's document root
# concurs with nginx's one
#
#location ~ /\.ht {
#    deny  all;
#}
}
  • 网页内容
[root@docker lnmp]# cat html/index.html 
ok
[root@docker lnmp]# cat html/index.php 
<?php
$conn=mysql_connect("mysql","root","123456");
if ($conn) echo "It's ok!!";
mysql_close();
?>
  • Docker-compose.yml 文件
[root@docker lnmp]# vim docker-compose.yaml
version: "3"
services:
  nginx:
   image: nginx:1.18
   ports:
     - 80:80
   volumes:
     - /lnmp/conf/default.conf:/etc/nginx/conf.d/default.conf
     - /lnmp/html:/usr/share/nginx/html
   depends_on:
     - php
  php:
    image: php:5.6-fpm
    volumes:
     - /lnmp/html:/var/www/html/
    depends_on:
     - mysql
  mysql:
    image: mysql:5.7
    ports:
      - 3306:3306
    environment:
      - MYSQL_ROOT_PASSWORD=123456
  • 使用Docker-compose构建
[root@docker lnmp]# docker-compose up -d
[root@docker lnmp]# docker-compose ps
  • 构建完成后访问页面进行测试
    • 192.168.100.100/index.php
    • 192.168.100.100/index.html
    • 此时可能会发生php与mysql无法对接的问题,需要进入php安装插件
      • ./docker-php-ext-install mysql
  • 部署WordPress
#进入宿主机lnmp目录下的html主页目录解压WordPress
[root@docker html]# tar xf wordpress-4.9.4-zh_CN.tar.gz
#删除源码包
[root@docker html]# rm -rf wordpress-4.9.4-zh_CN.tar.gz
#进入解压后的路径
[root@docker html]# cd wordpress/
#移动目录下的所有文件至上一级html主页目录
[root@docker wordpress]# mv ./* ..
  • 再次访问宿主机IP地址
    • 根据提示创建php文件
    • 进入数据库主机,为WordPress创建数据库授权账户

在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
CentOS是一种开源的操作系统,它是基于Linux内核的一个发行版。CentOS提供了稳定、安全以及与商业操作系统相似的功能,因此在企业中得到了广泛的应用。CentOS支持多种应用软件和工具,其中包括DockerDocker ComposeDocker是一种开源的容器化平台,它允许开发者将应用程序及其依赖打包成一个称为容器的轻量级可移植单位。通过使用Docker,开发者可以在不同的环境中快速部署、扩展和管理应用程序。Docker可以提供隔离效果,使得应用程序可以在不同的主机上运行,而不会相互干扰。 Docker Compose是一个用于定义和运行多容器Docker应用程序的工具。通过使用Docker Compose,开发者可以使用YAML文件来定义一个基于容器应用程序的服务、网络和卷等。Docker Compose提供了一个简单的命令行工具,可以帮助开发者轻松地启动、停止和管理多个Docker容器。 在CentOS中使用DockerDocker Compose非常简便。首先,需要安装Docker CE(社区版)或Docker EE(企业版)。安装完成后,就可以使用Docker命令来创建、运行和管理容器。要使用Docker Compose,需要安装并配置Compose工具。然后,可以使用docker-compose命令来启动、停止和管理基于Compose文件定义的多容器应用程序。 总结来说,CentOS是一种流行的操作系统,而DockerDocker Compose是常用的容器化工具。通过使用这些工具,开发者可以快速构建、部署和管理容器化的应用程序。它们为应用程序的开发和运行提供了更方便和灵活的环境。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

611#

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值