Skip to content

dockerfile构建镜像

使用dockerfile构建镜像,docker容器里的服务一定是要以非守护进程的方式启动,如果以守护进程的方式启动,启动完容器会自动关闭

构建镜像命令:

docker build -t 镜像名称 .

一、构建java网站镜像

dockerfile文件

FROM centos:7
ADD jdk-8u211-linux-x64.tar.gz /usr/local
RUN mv /usr/local/jdk1.8.0_211 /usr/local/jdk
ENV JAVA_HOME=/usr/local/jdk
ENV JRE_HOME=$JAVA_HOME/jre
ENV CLASSPATH=$JAVA_HOME/lib:$JRE_HOME/lib:$CLASSPATH
ENV PATH=$JAVA_HOME/bin:$JRE_HOME/bin:$PATH
ADD apache-tomcat-8.5.35.tar.gz /usr/local
RUN mv /usr/local/apache-tomcat-8.5.35 /usr/local/tomcat
EXPOSE 8080
#不使用startup.sh是因为它是守护进程的方式启动,catalina.sh为非守护进程
ENTRYPOINT ["/usr/local/tomcat/bin/catalina.sh","run"]

启动命令 挂载路径,将/root/test/ROOT挂载到tomcat的目录,即将包放到这个目录会自行加载

docker run -itd -p 80:8080 -v /root/test/ROOT:/usr/local/tomcat/webapps/ROOT
mycentos:jdk /bin/bash

二、构建nginx镜像

dockerfile文件

FROM centos:7
ADD nginx-1.16.0.tar.gz /usr/local
COPY nginx_install.sh /usr/local
RUN sh /usr/local/nginx_install.sh
#暴露端口
EXPOSE 80

nginx环境编译脚本,cat >nginx_install.sh

#!/bin/bash
yum install -y gcc gcc-c++ make pcre pcre-devel zlib zlib-devel
cd /usr/local/nginx-1.16.0
./configure --prefix=/usr/local/nginx && make && make install

启动命令:将nginx守护进程关闭

docker run -itd -p 80:80 mycentos:nginx /usr/local/nginx/sbin/nginx -g "daemon off;"

三、构建redis镜像

dockerfile文件

FROM centos:7
ADD redis-4.0.9.tar.gz /home
COPY redis_install.sh /home
RUN sh /home/redis_install.sh
ENTRYPOINT /usr/local/redis/bin/redis-server /usr/local/redis/conf/redis.conf

redis环境编译脚本,cat >redis_install.sh

#!/bin/bash
yum install -y gcc gcc-c++ make openssl openssl-devel
cd /home/redis-4.0.9
make && make PREFIX=/usr/local/redis install
mkdir -p /usr/local/redis/conf/
cp /home/redis-4.0.9/redis.conf /usr/local/redis/conf/
sed -i '69s/127.0.0.1/0.0.0.0/' /usr/local/redis/conf/redis.conf
sed -i '88s/protected-mode yes/protected-mode no/' /usr/local/redis/conf/redis.conf

启动命令:

docker run -itd -p 6379:6379 mycentos:redis

四、构建自定义mysql镜像

编写docketfile文件

FROM mysql:5.7
WORKDIR /docker-entrypoint-initdb.d
#设置容器的字符集
ENV LANG=C.UTF-8
#这里添加脚本到工作空间上,会自动执行sql脚本
ADD init.sql .

初始化数据库的脚本:cat >init.sql

-- 建库
create database `db_student`;
SET character_set_client = utf8;
use db_student;
-- 建表
drop table if exists `user`;
CREATE TABLE user (
id tinyint(5) zerofill auto_increment not null comment '学生学号',
name varchar(20) default null comment '学生姓名',
age tinyint default null comment '学生年龄',
class varchar(20) default null comment '学生班级',
sex char(5) not null comment '学生性别',
unique key (id)
)engine=innodb charset=utf8;
-- 插入数据
insert into user values('1','小明','15','初三','男');
insert into user values('2','小红','13','初二','女');
insert into user values('3','小东','14','初一','男');
insert into user values('4','小西','12','初二','男');

启动命令:

docker run -itd -p 3306:3306 mysql5.7:v1