docker-compose概述与简单编排部署

目录

引言:

一、compose概述

1.1  YAML简介

1.2  YAML支持的数据结构

二、安装compose

2.1  docker compose常用命令 

2.2  docker compose配置常用字段

三、Docker-Compose 部署 Nginx

3.1 准备依赖文件

3.2  编写配置文件 docker-compose.yml 

3.3  生成镜像容器 

3.4  访问测试 

3.5   查看结构 

四、compose编排 安装运行tomcat容器

五、Docker-Compose 部署 LNMP 

5.1  编写 Dockerfile 文件

5.2  编写配置文件 docker-compose.yml 

5.3  生成镜像容器 

5.4  启动 wordpress 服务 

5.4.1 mysql 授权

5.4.2 浏览器访问测试 

引言:

  • 我们知道使用一个 Dockerfile 模板文件可以定义一个单独的应用容器,如果需要定义多个容器就需要服务编排。服务编排有很多种技术方案,今天给大家介绍 Docker 官方产品 Docker-Compose
  • Dockerfile 可以定义一个单独的应用容器;而 docker-compose 则允许用户在一个模板(YAML 格式)中定义一组相关联的应用容器(被称为一个 project,即项目),例如一个 Web 服务容器再加上后端的数据库服务容器(LNMP)等
  • Docker-Compose 项目由 Python 编写,调用 Docker 服务提供的 API 来对容器进行管理。因此,只要所操作的平台支持 Docker API,就可以在其上利用 Compose 来进行编排管理

一、compose概述

  • compose是一个用于定义及允许多个Docker容器的工具,主要是通过一个YAML文件进行服务配置

  • 使用Docker Compose不再需要使用Shell脚本来启动容器

  • Docker Compose非常适合组合使用多个容器进行开发的场景

1.1  YAML简介

YAML(语言)的设计目标,就是方便人类读写,它实质上是一种通用的数据串行化格式

它的基本语法规则如下:

  • 大小写敏感
  • 使用缩进表示层级关系
  • 缩进时不允许使用Tab键,只允许使用空格
  • 缩进的空格数目不重要,只要相同层级的元素左侧对齐即可

#表示注释

1.2  YAML支持的数据结构

  • 对象,键值对的集合
  • 数组,一组按次序排列的值,又称序列
  • 纯量,单个的,不可再分的值

二、安装compose

链接:docker-compose
提取码:y7c6

cd /usr/local/bin
curl -L https://github.com/docker/compose/releases/download/1.21.2/docker-compose-$(uname -s)-$(uname -m) -o /usr/local/bin/docker-compose
chmod +x /usr/local/bin/docker-compose
docker-compose -v



==拖入docker-compose==
chmod +x docker-compose
mv docker-compose /usr/bin

2.1  docker compose常用命令 

字段 描述
build 重新构建服务
ps 列出容器
up 创建和启动容器
exec 在容器里面执行命令
scale 指定一个服务容器启动数量
top 显示容器进程
logs 查看容器输出
down 删除容器、网络、数据卷和镜像
stop/start/restart 停止/启动/重启服务

2.2  docker compose配置常用字段

字段 描述
build docker context 指定Dockerfile文件名构建镜像上下文路径
image 指定镜像
command 执行命令,覆盖默认命令
container name 指定容器名称,由于容器名称是唯一的,如果指定自定义名称,则无法scale
environment 添加环境变量
networks 加入网络
ports 暴露容器端口,与-p相同,但不能低于60
volumes 挂载宿主机路径或命令卷
restart 重启策略,默认no,always,no-failure,unless-stoped
hostname 容器主机名

三、Docker-Compose 部署 Nginx

3.1 准备依赖文件

