docker容器-compose单机容器编排

news2024/11/24 0:28:43

yaml文件:是一种标记语言,以竖列的形式展示序列化的数据格式,可读性高

类似于json格式,语法简单

yaml通过缩进来表示数据结构,连续的项目用-减号来表示

yaml文件使用的注意事项

1、大小写敏感

2、通过缩进表示层级关系

3、只能用空格缩进不能用tab缩进

4、可以使用#注释

5、符号字符后面都有一个空格 test

6、单引号引起来的字符串,会被当做普通字符串处理,"#&*" 双引号里面是特殊字符,就是本义

'$'

"$"

yaml文件的基本数据结构

1、声明变量(标量,单个的,不可再分的值 整数,布尔类型)

name:xiaobu
age:20
tall:yes
handsan:yes
wan:no

2、list(列表)表示有序的元素集合

class:
  - xiaobu
  - xiaobu2
  - xiaobu3

3、键值对映射

student:
  name:xiaobu
  age:20
student:
  name:xiaobu2
  age:18

4、注释

#test

5、引用

student:&id1
  name:xiaobu
  age:20
student1:*id1
用&来定义锚点,用*来进行引用

6、字符串引号

name: 'xiaobu'
name: "xiaobu"
name: '$'
docker-compose单机容器编排

Dockerfile:先配置好文件,然后build,镜像----->容器

docker-compose 既可以基于Dockerfile也可以基于镜像,一键式拉起镜像和容器

docker-compose核心就是yaml文件,可以定义容器一切,通过yml配置,直接运行容器

docker:单节点,docker没有统一对外提供服务的端口和配置,docker一般都是内部访问,无需使用https

如果要对外以集群和分布式的方式提供统一访问的端口,k8s+ingress

docker-compose的常用命令
build:构建服务
ps: 列出由docker-compose编排出来的容器
up	创建和启动容器
top	显示容器的进程
logs	查看容器的输出日志
down	删除容器,网络,数据卷
exec	在容器中执行命令
stop/start/reraet	停止,启动,重启容器
scale	指定启动的容器数量(副本)
安装docker-compose
把源码文件拖到opt目录下
mv docker-compose-linux-x86_64 docker-compose
mv docker-compose  /usr/local/bin/
chmod  777 /usr/local/bin/docker-compose
docker-compose部署nginx
nginx文件
安装插件
yum -y install tree
在opt目录下创建compose-nginx
在ngin-compose下创建nginx
把nginx的源码包拖到nginx目录下
FROM centos:7
RUN yum -y install gcc pcre-devel openssl-devel zlib-devel openssl openssl-devel
ADD nginx-1.22.0.tar.gz /usr/local/src/
RUN useradd -M -s /sbin/nologin nginx
WORKDIR /usr/local/src/nginx-1.22.0
RUN ./configure --prefix=/usr/local/nginx --user=nginx --group=nginx --with-http_ssl_module --with-http_v2_module --with-http_realip_module --with-http_stub_status_module --with-http_gzip_static_module --with-pcre --with-stream --with-stream_ssl_module --with-stream_realip_module && make -j 4 && make install
ENV PATH /usr/local/nginx/sbin:$PATH
RUN chmod -R 777 /usr/local/nginx/html
EXPOSE 80
VOLUME ["/usr/local/nginx/html/"]
CMD ["/usr/local/nginx/sbin/nginx","-g","daemon off;"]

在nginx目录下创建www目录
echo "this is nginx1" >> index.html
yml文件
vim docker-compose.yml
version: '3'
services:
  nginx:
    container_name: web1
    hostname: nginx
    build:
      context: /opt/compose-nginx/nginx
      dockerfile: Dockerfile
    ports:
      - 1213:80
    networks:
      mynet:
        ipv4_address: 172.18.0.10
    volumes:
      - /opt/compose-nginx/www:/usr/local/nginx/html
networks:
  mynet:
    driver: bridge
    ipam:
      config:
        - subnet: 172.18.0.0/16
    
     
version: '3'
#指定docker-compose的文件版本
services:
#定义需要运行的服务
  nginx:
    container_name: web1
#指定创建容器的名字
    hostname: nginx
    #指定容器的主机名
    build:
#指定构建nginx容器的上下文以及Dockerfile
      context: /opt/compose-nginx/nginx
#指定Dockerfile的位置,如果用镜像换成image:
      dockerfile: Dockerfile
    ports:
