• 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

    1. cd /usr/local/bin
    2. curl -L https://github.com/docker/compose/releases/download/1.21.2/docker-compose-$(uname -s)-$(uname -m) -o /usr/local/bin/docker-compose
    3. chmod +x /usr/local/bin/docker-compose
    4. docker-compose -v
    5. ==拖入docker-compose==
    6. chmod +x docker-compose
    7. 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 准备依赖文件

    1. [root@localhost ~]# mkdir -p /opt/compose_nginx/nginx
    2. [root@localhost ~]# cd /opt/compose_nginx/nginx/
    3. [root@localhost nginx]# rz
    4. [root@localhost nginx]# ls
    5. nginx-1.12.2.tar.gz
    6. vim Dockerfile
    7. cat Dockerfile
    8. FROM centos:7
    9. RUN yum -y update
    10. RUN yum -y install pcre-devel zlib-devel gcc gcc-c++ make
    11. RUN useradd -M -s /sbin/nologin nginx
    12. ADD nginx-1.12.2.tar.gz /usr/local/src
    13. WORKDIR /usr/local/src/nginx-1.12.2
    14. RUN ./configure \
    15. --prefix=/usr/local/nginx \
    16. --user=nginx \
    17. --group=nginx \
    18. --with-http_stub_status_module
    19. RUN make -j 4 && make install
    20. RUN ln -s /usr/local/nginx/sbin/nginx /usr/local/sbin/
    21. #ENV PATH /usr/local/nginx/sbin/:PATH
    22. EXPOSE 80
    23. EXPOSE 443
    24. RUN echo "daemon off;" >> /usr/local/nginx/conf/nginx.conf
    25. CMD ["/usr/local/nginx/sbin/nginx"]

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

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

    3.3  生成镜像容器 

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

    3.4  访问测试 

    1. [root@localhost compose_nginx]# ls
    2. docker-compose.yml nginx wwwroot
    3. echo "hello world" > index.html
    4. curl 192.168.223.30:1216

    3.5   查看结构 

    1. [root@localhost compose_nginx]# yum -y install tree
    2. [root@localhost compose_nginx]# tree ./
    3. ./
    4. ├── docker-compose.yml
    5. ├── nginx
    6. │ ├── Dockerfile
    7. │ └── nginx-1.12.2.tar.gz
    8. └── wwwroot
    9. └── index.html
    10. 2 directories, 4 files

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

    1. cd /opt
    2. mkdir compose-tomcat
    3. cd compose-tomcat
    4. mkdir tomcat
    5. cd tomcat
    6. ==拖入安装包apache-tomcat-9.0.16.tar.gz 、jdk-8u91-linux-x64.tar.gz==
    7. vim Dockerfile
    8. FROM centos:7
    9. ADD apache-tomcat-9.0.16.tar.gz /usr/local
    10. ADD jdk-8u91-linux-x64.tar.gz /usr/local
    11. WORKDIR /usr/local
    12. RUN mv apache-tomcat-9.0.16 tomcat
    13. RUN mv jdk1.8.0_91 java
    14. ENV JAVA_HOME /usr/local/java
    15. ENV CLASSPATH $JAVA_HOME/lib/tools.jar:$JAVA_HOME/lib/dt.jar
    16. ENV PATH $JAVA_HOME/bin:$PATH
    17. EXPOSE 8080
    18. CMD ["/usr/local/tomcat/bin/catalina.sh","run"]
    19. ====>:wq
    20. cd ..
    21. vim tomcat-compose.yml
    22. version: '3'
    23. services:
    24. tomcat:
    25. hostname: tomcat
    26. build :
    27. context: ./tomcat
    28. dockerfile: Dockerfile
    29. ports:
    30. - 7788:8080
    31. networks:
    32. - cluster
    33. networks:
    34. cluster:
    35. ====>:wq
    36. docker-compose -f tomcat-compose.yml up -d
    37. ==真机访问http://IP:7788==

    五、Docker-Compose 部署 LNMP 

    5.1  编写 Dockerfile 文件

    Dockerfile 文件详情见上期博客

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

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

    1. [root@localhost ~]#cat docker-compose.yml
    2. version: '2'
    3. services:
    4. nginx:
    5. hostname: nginx
    6. build:
    7. context: /opt/compose_lnmp/nginx/
    8. dockerfile: Dockerfile
    9. ports:
    10. - 1111:80
    11. - 2222:443
    12. container_name: nginx_server
    13. networks:
    14. lnmp:
    15. ipv4_address: 172.111.0.10
    16. mysql:
    17. hostname: mysql
    18. build:
    19. context: /opt/compose_lnmp/mysql/
    20. dockerfile: Dockerfile
    21. ports:
    22. - 3306:3306
    23. container_name: mysql_server
    24. networks:
    25. lnmp:
    26. ipv4_address: 172.111.0.20
    27. php:
    28. hostname: php
    29. build:
    30. context: /opt/compose_lnmp/php/
    31. dockerfile: Dockerfile
    32. ports:
    33. - 9000:9000
    34. container_name: php_server
    35. networks:
    36. lnmp:
    37. ipv4_address: 172.111.0.30
    38. networks:
    39. lnmp:
    40. driver: bridge
    41. ipam:
    42. config:
    43. - subnet: 172.111.0.0/16

    5.3  生成镜像容器 

    1. [root@localhost /opt/compose_lnmp]#docker-compose -f docker-compose.yml up -d
    2. ......
    3. [root@localhost /opt/compose_lnmp]#docker images
    4. REPOSITORY TAG IMAGE ID CREATED SIZE
    5. compose_lnmp_php latest 86b0447ebabd About a minute ago 1.22GB
    6. compose_lnmp_mysql latest 59579ca01443 5 minutes ago 9.98GB
    7. compose_lnmp_nginx latest 82d760d5d811 17 minutes ago 528MB
    8. centos 7 eeb6ee3f44bd 2 months ago 204MB
    9. [root@localhost /opt/compose_lnmp]#docker ps -a
    10. CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
    11. 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
    12. 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
    13. 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 授权

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

    5.4.2 浏览器访问测试 

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

  • 相关阅读:
    scala的schema函数(算子)
    分布式常见问题丨高并发时重复提交,基于Redis的幂等性解决方案来啦
    【Java并发】聊聊LongAdder应用场景及其原理
    logback日志文件sm3摘要运算
    面试-SpringCloud常见组件和注册表结构+nacos
    Python中取2023, 9, 1——2023, 10, 31的全部时间
    【数据结构与算法】之深入解析“考试的最大困扰度”的求解思路与算法示例
    16数据结构与算法刷题之【滑动窗口】篇
    react-to-vue使用教程
    ssm+java+vue基于微信小程序的游泳馆管理系统#毕业设计
  • 原文地址:https://blog.csdn.net/weixin_67470255/article/details/125882946