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"]
##使用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 .
如何缩小镜像体积大小?
尽可能的使用小体积的基础镜像
尽可能检查Dockerfile文件中指令的数量
可以构建镜像步骤最后添加清空系统和应用程序的缓存命令
使用多阶段(多级)构建
FROM 第一阶段的基础镜像 [AS 别名]
…
FROM 第二阶段的基础镜像
COPY --from=别名/0 第一阶段构建的文件/目录 当前阶段的文件/目录
##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
##创建工作目录
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工作目录
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;
#刷新数据库
##创建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