#直接指定宿主机和容器的端口映射关系
      - 1213:80
    networks:
#声明给容器指定的IP地址
      mynet:
#自定义网络
        ipv4_address: 172.18.0.10
    volumes:
      - /opt/compose-nginx/www:/usr/local/nginx/html
networks:
#创建自定义网桥接口配置
  mynet:
    driver: bridge
#声明网段的类型
    ipam:
#声明网段,IP地址的管理和配置
      config:
#子网配置,指定IP地址的范围
        - subnet: 172.18.0.0/16
docker-compose创建镜像和容器
docker-compose -f docker-compose.yml up -d
docker-compose	命令的开头,使用docker-compose进行容器编排
-f	使用特定的compose的模版文件,一般都用docker-compose.yml
-p	project-name:指定项目名称,如果不加,会使用目录名称
-d 后台运行

页面访问

docker-compose构建lnmp
nginx文件
在opt目录下创建lnmp
cd /lnmp
mkdir nginx mysql php
配置nginx
cd /nginx
把源码文件拖到nginx目录下
vim nginx.conf
worker_processes  1;
events {
    worker_connections  1024;
}
http {
    include       mime.types;
    default_type  application/octet-stream;
    sendfile        on;
    keepalive_timeout  65;
    server {
        listen       80;
        server_name  localhost;
        charset utf-8;
        location / {
            root   html;
            index  index.html index.php;
        }
        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
            root   html;
        }
        location ~ \.php$ {
            root           html;
            fastcgi_pass   172.111.0.30:9000;
            fastcgi_index  index.php;
            fastcgi_param  SCRIPT_FILENAME  /usr/local/nginx/html$fastcgi_script_name;
            include        fastcgi_params;
        }
}
}

vim Dockerfile
FROM centos:7
RUN yum -y install gcc pcre-devel openssl-devel zlib-devel openssl openssl-devel
ADD nginx-1.22.0.tar.gz /usr/local/src/
RUN useradd -M -s /sbin/nologin nginx
WORKDIR /usr/local/src/nginx-1.22.0
RUN ./configure --prefix=/usr/local/nginx --user=nginx --group=nginx --with-http_ssl_module --with-http_v2_module --with-http_realip_module --with-http_stub_status_module --with-http_gzip_static_module --with-pcre --with-stream --with-stream_ssl_module --with-stream_realip_module && make -j 4 && make install
ENV PATH /usr/local/nginx/sbin:$PATH
COPY nginx.conf /usr/local/nginx/conf/
ADD wordpress-6.4.2-zh_CN.tar.gz /usr/local/nginx/html
RUN chmod -R 777 /usr/local/nginx/html
EXPOSE 80
VOLUME ["/usr/local/nginx/html/"]
CMD ["/usr/local/nginx/sbin/nginx","-g","daemon off;"]
mysql文件
配置mysql
把源码包拖到mysql目录下

cd /mysql
vim Dockerfile
FROM centos:7
RUN yum -y install ncurses ncurses-devel bison cmake pcre-devel zlib-devel gcc gcc-c++ make && useradd -M -s /sbin/nologin mysql
ADD mysql-boost-5.7.20.tar.gz /usr/local/src
WORKDIR /usr/local/src/mysql-5.7.20/
RUN cmake \
-DCMAKE_INSTALL_PREFIX=/usr/local/mysql \
-DMYSQL_UNIX_ADDR=/usr/local/mysql/mysql.sock \
-DSYSCONFDIR=/etc \
-DSYSTEMD_PID_DIR=/usr/local/mysql \
-DDEFAULT_CHARSET=utf8  \
-DDEFAULT_COLLATION=utf8_general_ci \
-DWITH_EXTRA_CHARSETS=all \
-DWITH_INNOBASE_STORAGE_ENGINE=1 \
-DWITH_ARCHIVE_STORAGE_ENGINE=1 \
-DWITH_BLACKHOLE_STORAGE_ENGINE=1 \
-DWITH_PERFSCHEMA_STORAGE_ENGINE=1 \
-DMYSQL_DATADIR=/usr/local/mysql/data \
-DWITH_BOOST=boost \
-DWITH_SYSTEMD=1 && make -j 4 && make install
COPY my.cnf /etc/my.cnf
EXPOSE 3306
RUN chown -R mysql:mysql /usr/local/mysql && chown mysql:mysql /etc/my.cnf
WORKDIR /usr/local/mysql/bin/
RUN ./mysqld \
--initialize-insecure \
--user=mysql \
--basedir=/usr/local/mysql \
--datadir=/usr/local/mysql/data && cp /usr/local/mysql/usr/lib/systemd/system/mysqld.service /usr/lib/systemd/system/ && systemctl enable mysqld
ENV PATH=/usr/local/mysql/bin:/usr/local/mysql/lib:$PATH
VOLUME ["/usr/local/mysql"]
ENTRYPOINT ["/usr/sbin/init"]

