Dockerfile compose 部署lmnp

青春须早为,岂能长少年。这篇文章主要讲述Dockerfile compose 部署lmnp相关的知识,希望能为你提供帮助。
Dockerfile compose 介绍 定义
我们知道使用一个Dockerfile模板文件可以定义一个单独的应用容器,如果需要定义多个容器就需要服务编排。服务编排有很多种技术方案,今天给大家介绍Docker 官方产品Docker Compose
Dockerfile可以让用户管理一个单独的应用容器; 而Compose则 允许用户在一个模板(YAML格式) 中定义一组相关联的应用容器( 被称为一个project,即项目),例如一一个Web服务容器再加.上后端的数据库服务容器等。
Docker-compose简介
Docker-Compose项目是Docker官方的开源项目,负责实现对Docker容器集群的快速编排。
Docker-Compose将所管理的容器分为三层,分别是工程(project) ,服务(service) 以及容器(container) 。Docker-Compose运行 目录下的所有文件(docker-compose. yml、extends文件或环境变量文件等)组成-一个工程,若无特殊指定工程名即为当前目录名。一个工程当中可包含多个服务,每个服务中定义了容器运行的镜像、参数、依赖。一个服务当中可包括多个容器实例,Docker-Compose并没有解决负载均衡的问题,因此需要借助其它工具实现服务发现及负载均衡,比如Consul.
Docker- Compose的工程配置文件默认为docker- compose. yml,可通过环境变量COMPOSE_ FILE或-f参数自定义配置文件,其定义了多个有依赖关系的服务及每个服务运行的容器。
使用一个Dockerfile模板文件,可以让用户很方便的定义一个单独的应用容器。在工作中,经常会碰到需要多个容器相互配合来完成某项任务的情况。例如要实现一个Web项目,除了Web服务容器本身,往往还需要再加上后端的数据库服务容器,甚至还包括负载均衡容器等。
Compose允许用户通过一个 单独的docker-compose.yml模板文件(YAML格式)来定义一组相关联的应用容器为一个项目(project) 。
Docker-Compose项目由python编写,调用Docker服 务提供的API来对容器进行管理。因此,只要所操作的平台支持Docker API,就可以在其上利用Compose来进行编排管理。
Docker Compose配置常用字段

字段描述 build指定Dockerfile 文件名,要指定Dockerfile文件需要在build标签的子级标签中使用dockerfile标签指定 dockerfile构建镜像.上下文路径 context可以是dockerfile 的路径,或者是指向git 仓库的url地址 image指定镜像 command执行命令,覆盖容器启动后默认执行的命令 container_name指定容器名称,由于容器名称是唯一的,如果指定自定义名称,则无法scale deploy指定部署和运行服务相关配置,只能在Swarm模式使用 environment添加环境变量 networks加入网络,引用顶级networks下条目 ports暴露容器端口,与-p相同,但端口不能低于60 volumes挂载一一个宿主机目录或命令卷到容器,命名卷要在顶级volumes定义卷名称 volumes_ f rom从另一个服务或容器挂载卷,可选参数:ro 和:rw, 仅版本2 支持 hostname容器主机名 sysctls在容器内设置内核参数 links连接到另外-一个容器,-服务名称[:服务别名] privileged用来给容器root权限,注意是不安全的restart #重启策略,默认no,always, no- failure, unless-stopedno,默认策略,在容器退出时不重启容器。on-failure,在容器非正常退出时(退出状态非0),才会重启容器。on-failure:3,在容器非正常退出时重启容器,最多重启3次。always,在容器退出时总是重启容器。unless-stopped,在容器退出时总是重启容器,但是不考虑在Docker守护进程启动时就已经停止了的容器。depends_on #在使用Compose时,最大的好处就是少打启动命令,但一般项目容器启动的顺序是有要求的,如果直接从上到下启动容器,可能会因为容器依赖问题而启动失败。例如在没启动数据库容器的时候启动应用容器,应用容器会因为找不到数据库而退出。depends_on标签用于解决容器的依赖、启动先后的问题。 (举例:php依赖于apache和mysql,只有都启动了,php才会启动哦!) php: depends_on: - apache - mysql

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

实验 使用docker-compose 安装LNMP本机ip192.168.206.3
【Dockerfile compose 部署lmnp】```html/xml
首先是安装compose(我预先下载好了包)
cd /usr/local
#拖入docker-compose
chmod +x docker-compose
mv docker-compose /usr/bin
```html/xml #下面去opt下创建工作目录 cd /opt mkdir compose cd compose#下面是vim docker-compose.yml(我的工作目录就是当前/opt/compose_nginx目录,所有东西放在一个地方就行,或者修改配置文件的context即可.此外我不建议更改IP,不然配置文件也要修改!) ........................................... version: 2 services: nginx: hostname: nginx build: context: ./nginx dockerfile: Dockerfile container_name: nginx ports: - 1111:80 - 2222:443 volumes: - ./nginx/html/:/usr/local/nginx/html networks: lnmp: ipv4_address: 172.18.0.10 mysql: hostname: mysql build: context: ./mysql dockerfile: Dockerfile container_name: mysql networks: lnmp: ipv4_address: 172.18.0.20 ports: - 3306:3306 php: hostname: php build: context: ./php dockerfile: Dockerfile container_name: php networks: lnmp: ipv4_address: 172.18.0.30 ports: - 9000:9000 volumes_from: - nginx - mysql networks: lnmp: driver: bridge ipam: config: - subnet: 172.18.0.0/16 ......................................#下面创建 mysql nginx php mkdir mysql nginx php 然后往这几个目录里丢相应的包 以及相应的dockerfile文件(昨天的博客;上一篇就有相关详解)cd /opt/compose_nginx docker-compose -f docker-compose.yml up -d ![0.png](https://s2.51cto.com/images/20220310/1646926434875477.png?x-oss-process=image/watermark,size_14,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_20,type_ZmFuZ3poZW5naGVpdGk=)

