6.Dockerfile实验

文章目录

  • Dockerfile实验
    • 部署Tomcat
    • 优化Tomcat镜像
    • 部署LNMP
      • 依赖包镜像
      • nginx镜像
      • mysql镜像
      • PHP 镜像

Dockerfile实验

部署Tomcat

cd /opt/

mkdir tomcat

cd tomcat/

##准备需要的安装包到目录中
##创建Dockerfile文件,与压缩包在同一目录中
##准备配置文件到同一目录中
vim Dockerfile


FROM centos:7
MAINTAINER this is tomcat image 

ADD jdk-8u361-linux-x64.tar.gz /usr/local/
ENV JAVA_HOME /usr/local/jdk1.8.0_361
ENV CLASSPATH .:$JAVA_HOME/lib:$JAVA_HOME/jre/lib
ENV PATH $JAVA_HOME/bin:$JAVA_HOME/jre/bin:$PATH


ADD apache-tomcat-9.0.16.tar.gz /usr/local/
EXPOSE 8080
CMD ["/usr/local/apache-tomcat-9.0.16/bin/catalina.sh", "run"]

优化Tomcat镜像

##使用jdk镜像文件,减少基础镜像的大小

docker pull openjdk:8-jdk-alpine
##使用比较小的基础镜像

vim Dockerfile

FROM openjdk:8-jdk-alpine

ARG Tomcat_DIR
ADD $Tomcat_DIR /usr/local/
EXPOSE 8080
CMD $(ls -d /usr/local/apache*)/bin/catalina.sh run
##用参数创建镜像

docker build --build-arg Tomcat_DIR=apache-tomcat-9.0.16.tar.gz -t tomcat:v1 .
  • 如何缩小镜像体积大小?

    1. 尽可能的使用小体积的基础镜像

    2. 尽可能检查Dockerfile文件中指令的数量

    3. 可以构建镜像步骤最后添加清空系统和应用程序的缓存命令

    4. 使用多阶段(多级)构建

      ​ FROM 第一阶段的基础镜像 [AS 别名]

      ​ …
      ​ FROM 第二阶段的基础镜像
      ​ COPY --from=别名/0 第一阶段构建的文件/目录 当前阶段的文件/目录

部署LNMP

依赖包镜像

##nginx依赖包
RUN yum -y install pcre-devel zlib-devel openssl-devel gcc gcc-c++ make

##mysql依赖包
RUN yum -y install gcc gcc-c++ ncurses ncurses-devel bison cmake


##php依赖包
RUN yum -y install gd \
libjpeg-devel \
libpng-devel \
freetype-devel \
libxml2-devel \
zlib-devel \
curl-devel \
openssl-devel



##创建Dockerfile文件

vim Dockerfile


FROM centos:7-
MAINTAINER this is LNMP Depend package image 
RUN yum -y install pcre-devel zlib-devel openssl-devel gcc gcc-c++ make \
ncurses ncurses-devel bison cmake \
gd \
libjpeg-devel \
libpng-devel \
freetype-devel \
libxml2-devel \
zlib-devel \
curl-devel \
openssl-devel


##创建依赖包镜像
docker build -t depend:ggl .
##自定义网络

docker network create --subnet=172.18.0.0/16 --opt "com.docker.network.bridge.name"="docker1" mylnmp 

nginx镜像

##创建工作目录

cd /opt/
mkdir -p lnmp/nginx

cd /opt/lnmp/nginx

##在这个目录中准备编译安装nginx的软件包


##nginx安装包和论坛包

nginx-1.24.0.tar.gz  
wordpress-4.9.4-zh_CN.tar.gz
nginx.conf
###nginx配置文件修改的内容


 location / {
            root   html;
            index  index.php index.html index.htm;
        }

###上面的内容添加   index.php内容


location ~ \.php$ {
            root           html;
            fastcgi_pass   172.18.0.30:9000;
            fastcgi_index  index.php;
            fastcgi_param  SCRIPT_FILENAME          /usr/local/nginx/html$fastcgi_script_name;
            include        fastcgi_params;
        }


##上面内容取消注释,并定义监听的地址为PHP的IP地址
##在目录中创建Dockerfile文件

vim Dockerfile


#第一部分编译安装文件
FROM depend:ggl AS first

MAINTAINER this is nginx image 

#上传并解压nginx压缩包
ADD nginx-1.24.0.tar.gz /usr/local

#创建nginx用户并编译安装
RUN useradd -M -s /sbin/nologin nginx && \
cd /usr/local/nginx-1.24.0 && \
./configure \
--prefix=/usr/local/nginx \
--user=nginx \
--group=nginx \
--with-http_stub_status_module && \
make && \
make install && \
yum clean all

#上传配置文件到容器中
COPY nginx.conf /usr/local/nginx/conf/nginx.conf