vim my.cnf
[client]
port = 3306
socket=/usr/local/mysql/mysql.sock

[mysqld]
user = mysql
basedir=/usr/local/mysql
datadir=/usr/local/mysql/data
port = 3306
character-set-server=utf8
pid-file = /usr/local/mysql/mysqld.pid
socket=/usr/local/mysql/mysql.sock
bind-address = 0.0.0.0
skip-name-resolve
max_connections=2048
default-storage-engine=INNODB
max_allowed_packet=16M
server-id = 1
general_log=ON
general_log_file=/usr/local/mysql/data/mysql_general.log

sql_mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES,NO_AUTO_CREATE_USER,NO_AUTO_VALUE_ON_ZERO,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,PIPES_AS_CONCAT,ANSI_QUOTES
php文件
配置php
把源码包和源码文件拖到php目录下
vim Dockerfile
FROM centos:7
RUN yum -y install gd \
libjpeg libjpeg-devel \
libpng libpng-devel \
freetype freetype-devel \
libxml2 libxml2-devel \
zlib zlib-devel \
curl curl-devel \
openssl openssl-devel \
gcc gcc-c++ make pcre-devel && useradd -M -s /sbin/nologin nginx
ADD php-7.1.10.tar.bz2 /usr/local/src
WORKDIR /usr/local/src/php-7.1.10
RUN ./configure \
--prefix=/usr/local/php \
--with-mysql-sock=/usr/local/mysql/mysql.sock \
--with-mysqli \
--with-zlib \
--with-curl \
--with-gd \
--with-jpeg-dir \
--with-png-dir \
--with-freetype-dir \
--with-openssl \
--enable-fpm \
--enable-mbstring \
--enable-xml \
--enable-session \
--enable-ftp \
--enable-pdo \
--enable-tokenizer \
--enable-zip && make -j 4 && make install
ENV PATH /usr/local/php/bin:/usr/local/php/sbin:$PATH
COPY php.ini /usr/local/php/lib
COPY php-fpm.conf /usr/local/php/etc/
COPY www.conf /usr/local/php/etc/php-fpm.d/
EXPOSE 9000
ENTRYPOINT ["/usr/local/php/sbin/php-fpm","-F"]
yml文件
yml文件在lnmp目录下创建
vim 
version: '3'
services:
  nginx:
    hostname: nginx
    build:
      context: /opt/lnmp/nginx/
      dockerfile: Dockerfile
    ports:
      - 1314:80
    container_name: nginx_server
    networks:
      lnmp:
        ipv4_address: 172.111.0.10
    volumes:
          #声明挂载目录
      - "nginx-data:/usr/local/nginx/html"
  mysql:
     hostname: mysql
     build:
       context: /opt/lnmp/mysql/
       dockerfile: Dockerfile
     ports:
       - 3306:3306
     container_name: mysql_server
     networks:
       lnmp:
         ipv4_address: 172.111.0.20
     privileged: true
     #索然我们登录容器,显示的是root用户,伪管理员,一旦privileged: true,容器内的root用户和宿主机的root用户,拥有一样的权限,在生产中能不给就不给
     volumes:
      - "mysql-data:/usr/local/mysql/"
  php:
    hostname: php
    build:
      context: /opt/lnmp/php
      dockerfile: Dockerfile
    ports:
      - 9000:9000
    container_name: php_server
    networks:
      lnmp:
        ipv4_address: 172.111.0.30
    volumes:
      - "nginx-data:/usr/local/nginx/html"
      - "mysql-data:/usr/local/mysql"
networks:
  lnmp:
    driver: bridge
    ipam:
      config:
        - subnet: 172.111.0.0/16
volumes:
  nginx-data:
  mysql-data:
  