compose文件
Dockerfile compose 部署lmnp

文章图片

Dockerfile compose 部署lmnp

文章图片

Dockerfile compose 部署lmnp

文章图片

Dockerfile compose 部署lmnp

文章图片

传文件给nginx、mysql、php
Dockerfile compose 部署lmnp

文章图片

Dockerfile compose 部署lmnp

文章图片

Dockerfile compose 部署lmnp

文章图片

Dockerfile compose 部署lmnp

文章图片

Dockerfile compose 部署lmnp

文章图片

开始创建
Dockerfile compose 部署lmnp

文章图片

创建成功
Dockerfile compose 部署lmnp

文章图片

查看端口号
Dockerfile compose 部署lmnp

文章图片

现在去进入mysql 授权会有问题解决办法如下
关闭运行的镜像,然后去镜像库再启用
Dockerfile compose 部署lmnp

文章图片

Dockerfile compose 部署lmnp

文章图片

特别注意!
++使用root 权限再次运行mysql时候,一定要用-p,然后指定关口号!
指定关口号是根据你的docker-compose 里面mysql的ports来指定!!!!!++
```html/xml
最后是进入mysql 授权
docker exec -it mysql /bin/bash
mysql
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://192.168.206.3:1111/wordpress/index.php
![5.png](https://s2.51cto.com/images/20220310/1646926519484461.png?x-oss-process=image/watermark,size_14,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_20,type_ZmFuZ3poZW5naGVpdGk=)![5.1.png](https://s2.51cto.com/images/20220310/1646926521115337.png?x-oss-process=image/watermark,size_14,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_20,type_ZmFuZ3poZW5naGVpdGk=)## 实验附属资料 ps:默认1核心编译 ```html/xml mysql木目录下的dockerfileFROM centos:7 MAINTAINER this is mysql image < zjh 2022-03-10> RUN yum -y install gcc gcc-c++ ncurses ncurses-devel bison cmake make RUN 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_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& & make install RUN chown -R mysql:mysql /usr/local/mysql/ ADD my.cnf /etc/my.cnf RUN chown mysql:mysql /etc/my.cnf ENV PATH=/usr/local/mysql/bin:/usr/local/mysql/lib:$PATH WORKDIR /usr/local/mysql/ RUN bin/mysqld \\ --initialize-insecure \\ --user=mysql \\ --basedir=/usr/local/mysql \\ --datadir=/usr/local/mysql/data RUN cp /usr/local/mysql/usr/lib/systemd/system/mysqld.service /usr/lib/systemd/system/ EXPOSE 3306 RUN systemctl enable mysqld VOLUME [ "/usr/local/mysql" ] CMD /usr/sbin/init

```html/xml
php目录下的
FROM centos:7
MAINTAINER this is php image < zjh>
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
RUN 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 & & make install
ENV PATH /usr/local/php/bin:/usr/local/php/sbin:$PATH
ADD php.ini /usr/local/php/lib/
ADD php-fpm.conf /usr/local/php/etc/
ADD www.conf /usr/local/php/etc/php-fpm.d/
EXPOSE 9000
CMD /usr/local/php/sbin/php-fpm -F
```html/xml nginx目录下的FROM centos:7 MAINTAINER this is nginx image < zjh> RUN yum -y install pcre-devel zlib-devel gcc gcc-c++ make RUN useradd -M -s /sbin/nologin nginx ADD nginx-1.12.0.tar.gz /usr/local/src/ WORKDIR /usr/local/src/nginx-1.12.0 RUN ./configure \\ --prefix=/usr/local/nginx \\ --user=nginx \\ --group=nginx \\ --with-http_stub_status_module & & make & & make install ENV PATH /usr/local/nginx/sbin:$PATH ADD nginx.conf /usr/local/nginx/conf/ ADD wordpress-4.9.4-zh_CN.tar.gz /usr/local/nginx/html/ RUN chmod 777 -R /usr/local/nginx/html/ EXPOSE 80 EXPOSE 443 CMD nginx -g "daemon off; "

```html/xml
#docker-compose.yml文件,我不建议你们改ip,改了记得其他地方也得改动
version: 2
services:
nginx:
hostname: nginx
build:
context: ./nginx
dockerfile: Dockerfile
container_name: nginx
ports:
  • 1111:80
  • 2222:443
    volumes:
  • ./nginx/html/:/usr/local/nginx/html
    networks:
    lnmp:
    ipv4_address: 172.18.0.10
    mysql:
    hostname: mysql
    build:
    context: ./mysql
    dockerfile: Dockerfile
    container_name: mysql
    networks:
    lnmp:
    ipv4_address: 172.18.0.20
    ports:
  • 3306:3306
    php:
    hostname: php
    build:
    context: ./php
    dockerfile: Dockerfile
    container_name: php
    networks:
    lnmp:
    ipv4_address: 172.18.0.30
    ports:
  • 9000:9000
    volumes_from:
  • nginx
  • mysql
    networks:
    lnmp:
    driver: bridge
    ipam:
    config:
    • subnet: 172.18.0.0/16


    推荐阅读