Docker镜像构建——Dockerfile(实例)

一、Dockerfile生成apache镜像文件

1.vim Dockerfile  (Dockerfile名字不可更改)
   #新镜像基于的基础镜像(基础镜像未下载会先下载)
   FROM centos:7
   #维护镜像的用户信息
   MAINTAINER This is chen
   #镜像操作指令安装apache软件
   RUN yum -y update
   RUN yum -y install httpd
   #开启80端口
   EXPOSE 80
   #复制网址首页文件
   ADD index.html /var/www/html/index.html
   #将执行脚本复制到镜像中
   ADD run.sh /run.sh
   RUN chmod 755 /run.sh
   #启动容器时执行脚本
   CMD ["/run.sh"]

2.vim run.sh    #和Dockerfile文件位于相同目录下
   #!/bin/bash
   rm -rf /run/httpd/*     #删除进程文件
   exec /usr/sbin/apachectl -D FOREGROUND  #启动apache

3.编辑网页首页文件
  vim index.html
  this is web!

4.生成镜像
  docker build -t  httpd:test .           ##别忘了末尾有“ .”很重要

5.新镜像运行容器
  docker run -d -p 80.80 httpd:test        ##-p:映射宿主机指定端口,-P映射宿主机随机端口

6.测试容器是否运行
  http://localhost:映射端口

二、Dockerfile生成nginx镜像文件

1.编辑Dockerfile文件
[]vim Dockerfile
FROM centos:7
MAINTAINER this is nginx image 
RUN yum -y update
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
WORKDIR 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
EXPOSE 80
EXPOSE 443
RUN echo "daemon off;">>/usr/local/nginx/conf/nginx.conf
ADD run.sh /run.sh
RUN chmod 755 /run.sh
CMD ["/run.sh"]

2.编辑run.sh文件
vim run.sh
#!/bin/bash
/usr/local/nginx/sbin/nginx

3.生成镜像
  docker build -t nginx:test .

4.镜像生成容器
  docker run -d -p 80:80 nginx:test     ##这里使用80要先将前面的apache80关闭,否则端口重复,或者换一个

5.测试容器运行
  http://localhost:映射端口

三、Dockerfile生成tomcat镜像文件

mkdir /opt/tomcat
拷贝jdk-8u91-linux-x64.tar.gz
apache-tomcat-8.5.16.tar.gz 到/opt/tomcat 下

cd /opt/tomcat

vim Dockerfile
FROM centos:7
MAINTAINER this is tomcat image 
ADD jdk-8u91-linux-x64.tar.gz /usr/local
WORKDIR /usr/local/
RUN mv jdk1.8.0_91 /usr/local/java
ENV JAVA_HOME /usr/local/java
ENV JAVA_BIN /usr/local/java/bin
ENV JRE_HOME /usr/local/java/jre
ENV PATH $PATH:/usr/local/java/bin:/usr/local/java/jre/bin
ENV CLASSPATH /usr/local/java/jre/bin:/usr/local/java/lib:/usr/local/java/jre/lib/charsets.jar
ADD apache-tomcat-8.5.16.tar.gz /usr/local
WORKDIR /usr/local/
RUN mv apache-tomcat-8.5.16 /usr/local/tomcat8
EXPOSE 8080
#CMD [" /usr/local/tomcat8/bin/catalina.sh","run"]
ENTRYPOINT ["/usr/local/tomcat8/bin/catalina.sh"," run"]

四、Dockerfile生成mysql镜像文件

mkdir mysql
cd mysql/
vim Dockerfile
FROM centos:7
MAINTAINER this is mysql image
RUN yum -y update
#安装mysql依懒环境包
RUN yum -y install \
ncurses \
ncurses-devel \
bison \
cmake \
make \
gcc \
gcc-c++ 
#创建运行用户
RUN useradd -s /sbin/nologin mysql
#上传jingx
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/
#调整配置文件
RUN rm -rf /etc/my.cnf
ADD my.cnf /etc
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 echo -e "#!/bin/bash \nsystemctl enable mysqld" > /run.sh
RUN chmod 755 /run.sh
RUN sh /run.sh
CMD ["init"]

#CMD ["mysql_safe"]

#my.cnf启动脚本
vim my.cnf
[root@localhost mysql-5.7.20]#vi /etc/my.cnf
[client]
port = 3306
default-character-set=utf8
socket = /usr/local/mysql/mysql.sock

[mysql]
port = 3306
default-character-set=utf8
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
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


docker build -t centos:mysql .
docker run --name=mysql_server -d -P --privileged centos:mysql /usr/bin/initialize-insecure

#提权
docker exec -it  镜像ID  /bin/bash
grant all privileges on *.* to 'root'@'%' identified by 'abc123';
grant all privileges on *.* to 'root'@'%' localhost identified by 'abc123';

猜你喜欢

转载自blog.csdn.net/weixin_45647891/article/details/114920947