docker-compose -f docker-compose.yml up -d
查看镜像
[root@docker2 compose-nginx]# docker images
REPOSITORY            TAG       IMAGE ID       CREATED          SIZE
compose-nginx-nginx   latest    6862f228cb29   15 minutes ago   557MB
lnmp-mysql            latest    77a863e4d607   37 minutes ago   10.1GB
lnmp-php              latest    777e020fb38a   39 minutes ago   1.37GB
lnmp-nginx            latest    e82d70afe57e   47 minutes ago   702MB
centos                7         eeb6ee3f44bd   2 years ago      204MB
查看容器
[root@docker2 compose-nginx]# docker ps -a
CONTAINER ID   IMAGE                 COMMAND                  CREATED          STATUS          PORTS                                       NAMES
f526cb362100   compose-nginx-nginx   "/usr/local/nginx/sb…"   16 minutes ago   Up 16 minutes   0.0.0.0:1213->80/tcp, :::1213->80/tcp       web1
141ef4a1f02d   lnmp-nginx            "/usr/local/nginx/sb…"   37 minutes ago   Up 37 minutes   0.0.0.0:1314->80/tcp, :::1314->80/tcp       nginx_server
9b26ed6b2b3e   lnmp-php              "/usr/local/php/sbin…"   37 minutes ago   Up 37 minutes   0.0.0.0:9000->9000/tcp, :::9000->9000/tcp   php_server
12c7a3e7295c   lnmp-mysql            "/usr/sbin/init"         37 minutes ago   Up 37 minutes   0.0.0.0:3306->3306/tcp, :::3306->3306/tcp   mysql_server
配置mysql容器
mysql -uroot -p
create database wordpress;
grant all privileges on wordpress.* to 'wordpress'@'%' identified by '123456';
grant all privileges on *.* to 'root'@'%' identified by '123456';
flush privileges;

页面访问

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1306987.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Python 递归及目录遍历

递归调用:一个函数,调用了自身,称为递归调用 递归函数:一个会调用自身的函数 凡是循环能做的事,递归都能做。 目录 递归示例 普通方法实现 递归方式实现 计算分析: 递归遍历目录 引入os 遍历目录 执…

安防视频/可视化监控云平台EasyCVR对接大华卡口摄像头告警的操作步骤

旭帆科技的国标GB28181视频融合平台EasCVR不仅具备传统的视频监控功能,还配备了智能分析算法,近期有用户需要在现场的摄像头配备AI识别的功能,如烟火、人脸识别、车牌识别等功能。 最新版的EasyCVR(V.3.4)目前可对接大…

DBA轻松应对慢查询挑战,使用NineData这款工具就够了!

对于一个 DBA 来说,从公司数据库系统的稳定程度可以看出他的能力几何,一个优秀的 DBA 不仅要保证数据库的稳定运行,还需要有能力有效处理数据库的各种突发性能问题,而最常见的性能问题,就是慢查询。 我们公司规模比较…

Linux基础项目开发2:物联网监控——MJP-streamer方案实现(二)

前言: MJPG-Streamer代码简单,并且对CPU的要求比较低,一般的处理器都能运行,我们可以通过它,大体了解一下视频监控的知识。 一、MJP-streamer 编译安装MJP-streamer 使用Buildroot编译 在100ASK_IMX6ULL上安装、运行 使…

通讯系列电路芯片选型分析

适用于电话机上的电路芯片D34018 工作电压范围6V~11V 采用SOP28封装形式 D34118 工作电压范围3.5V~6.5V 采用SOP28封装形式 压缩扩展器电路芯片D31101 D5015 D5020 窄带中频放大器电路D3361 D3380 D31136 收发器电路芯片 D232 低功耗3-5.5V供电RS-2…

-bash: docker-compose: 未找到命令

-bash: docker-compose: 未找到命令 我在使用Docker搭建Nacos容器时遇到了这个问题:是没有安装 docker-compose工具 。 docker-compose的用处主要体现在以下几个方面: 快速搭建开发环境:使用docker-compose可以快速搭建起开发环境&#xff0…

全球十大骨传导耳机排名,骨传导耳机排行榜品牌推荐

随着科技的进步,人们对音乐和通话的需求越来越高,而骨传导耳机作为一种新兴的耳机类型,逐渐受到人们的关注。它通过人的头骨将声音直接传递到内耳,不经过耳道,因此不会阻碍外界声音的进入,同时也能更好地保…

pytorch强化学习(1)——DQNSARSA