#第二部分,多级构建
FROM centos:7
COPY --from=first /usr/local/nginx/ /usr/local/nginx/
RUN useradd -M -s /sbin/nologin nginx
EXPOSE 80

#定义默认启动命令
CMD ["/usr/local/nginx/sbin/nginx", "-g", "daemon off;"]
##创建nginx镜像

docker build -t nginx:centos7 .
##在本地创建首页显示文件,挂载到容器中的数据卷中

mkdir html

echo "

test 01 web page

" > index.html
##创建容器

docker run -d --name=nginx -p 80:80 --net mylnmp --ip 172.18.0.10 -v /opt/lnmp/nginx/html:/usr/local/nginx/html nginx:centos7
##解压论坛文件并复制到nginx的页面目录中,为最后的论坛的创建做准备

tar xf wordpress-4.9.4-zh_CN.tar.gz -C /opt/lnmp/nginx/html/

mysql镜像

##创建mysql工作目录

mkdir /opt/lnmp/mysql

cd /opt/lnmp/mysql/


##准备需要的文件
mysql-boost-5.7.20.tar.gz
my.cnf
##准备mysql配置文件

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

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
##创建Dockerfile文件

vim Dockerfile


FROM depend:ggl
MAINTAINER this is mysql image 


#编译安装
ADD mysql-boost-5.7.20.tar.gz /opt/
RUN cd /opt/mysql-5.7.20/ && \
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 -j2 && make install



FROM centos:7
COPY --from=0 /usr/local/mysql/ /usr/local/mysql/
#复制配置文件
COPY my.cnf /etc/my.cnf
ENV PATH=/usr/local/mysql/bin:/usr/local/mysql/lib:$PATH

#修改属主属组和初始化数据库
RUN useradd -M -s /sbin/nologin  mysql && \
chown -R mysql:mysql /usr/local/mysql/ && \
chown mysql:mysql /etc/my.cnf && \
/usr/local/mysql/bin/mysqld \
--initialize-insecure \
--user=mysql \
--basedir=/usr/local/mysql \
--datadir=/usr/local/mysql/data

#暴露端口
EXPOSE 3306

#默认启动命令
CMD ["/usr/local/mysql/bin/mysqld"]
##创建mysql镜像

docker build -t mysql:centos7 .
##创建mysql容器

docker run -d --privileged --name mysql -p 3306:3306 --net mylnmp --ip 172.18.0.20 -v /usr/local/mysql mysql:centos7
##进入到容器中

docker exec -it mysql bash

##修改mysql 的登录密码

mysqladmin -u root -p password "123"


mysql -uroot -p123

create database word;
#创建一个数据库

grant all ON word.* to 'admin'@'%' identified by 'admin123';

#把数据库里面所有表的权限授予给admin,并设置密码admin123

flush privileges;
#刷新数据库

PHP 镜像

##创建mysql工作目录

mkdir /opt/lnmp/php

cd /opt/lnmp/php/


##准备需要的文件
php-7.1.10.tar.bz2  
php-fpm.conf        ##进程服务配置文件
php.ini             ##主配置文件
www.conf            ##扩展配置文件
##创建Dockerfile文件

vim Dockerfile


FROM depend:ggl
MAINTAINER this is php image 

ADD php-7.1.10.tar.bz2 /opt
RUN cd /opt/php-7.1.10 && \
./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 -j2 && \
make install

COPY php.ini /usr/local/php/lib/php.ini
COPY php-fpm.conf /usr/local/php/etc/php-fpm.conf
COPY www.conf /usr/local/php/etc/php-fpm.d/www.conf


FROM centos:7
COPY --from=0 /usr/local/php /usr/local/php
RUN useradd -M -s /sbin/nologin php && \
yum -y install gd \
libjpeg-devel \
libpng-devel \
freetype-devel \
libxml2-devel \
zlib-devel \
curl-devel \
openssl-devel

EXPOSE 9000

CMD ["/usr/local/php/sbin/php-fpm", "-F"]
##主配置文件修改

vim php.ini

--1170行--修改
##添加myswql的socket文件位置
mysqli.default_socket = /usr/local/mysql/mysql.sock

--939行--取消注释,修改
date.timezone = Asia/Shanghai
##进程配置文件

vim php-fpm.conf

--17行--去掉";"注释
pid = run/php-fpm.pid
##调整扩展配置文件

vim www.conf

##23行和24行##
user = php
group = php

##36行##
listen = 172.18.0.30:9000

##62行##
listen.allowed_clients = 172.18.0.10
###创建php镜像

docker build -t php:centos7 .
###创建php容器

docker run -d --name php --net mylnmp --ip 172.18.0.30 -p 9000:9000 --volumes-from nginx --volumes-from mysql php:centos7

你可能感兴趣的:(11.Docker,docker)