YAML文件是一种标记语言,以竖列的形式展示序列化的数据格式。可读性很高类似于json格式。语法简单。
YAML通过缩进来表示数据结构,连续的项目用-符号来表示。
1、 大小写敏感
2、 通过缩进表示层级关系
3、 只能使用空格缩进不能使用tab键
4、 可以使用井号键进行注释
5、 符号字符都有一个空格 如test:
6、 单引号起来的字符,会被当作普通字符串处理。"#&" 双引号里面如果是特殊字符,就表示本意
'$':表示普通字符串
"$":表示就是$
name: zyg
age: 20
tall: yes
handsan: yes
wan: true
表示有序的元素集合
class:
- zyg
- hmbb
- shandi
声明一个键值用键值对表示
声明一个大的值
Xiebaowang:
Name:zyg
Age:20
Xiebaowang1:
Name:hmbb
Age:18
#
表示这一行不会被运行
Xiebaowang:&id1
Name:zyg
Age:20
Xiebaowang1:*id1
用&来定义锚点,用*来进行引用
Name: 'zyg'
Name: "zyg"
Name: '$'
#表示字符串,打印出来是¥
Name: "$"
#就表示$的本意
Docker-compose的核心就是yml文件,可以定义容器的一切,通过yml配置直接运行容器
Docker-compose既可以基于Dockerfile,也可以基于镜像,一键式拉起镜像和容器
docker主要服务于单节点,没有统一对外提供服务的端口和配置。docker一般是内网访问,无需使用https。
如果要对外以集群和分布式的方式提供访问的端口k8s+ingress
运行docker-compose只能在有docker.yml配置文件的目录内执行
build
#构建服务
ps
#列出由docker-compose编排出来的容器
up
#创建和启动容器
top
#显示容器的进程
logs
#查看容器的输出日志
down
#删除容器、网络、数据卷
exec
#在容器中执行命令
stop/start/restart
#停止、启动、重启
scale
#指定启动的容器数量(副本)
mkdir lnmp
cd lnmp
mkdir nginx mysql php
vim /opt/lnmp/nginx/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;"]
vim /opt/lnmp/mysql/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 /opt/lnmp/php/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"]
vim docker-compose
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
#给数据库权限。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
创建完成!
wordpress页面操作同上一篇文章:
https://blog.csdn.net/m0_75209491/article/details/134919206?spm=1001.2014.3001.5501
docker-compose是单机容器编排工具,可以实现一键式的拉取镜像和创建容器
Yml文件的格式:
version: '3'
#声明解释器。声明代码的版本
services:
#声明服务。可以有多个services
networks:
#写在服务配置,声明容器的IP地址
#写在大框架里面,创建网段
volumes:
#声明挂载卷
volumes:
nginx nginx-data:/usr/local/nginx
volumes:
nginx-data:
mysql-data:
docker-compose的核心就是yml文件,就是把docker run的命令写成代码。