实验环境 python3.10 torch2.1.1 gym0.26.2 gym[classic_control] matplotlib3.8.0 numpy1.26.2DQN代码 首先是module.py代码,在这里定义了网络模型和DQN模型 import torch import torch.nn as nn import numpy as npclass Net(nn.Module):# 构造只有一个隐含层的…

【Python】计算最少排班人数(1)

需求背景: 某工作24小时需要人员,单个班次为8或9小时,需要根据每小时需要的人数、不同的班次计算最低需要的人数。 每小时需要的人数举例: 班次类型: 问题分析: 1、需要各个时段的人员数大于等于需要的人…

CV中的Attention机制:SENet

paper: Squeeze-and-Excitation Networks paper link:https://arxiv.org/pdf/1709.01507.pdf repo link:GitHub - hujie-frank/SENet: Squeeze-and-Excitation Networks 摘要: 卷积神经网络(CNNs)的核心构建块是卷积算子,它使…

微信小程序map视野发生改变时切换定位点

<!--地图--> <view><map id"myMap" style"width: 100%; height: 300px;" latitude"{{latitude}}" longitude"{{longitude}}"scale"{{scale}}" markers"{{markers}}" controls"{{controls}}&q…

OpenCV-Python:图像平滑操作

目录 图像平滑基础 本文目标 2D卷积 图像模糊&#xff08;图像平滑&#xff09; 平均模糊 高斯模糊 中值模糊 双边滤波 图像平滑基础 在尽量保留图像原有信息的情况下&#xff0c;过滤掉图像内部的噪声&#xff0c;这一过程称为对图像的平滑处理&#xff0c;所得的图像…

排序算法之三:希尔排序

希尔排序基本思想 希尔排序法又称缩小增量法 希尔排序法的基本思想是&#xff1a;先选定一个整数&#xff0c;把待排序文件中所有记录分成个组&#xff0c;所有距离为的记录分在同一组内&#xff0c;并对每一组内的记录进行排序。然后&#xff0c;取&#xff0c;重复上述分组…

ThingsBoard 前端项目轮播图部件开发

前言 ThingsBoard 是目前 Github 上最流行的开源物联网平台&#xff08;14.6k Star&#xff09;&#xff0c;可以实现物联网项目的快速开发、管理和扩展, 是中小微企业物联网平台的不二之选。 本文介绍如何在 ThingsBoard 前端项目中开发轮播图部件。 产品需求 最近接到产品…

C++并查集

1.并查集概念 1.1.并查集定义 在一些应用问题中&#xff0c;需要&#xff1a; 将 n 个不同的元素划分成一些不相交的集合开始时&#xff0c;每个元素自成成为一个集合然后按一定的规律&#xff0c;将归于同一组元素的集合合并期间需要反复用到查询某个元素归属于那个集合的算…

python利用requests库进行接口测试的方法详解

前言 之前介绍了接口测试中需要关注得测试点&#xff0c;现在我们来看看如何进行接口测试&#xff0c;现在接口测试工具有很多种&#xff0c;例如&#xff1a;postman,soapui,jemter等等&#xff0c;对于简单接口而言&#xff0c;或者我们只想调试一下&#xff0c;使用工具是非…

迈入数据结构殿堂——时间复杂度和空间复杂度

目录 一&#xff0c;算法效率 1.如何衡量一个算法的好坏&#xff1f; 2.算法效率 二&#xff0c;时间复杂度 1.时间复杂度的概念 2.大O的渐进表示法 3.推导大O的渐进表示法 4.常见时间复杂度举例 三&#xff0c;空间复杂度 一&#xff0c;算法效率 数据结构和算法是密…

【产品】Axure的基本使用(二)

文章目录 一、元件基本介绍1.1 概述1.2 元件操作1.3 热区的使用 二、表单型元件的使用2.1 文本框2.2 文本域2.3 下拉列表2.4 列表框2.5 单选按钮2.6 复选框2.7 菜单与表格元件的使用 三、实例3.1 登录2.2 个人简历 一、元件基本介绍 1.1 概述 在Axure RP中&#xff0c;元件是…

如何使用透明显示屏

透明显示屏的使用主要取决于具体的应用场景和需求。以下是一些常见的使用透明显示屏的方法&#xff1a; 商业展示&#xff1a;透明显示屏可以作为商品展示柜&#xff0c;通过高透明度、高分辨率的屏幕展示商品细节&#xff0c;吸引顾客的注意力。同时&#xff0c;透明显示屏还可…