美文网首页
2020-05-18 Dockerfile

2020-05-18 Dockerfile

作者: 阿丧小威 | 来源:发表于2020-05-18 00:08 被阅读0次

1. Dockerfile格式

Dockerfile格式

2. Dockerfile指令

Dockerfile指令

3. Build镜像

Usage: docker build [OPTIONS] PATH | URL | - [flags]
Options:
-t, --tag list # 镜像名称
-f, --file string # 指定Dockerfile文件位置

docker build .
docker build -t shykes/myapp .
docker build -t shykes/myapp -f /path/Dockerfile /path    ---最常用,指定本地Dockerfile文件
docker build -t shykes/myapp http://www.example.com/Dock

4. 构建业务基础镜像

4.1 构建Nginx基础镜像

  1. yum或者源码编译安装(1.configure 2. make 3. make install) RUN
  2. 启用哪些模块 RUN
  3. nginx初始化 RUN
  4. 启动 CMD ENTRIPOINT
[root@localhost docker]# ls
Dockerfile-nginx  Dockerfile-php  Dockerfile-tomcat  nginx.conf  php-fpm.conf  php.ini
[root@localhost docker]# cat Dockerfile-nginx     ---配置Dockerfile-nginx文件
FROM centos:7    ---指定镜像
MAINTAINER www.ctnrs.com    ---作者
RUN 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 && \    ---下载nginx包
    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 2 && make install && \
    rm -rf /usr/local/nginx/html/* && \
    echo "ok" >> /usr/local/nginx/html/status.html && \
    cd / && rm -rf nginx-1.15.5* && \    ---安装完清理相关包
    ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime    ---指定时区

ENV PATH $PATH:/usr/local/nginx/sbin    ---定义环境变量
COPY nginx.conf /usr/local/nginx/conf/nginx.conf    ---把写好的nginx配置文件复制到对应目录下
WORKDIR /usr/local/nginx
EXPOSE 80
CMD ["nginx", "-g", "daemon off;"]
[root@localhost docker]# docker build -t nginx:v1 -f Dockerfile-nginx .    ---开始构建镜像,“.”指定上下文,.为当前目录
---省略若干---
Step 5/9 : ENV PATH $PATH:/usr/local/nginx/sbin
 ---> Running in 6d98f553c676
Removing intermediate container 6d98f553c676
 ---> 2f84b77dee85
Step 6/9 : COPY nginx.conf /usr/local/nginx/conf/nginx.conf
 ---> 5bd7dd22b0c0
Step 7/9 : WORKDIR /usr/local/nginx
 ---> Running in c47ef7b1eda3
Removing intermediate container c47ef7b1eda3
 ---> c7813649a90b
Step 8/9 : EXPOSE 80
 ---> Running in c0ababb3e761
Removing intermediate container c0ababb3e761
 ---> d20e50e0c7f0
Step 9/9 : CMD ["nginx", "-g", "daemon off;"]
 ---> Running in 89eab22cd9d1
Removing intermediate container 89eab22cd9d1
 ---> 1d3a450a4c2e
Successfully built 1d3a450a4c2e
Successfully tagged nginx:v1

[root@localhost docker]# docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
nginx               v1                  1d3a450a4c2e        5 minutes ago       332MB    ---构建成功
centos              7                   67fa590cfc1c        13 days ago         202MB
nginx               web04               2e68e90e2560        2 weeks ago         126MB
nginx               latest              5a3221f0137b        2 weeks ago         126MB
busybox             latest              db8ee88ad75f        6 weeks ago         1.22MB
centos              latest              9f38484d220f        5 months ago        202MB
hello-world         latest              fce289e99eb9        8 months ago        1.84kB
[root@localhost docker]# docker rm -f $(docker ps -a | awk '{print $1}')    ---清理之前测试时创建的容器
[root@localhost docker]# docker run -d --name nginx01 -p 88:80 nginx:v1    ---使用构建的镜像创建容器
97e20aa69f30a9cbe8e96d53c075ccc66f1491e9c53b3026794c54708ca362fe
[root@localhost docker]# docker ps -l
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS                NAMES
97e20aa69f30        nginx:v1            "nginx -g 'daemon of…"   10 seconds ago      Up 9 seconds        0.0.0.0:88->80/tcp   nginx01

4.2 构建PHP基础镜像

[root@docker ~]# cat Dockerfile-php 
FROM centos:7
MAINTAINER www.ctnrs.com
RUN 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 && \
    tar zxf php-5.6.36.tar.gz && \
    cd php-5.6.36 && \
    ./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 / && rm -rf php* && \
    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"]

[root@docker ~]# docker build -t php:v1 -f Dockerfile-php .
---省略若干---
Step 8/10 : WORKDIR /usr/local/php
 ---> Running in 46b608b64139
Removing intermediate container 46b608b64139
 ---> 9a82f9a2b046
Step 9/10 : EXPOSE 9000
 ---> Running in 5e2c1df77167
Removing intermediate container 5e2c1df77167
 ---> f8f76adafa95
Step 10/10 : CMD ["php-fpm"]
 ---> Running in fef4cd6ac835
Removing intermediate container fef4cd6ac835
 ---> beaafb70b1ee
Successfully built beaafb70b1ee
Successfully tagged php:v1

[root@docker ~]# docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
php                 v1                  beaafb70b1ee        2 hours ago         488MB
nginx               v1                  5ae4238572d6        3 hours ago         329MB
centos              7                   b5b4d78bc90c        10 days ago         203MB
nginx               latest              602e111c06b6        3 weeks ago         127MB
busybox             latest              be5888e67be6        4 weeks ago         1.22MB
hello-world         latest              bf756fb1ae65        4 months ago        13.3kB
[root@docker ~]# docker run -d --name php01 php:v1
c5f56adabac1660618dd33bce078009cd63913c5bfb2872d102de5efbb200cbe
[root@docker ~]# docker ps -l
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES
c5f56adabac1        php:v1              "php-fpm"           23 seconds ago      Up 21 seconds       9000/tcp            php01
[root@docker ~]# docker exec -it php01 bash
[root@c5f56adabac1 php]# pwd
/usr/local/php
[root@c5f56adabac1 php]# ls log/
php-fpm.log  www.log.slow
[root@c5f56adabac1 php]# ps -ef
UID         PID   PPID  C STIME TTY          TIME CMD
root          1      0  0 01:08 ?        00:00:00 php-fpm: master process (/usr/local/php/etc/php-fpm.conf)
nobody        6      1  0 01:08 ?        00:00:00 php-fpm: pool www
---省略若干---
nobody       55      1  0 01:08 ?        00:00:00 php-fpm: pool www
root         56      0  0 01:08 pts/0    00:00:00 bash
root         70     56  0 01:09 pts/0    00:00:00 ps -ef
[root@c5f56adabac1 php]# ./bin/php -v
PHP 5.6.36 (cli) (built: May 16 2020 14:12:46) 
Copyright (c) 1997-2016 The PHP Group
Zend Engine v2.6.0, Copyright (c) 1998-2016 Zend Technologies

4.3 构建Tomcat基础镜像

[root@docker ~]# cat Dockerfile-tomcat 
FROM centos:7
MAINTAINER www.ctnrs.com

ENV VERSION=8.0.46

RUN yum install java-1.8.0-openjdk wget curl unzip iproute net-tools -y && \
    yum clean all && \
    rm -rf /var/cache/yum/*

RUN wget https://archive.apache.org/dist/tomcat/tomcat-8/v${VERSION}/bin/apache-tomcat-${VERSION}.tar.gz && \
    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 && \
    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"]

[root@docker ~]# docker build -t tomcat:v1 -f Dockerfile-tomcat .
---省略若干---
Removing intermediate container 4fc99423b340
 ---> e4a099540fdc
Step 6/9 : ENV PATH $PATH:/usr/local/tomcat/bin
 ---> Running in 08a07fd58b98
Removing intermediate container 08a07fd58b98
 ---> 1f07368c984a
Step 7/9 : WORKDIR /usr/local/tomcat
 ---> Running in d1581270e7ca
Removing intermediate container d1581270e7ca
 ---> 2f15e17688af
Step 8/9 : EXPOSE 8080
 ---> Running in 2d4fe83b977f
Removing intermediate container 2d4fe83b977f
 ---> 3c26e51c46f7
Step 9/9 : CMD ["catalina.sh", "run"]
 ---> Running in 599d03beb2ed
Removing intermediate container 599d03beb2ed
 ---> 70a752702803
Successfully built 70a752702803
Successfully tagged tomcat:v1

[root@docker ~]# docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
tomcat              v1                  70a752702803        8 minutes ago       434MB
php                 v1                  beaafb70b1ee        17 hours ago        488MB
centos              7                   b5b4d78bc90c        11 days ago         203MB
nginx               latest              602e111c06b6        3 weeks ago         127MB
busybox             latest              be5888e67be6        4 weeks ago         1.22MB
hello-world         latest              bf756fb1ae65        4 months ago        13.3kB
nginx               1.15                53f3fd8007f7        12 months ago       109MB
[root@docker ~]# docker run -d --name tomcat01 -p 8089:8080 tomcat:v1
fd5dae5360c03b47ca33af924482b623d9eb28689cdffb20717d9d5a5308a72c
[root@docker ~]# docker ps -l
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS                    NAMES
fd5dae5360c0        tomcat:v1           "catalina.sh run"   4 seconds ago       Up 3 seconds        0.0.0.0:8089->8080/tcp   tomcat01

[root@docker ~]# cat Dockerfile    ---测试部署
FROM tomcat:v1
COPY jenkins.war /usr/local/tomcat/webapps/ROOT.war
[root@docker ~]# ls    ---去jenkins官网下载jenkins.war
Dockerfile        Dockerfile-php     jenkins.war  nginx.conf.ori  php.ini
Dockerfile-nginx  Dockerfile-tomcat  nginx.conf   php-fpm.conf
[root@docker ~]# docker build -t tomcat:v2 -f Dockerfile .
Sending build context to Docker daemon  66.36MB
Step 1/2 : FROM tomcat:v1
 ---> 70a752702803
Step 2/2 : COPY jenkins.war /usr/local/tomcat/webapps/ROOT.war
 ---> 0378ce9bdd8c
Successfully built 0378ce9bdd8c
Successfully tagged tomcat:v2
[root@docker ~]# docker run -d --name tomcat02 -p 8088:8080 tomcat:v2
ca3dfc0dee0b8bb834ec63954123d2574aaa1cadeb84307fdf0c478063c0c1b0
[root@docker ~]# docker exec -it tomcat02 bash
[root@ca3dfc0dee0b tomcat]# ls webapps/
ROOT  ROOT.war  test
测试访问jenkins

4.4快速部署LNMP网站平台

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=$(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
[root@docker ~]# docker network create lnmp
b56f7f0e7f5d8256dcbb939c138166b764712a4b281af2d7e13328b1ab42a583

[root@docker ~]# 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

[root@docker ~]# docker volume create wwwroot    ---创建卷
wwwroot

[root@docker ~]# docker run -d --name lnmp_php --net lnmp --mount src=wwwroot,dst=/wwwroot php:v1
d342e85f4be6884230f1cb99b6e1be5416b2554c29bbf6ff79a6c7b1f8039eb9

[root@docker ~]# docker run -d --name lnmp_nginx --net lnmp -p 88:80 \
> --mount type=bind,src=$(pwd)/nginx.conf,dst=/usr/local/nginx/conf/nginx.conf --mount src=wwwroot,dst=/wwwroot nginx:v1
3a80c0e7534766ab3194e2e71001c5d2474c2a914fbf8646fa9fa7d96e57fafb

[root@docker ~]# docker ps | grep lnmp    ---查看是否成功
3a80c0e75347        nginx:v1            "nginx -g 'daemon of…"   About a minute ago   Up About a minute   0.0.0.0:88->80/tcp       lnmp_nginx
d342e85f4be6        php:v1              "php-fpm"                2 minutes ago        Up 2 minutes        9000/tcp                 lnmp_php
21e600128a44        mysql:5.7           "docker-entrypoint.s…"   8 minutes ago        Up 8 minutes        3306/tcp, 33060/tcp      lnmp_mysql
[root@docker ~]# cd /var/lib/docker/volumes/
metadata.db  mysql-vol/   wwwroot/     
[root@docker ~]# cd /var/lib/docker/volumes/
metadata.db  mysql-vol/   wwwroot/     
[root@docker ~]# cd /var/lib/docker/volumes/wwwroot/_data/
[root@docker _data]# vi test.php
<?php phpinfo();?>
测试访问
[root@docker _data]# ls    ---上存wordpress包
test.php  wordpress-4.9.4-zh_CN.tar.gz
[root@docker _data]# tar zxf wordpress-4.9.4-zh_CN.tar.gz    ---解压
测试访问wordpress
输入相关信息
登录成功
安装wordress
登录
wordpress首页
[root@docker _data]# docker exec -it lnmp_nginx bash    ---进入nginx容器
[root@3a80c0e75347 nginx]# cd logs/
[root@3a80c0e75347 logs]# ls
error.log  www.ctnrs.com_access.log  www.ctnrs.com_error.log
[root@3a80c0e75347 logs]# cat www.ctnrs.com_access.log     ---查看登录日志,发现有日志了
192.168.9.24 - - [17/May/2020:23:55:28 +0800] "GET / HTTP/1.1" 403 555 "-" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/72.0.3626.121 Safari/537.36"
---省略若干---

相关文章

网友评论

      本文标题:2020-05-18 Dockerfile

      本文链接:https://www.haomeiwen.com/subject/sjgzectx.html