- 1. dockerfile格式
- 2. docker build
- http://www.example.com/Dockerfile">示例
# docker build .
# docker build -t shykes/myapp .
# docker build -t shykes/myapp -f /path/Dockerfile /path
# docker build -t shykes/myapp http://www.example.com/Dockerfile - 3. 几种镜像说明
- 4. 编写dockerfile技巧
- 5. dockerfile构建nginx镜像
- 6. dockerfile构建php镜像
- 7. dockerfile构建tomcat镜像
- 8. 基于构建的tomcat镜像构建jenkins镜像
- 9. 构建LNMP
- 10. dockerhub中的数据库启动参数说明
- dockerhub上mysql镜像封装时做的变量处理创建root密码创建数据库
-e MYSQL_ROOT_PASSWORD=123456
-e MYSQL_DATABASE=wordpress - dockerhub上mysql镜像封装时做的变量处理数据库使用的字符集放在最后
—character-set-server=utf8
1. dockerfile格式
dockerfile就是一个文本,文本里面写了dockerfile特定的指令或者一些格式,通过这个文件可以构建出想要的镜像来,安装顺序执行
| 指令 | 描述 | 使用 |
|---|---|---|
| FROM | 构建新镜像是基于哪个镜像 | FROM centos:latest |
| MAINTAINER | 镜像维护者姓名或邮箱地址 | MAINTAINER chenjinhang |
| RUN | 构建镜像时运行的Shell命令 | RUN yum install gcc -y |
| COPY | 拷贝文件或目录到镜像中 | COPY run.sh /usr/bin |
| ENV | 设置环境变量 | |
| USER | 为RUN、CMD和ENTRYPOINT执行命令指定运行用户 | |
| EXPOSE | 声明容器运行的服务端口 | EXPOSE 80 |
| HEALTHCHECK | 容器中服务健康检查,检查容器运行的服务的状态 | |
| WORKDIR | 为RUN、CMD、ENTRYPOINT、COPY和ADD设置工作目录 | |
| ENTRYPOINT | 运行容器时执行,如果有多个ENTRYPOINT指令,最后一个生效 | |
| CMD | 运行容器时执行,如果有多个CMD指令,最后一个生效 | CMD [“run.sh”] |
2. docker build
docker build常用选择
-t, —tag list # 镜像名称
-f, —file string # 指定Dockerfile文件位置
. # 指定dockerfile中的上下文 dockerfile中会涉及一些文件,上下文指的就是这些文件从哪里读 .当前目录 dockerfile同级的目录下
示例
# docker build .
# docker build -t shykes/myapp .
# docker build -t shykes/myapp -f /path/Dockerfile /path
# docker build -t shykes/myapp http://www.example.com/Dockerfile
3. 几种镜像说明
通常在企业中使用中,镜像可能会分为:
基础镜像:基础镜像是运行一个项目基础的环境例如像、jdk环境、tomcat环境、nginx环境单纯的环境就一个基本的服务
项目镜像:项目镜像才是真正的放到线上去运行的,基于这个基础镜像之上在构建自己的项目镜像例如将项目打包的这个基础镜像中这就是一个项目镜像,打包后的镜像可以拿到docker环境上去运行
4. 编写dockerfile技巧
编写dockerfile技巧:先在独立干净的容器中,将dockerfile中即将想写入的内容执行一遍,在容器跑通后复制出来,复制到文本中,在整理到dockerfile中
dockerfile实践:1、尽少的使用dockerfile的指令run,2、清理当前环境留下的垃圾yum的缓存删除下载的源码包
5. dockerfile构建nginx镜像
1、yum或者源码编译安装
2、启动哪些模块
3、nginx初始化
4、启动 cmd entripoint
5.1. nginx的dockerfile
编写nginx dockerfile
[root@centos7 dockerfile]# cat Dockerfile-nginxFROM centos:7MAINTAINER chen_jinhang@qq.comRUN curl -o /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo && \yum install -y gcc gcc-c++ make \openssl-devel pcre-devel gd-devel \iproute net-tools telnet wget curl && \yum clean all && \rm -rf /var/cache/yum/*RUN wget http://nginx.org/download/nginx-1.15.5.tar.gz && \tar zxf nginx-1.15.5.tar.gz && \cd nginx-1.15.5 && \./configure --prefix=/usr/local/nginx \--with-http_ssl_module \--with-http_stub_status_module && \make -j 4 && make install && \rm -rf /usr/local/nginx/html/* && \echo "ok" >> /usr/local/nginx/html/status.html && \cd / && rm -rf nginx-1.12.2* && \ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtimeENV PATH $PATH:/usr/local/nginx/sbin#COPY nginx.conf /usr/local/nginx/conf/nginx.confWORKDIR /usr/local/nginxEXPOSE 80# 前台运行CMD ["nginx", "-g", "daemon off;"]
运行dockerfile
[root@centos7 dockerfile]# docker build -t nginx:v1 -f Dockerfile-nginx .
启动dockerfile编写的nginx镜像
[root@centos7 dockerfile]# docker run -d --name nginx_v1_01 -p 88:80 nginx:v1
9b2ad5d6de27cea4406fc27976cab2f69f88571d5eaf2171d063eb55377e36ad
浏览器访问检查
5.2. nginx项目的dockefile
编写index.html
[root@centos7 dockerfile]# cat index.html
chenjinhang project
编写nginx项目的dockerfile
[root@centos7 dockerfile]# cat Dockerfile-nginx_v2
FROM nginx:v1
MAINTAINER chen_jinhang@qq.com
COPY index.html /usr/local/nginx/html
运行dockerfile
[root@centos7 dockerfile]# docker build -t nginx:v2 -f Dockerfile-nginx_v2 .
启动镜像
[root@centos7 dockerfile]# docker run -d --name nginx_v2_01 -p 89:80 nginx:v2
97046947894c2c54d9ce8231e14325e5c74b1c6275258f30df42d02382c202c4
6. dockerfile构建php镜像
编写nginx dockerfile
[root@centos7 dockerfile]# cat Dockerfile-php
FROM centos:7
MAINTAINER chen_jinhang@qq.com
RUN curl -o /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo && \
yum install epel-release -y && \
yum install -y gcc gcc-c++ make gd-devel libxml2-devel \
libcurl-devel libjpeg-devel libpng-devel openssl-devel \
libmcrypt-devel libxslt-devel libtidy-devel autoconf \
iproute net-tools telnet wget curl && \
yum clean all && \
rm -rf /var/cache/yum/*
#RUN wget http://docs.php.net/distributions/php-5.6.36.tar.gz && \
COPY php/php-5.6.39.tar.gz /root/
RUN cd /root/ && \
tar zxf php-5.6.39.tar.gz && \
cd php-5.6.39 && \
./configure --prefix=/usr/local/php \
--with-config-file-path=/usr/local/php/etc \
--enable-fpm --enable-opcache \
--with-mysql --with-mysqli --with-pdo-mysql \
--with-openssl --with-zlib --with-curl --with-gd \
--with-jpeg-dir --with-png-dir --with-freetype-dir \
--enable-mbstring --with-mcrypt --enable-hash && \
make -j 4 && make install && \
cp php.ini-production /usr/local/php/etc/php.ini && \
cp sapi/fpm/php-fpm.conf /usr/local/php/etc/php-fpm.conf && \
sed -i "90a \daemonize = no" /usr/local/php/etc/php-fpm.conf && \
mkdir /usr/local/php/log && \
cd /root/ && rm -rf php-5.6.39.tar.gz && \
ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
ENV PATH $PATH:/usr/local/php/sbin:/usr/local/php/bin
COPY php.ini /usr/local/php/etc/
COPY php-fpm.conf /usr/local/php/etc/
WORKDIR /usr/local/php
EXPOSE 9000
CMD ["php-fpm"]
下载php安装包
mkdir php
cd php/
wget http://mirrors.sohu.com/php/php-5.6.39.tar.gz
运行dockerfile
docker build -t php:v1 -f Dockerfile-php .
启动镜像
docker run -d —name php01 php:v1
检查
[root@centos7 dockerfile]# docker exec -it php01 bash
[root@61a3b3737c23 php]# php -v
PHP 5.6.39 (cli) (built: Oct 19 2019 06:04:06)
Copyright (c) 1997-2016 The PHP Group
Zend Engine v2.6.0, Copyright (c) 1998-2016 Zend Technologies
7. dockerfile构建tomcat镜像
编写tomcat dockerfile
[root@centos7 dockerfile]# cat Dockerfile-tomcat
FROM centos:7
MAINTAINER chen_jinhang@qq.com
ENV VERSION=8.5.47
RUN curl -o /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo && \
yum install java-1.8.0-openjdk wget curl unzip iproute net-tools -y && \
yum clean all && \
rm -rf /var/cache/yum/*
#RUN wget http://mirrors.shu.edu.cn/apache/tomcat/tomcat-8/v${VERSION}/bin/apache-tomcat-${VERSION}.tar.gz && \
COPY tomcat/apache-tomcat-${VERSION}.tar.gz /root/
RUN cd /root/ && \
tar zxf apache-tomcat-${VERSION}.tar.gz && \
mv apache-tomcat-${VERSION} /usr/local/tomcat && \
rm -rf apache-tomcat-${VERSION}.tar.gz /usr/local/tomcat/webapps/* && \
mkdir /usr/local/tomcat/webapps/test && \
echo "ok" > /usr/local/tomcat/webapps/test/status.html && \
# tomcat 启动慢解决
sed -i '1a JAVA_OPTS="-Djava.security.egd=file:/dev/./urandom"' /usr/local/tomcat/bin/catalina.sh && \
ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
ENV PATH $PATH:/usr/local/tomcat/bin
WORKDIR /usr/local/tomcat
EXPOSE 8080
# 前台运行
CMD ["catalina.sh", "run"]
下载tomcat安装包
mkdir tomcat
cd tomcat/
wget https://mirrors.aliyun.com/apache/tomcat/tomcat-8/v8.5.47/bin/apache-tomcat-8.5.47.tar.gz
运行dockerfile
docker build -t tomcat:v1 -f Dockerfile-tomcat .
启动镜像
docker run -d —name tomcat01 -p 8089:8080 tomcat:v1
检查
8. 基于构建的tomcat镜像构建jenkins镜像
jenkins的war包下载地址清华源:https://mirror.tuna.tsinghua.edu.cn/jenkins/war/
编写jenkins dockerfile 基于之前tomcat镜像
[root@centos7 dockerfile]# cat Dockerfile-jenkins
FROM tomcat:v1
MAINTAINER chen_jinhang@qq.com
COPY jenkins/jenkins.war /usr/local/tomcat/webapps/ROOT.war
下载jenkins包
mkdir jenkins
cd jenkins/
wget https://mirror.tuna.tsinghua.edu.cn/jenkins/war/2.190/jenkins.war
运行dockerfile
docker build -t jenkins:v1 -f Dockerfile-jenkins .
启动镜像
docker run -d -p 8088:8080 —name jenkins01 jenkins:v1
检查
9. 构建LNMP
1、自定义网络
docker network create lnmp
2、创建Mysql容器
docker run -d \
—name lnmp_mysql \
—net lnmp \
—mount src=mysql-vol,dst=/var/lib/mysql \
-e MYSQL_ROOT_PASSWORD=123456 -e MYSQL_DATABASE=wordpress mysql:5.7 —character-set-server=utf8
3、创建PHP容器
docker run -d —name lnmp_php —net lnmp —mount src=wwwroot,dst=/wwwroot php:v1
4、创建Nginx容器
docker run -d —name lnmp_nginx —net lnmp -p 88:80 \
—mount type=bind,src=/root/dockerfile/nginx.conf,dst=/usr/local/nginx/conf/nginx.conf —mount src=wwwroot,dst=/wwwroot nginx:v1
#—mount type=bind,src=$(pwd)/nginx.conf,dst=/usr/local/nginx/conf/nginx.conf —mount src=wwwroot,dst=/wwwroot nginx:v1
5、以wordpress博客为例
https://cn.wordpress.org/wordpress-4.9.4-zh_CN.tar.gz
确保3个服务全部启动
[root@centos7 dockerfile]# docker ps|grep lnmp
a0a3f71fd358 nginx:v1 "nginx -g 'daemon of…" 4 minutes ago Up 4 minutes 0.0.0.0:88->80/tcp lnmp_nginx
1c1f93e3473f php:v1 "php-fpm" 30 minutes ago Up 30 minutes 9000/tcp lnmp_php
ab9e6242dc0f mysql:5.7 "docker-entrypoint.s…" 39 minutes ago Up 39 minutes 3306/tcp, 33060/tcp lnmp_mysql
写php测试页面
cd /var/lib/docker/volumes/wwwroot/_data/
echo ‘<?php phpinfo();?>’ >>test.php
访问检查php解析是否成功
10.0.0.201:88/test.php
部署wordpress博客
10. dockerhub中的数据库启动参数说明
docker run -d \
—name lnmp_mysql \
—net lnmp \
—mount src=mysql-vol,dst=/var/lib/mysql \
-e MYSQL_ROOT_PASSWORD=123456 -e MYSQL_DATABASE=wordpress mysql:5.7 —character-set-server=utf8