[root@localhost ~]# mkdir -p /opt/compose_nginx/nginx
[root@localhost ~]# cd /opt/compose_nginx/nginx/
[root@localhost nginx]# rz
[root@localhost nginx]# ls
nginx-1.12.2.tar.gz
vim Dockerfile
cat Dockerfile 
FROM centos:7
RUN yum -y update
RUN yum -y install pcre-devel zlib-devel gcc gcc-c++ make
RUN useradd -M -s /sbin/nologin nginx
ADD nginx-1.12.2.tar.gz /usr/local/src
WORKDIR /usr/local/src/nginx-1.12.2
RUN ./configure \
--prefix=/usr/local/nginx \
--user=nginx \
--group=nginx \
--with-http_stub_status_module
RUN make -j 4 && make install
RUN ln -s /usr/local/nginx/sbin/nginx /usr/local/sbin/
#ENV PATH /usr/local/nginx/sbin/:PATH
EXPOSE 80
EXPOSE 443
RUN echo "daemon off;" >> /usr/local/nginx/conf/nginx.conf
CMD ["/usr/local/nginx/sbin/nginx"]

3.2  编写配置文件 docker-compose.yml 

[root@localhost ~]# mkdir -p /opt/compose_nginx/nginx
[root@localhost nginx]# cd ..
[root@localhost compose_nginx]# vim docker-compose.yml
[root@localhost compose_nginx]# cat docker-compose.yml 
version: '3'
services:
  nginx:
    hostname: nginx
    build:
      context: ./nginx
      dockerfile: Dockerfile
    ports:
      - 1216:80
      - 1217:443
    networks:
      - lic
    volumes:
      - ./wwwroot:/usr/local/nginx/html
networks:
  lic:
  • 参数说明:
version: '3'					#compose编排版本为3
services:						#服务:
  nginx:						#服务名称
    hostname: nginx				 #容器主机名
    build:						#创建容器过程:
      context: ./nginx			 #所需素材都在该目录(仓库)下
      dockerfile: Dockerfile	  #指定Dockerfile文件
    ports:						#提供端口:
      - 1216:80					 #对外提供(暴露)的端口
      - 1217:443
    networks:					#指定网络
      - lic						#网络名称(群集名称需一致)
    volumes:					#数据卷
      - ./wwwroot:/usr/local/nginx/html		#将宿主机该仓库内文件与nginx首页文件相关联(容器)
networks:						#对外公开需要声明networks群集名称
  lic:

3.3  生成镜像容器 

[root@localhost nginx]# docker-compose -f docker-compose.yml up -d
...
...
Successfully built f87b84e57bd9
Successfully tagged compose_nginx_nginx:latest

3.4  访问测试 

[root@localhost compose_nginx]# ls
docker-compose.yml  nginx  wwwroot

echo "hello world" > index.html
curl 192.168.223.30:1216

3.5   查看结构 

[root@localhost compose_nginx]# yum -y install tree
[root@localhost compose_nginx]# tree ./
./
├── docker-compose.yml
├── nginx
│   ├── Dockerfile
│   └── nginx-1.12.2.tar.gz
└── wwwroot
    └── index.html

2 directories, 4 files

四、compose编排 安装运行tomcat容器

cd /opt
mkdir compose-tomcat
cd compose-tomcat
mkdir tomcat
cd tomcat
==拖入安装包apache-tomcat-9.0.16.tar.gz 、jdk-8u91-linux-x64.tar.gz==

vim Dockerfile
FROM centos:7

ADD apache-tomcat-9.0.16.tar.gz /usr/local
ADD jdk-8u91-linux-x64.tar.gz /usr/local

WORKDIR /usr/local

RUN mv apache-tomcat-9.0.16 tomcat
RUN mv jdk1.8.0_91 java

ENV JAVA_HOME /usr/local/java
ENV CLASSPATH $JAVA_HOME/lib/tools.jar:$JAVA_HOME/lib/dt.jar
ENV PATH $JAVA_HOME/bin:$PATH

EXPOSE 8080
CMD ["/usr/local/tomcat/bin/catalina.sh","run"]

====>:wq

cd ..
vim tomcat-compose.yml

version: '3'
services:
 tomcat:
  hostname: tomcat
  build :
   context: ./tomcat
   dockerfile: Dockerfile
  ports:
   - 7788:8080
  networks:
   - cluster
networks:
 cluster:

====>:wq

docker-compose -f tomcat-compose.yml up -d

==真机访问http://IP:7788==

五、Docker-Compose 部署 LNMP 

5.1  编写 Dockerfile 文件

Dockerfile 文件详情见上期博客

  • 存放目录为:
[root@localhost ~]#mkdir -p /opt/compose_lnmp/nginx/
[root@localhost ~]#mkdir -p /opt/compose_lnmp/mysql/
[root@localhost ~]#mkdir -p /opt/compose_lnmp/php/
  • 文件配置:
[root@localhost ~]#ls /opt/compose_lnmp/nginx/
Dockerfile  nginx-1.12.0.tar.gz  nginx.conf  wordpress-4.9.4-zh_CN.tar.gz
[root@localhost ~]#ls /opt/compose_lnmp/mysql/
Dockerfile  my.cnf  mysql-boost-5.7.20.tar.gz
[root@localhost ~]#ls /opt/compose_lnmp/php/
Dockerfile  php-7.1.10.tar.bz2  php-fpm.conf  php.ini  www.conf

5.2  编写配置文件 docker-compose.yml 

[root@localhost ~]#cat docker-compose.yml
version: '2'
services:
  nginx:
    hostname: nginx
    build:
      context: /opt/compose_lnmp/nginx/
      dockerfile: Dockerfile
    ports:
      - 1111:80
      - 2222:443
    container_name: nginx_server
    networks:
      lnmp:
        ipv4_address: 172.111.0.10
 
  mysql:
    hostname: mysql
    build:
      context: /opt/compose_lnmp/mysql/
      dockerfile: Dockerfile
    ports:
      - 3306:3306
    container_name: mysql_server
    networks:
      lnmp:
        ipv4_address: 172.111.0.20
 
  php:
    hostname: php
    build:
      context: /opt/compose_lnmp/php/
      dockerfile: Dockerfile
    ports:
      - 9000:9000
    container_name: php_server
    networks:
      lnmp:
        ipv4_address: 172.111.0.30
 
networks:
  lnmp:
    driver: bridge
    ipam:
      config:
        - subnet: 172.111.0.0/16

5.3  生成镜像容器 

[root@localhost /opt/compose_lnmp]#docker-compose -f docker-compose.yml up -d
......
[root@localhost /opt/compose_lnmp]#docker images
REPOSITORY           TAG       IMAGE ID       CREATED              SIZE
compose_lnmp_php     latest    86b0447ebabd   About a minute ago   1.22GB
compose_lnmp_mysql   latest    59579ca01443   5 minutes ago        9.98GB
compose_lnmp_nginx   latest    82d760d5d811   17 minutes ago       528MB
centos               7         eeb6ee3f44bd   2 months ago         204MB
[root@localhost /opt/compose_lnmp]#docker ps -a
CONTAINER ID   IMAGE                COMMAND                  CREATED              STATUS              PORTS                                                                            NAMES
53c87813597f   compose_lnmp_php     "/bin/sh -c '/usr/lo…"   About a minute ago   Up About a minute   0.0.0.0:9000->9000/tcp, :::9000->9000/tcp                                        php_server
2d671252967b   compose_lnmp_nginx   "/usr/local/nginx/sb…"   About a minute ago   Up About a minute   0.0.0.0:1111->80/tcp, :::1111->80/tcp, 0.0.0.0:2222->443/tcp, :::2222->443/tcp   nginx_server
9d5428cfdf54   compose_lnmp_mysql   "/usr/sbin/init"         About a minute ago   Up About a minute   0.0.0.0:3306->3306/tcp, :::3306->3306/tcp                                        mysql_server

5.4  启动 wordpress 服务 

5.4.1 mysql 授权

[root@localhost /opt/compose_lnmp]#docker exec -it mysql_server bash
[root@mysql bin]# mysql -u root -p
Enter password: 
#初始密码为空
mysql> create database wordpress;
Query OK, 1 row affected (0.00 sec)
 
mysql> grant all privileges on wordpress.* to 'wordpress'@'%' identified by '123456';
Query OK, 0 rows affected, 1 warning (0.00 sec)
 
mysql> grant all privileges on *.* to 'root'@'%' identified by '123456';
Query OK, 0 rows affected, 1 warning (0.00 sec)
 
mysql> flush privileges;
Query OK, 0 rows affected (0.00 sec)

5.4.2 浏览器访问测试 

访问 http://192.168.126.12:1111/wordpress/index.php

猜你喜欢

转载自blog.csdn.net/weixin_67470255/article/details/125882946