1. Dockerfile格式

2. 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基础镜像
- yum或者源码编译安装(1.configure 2. make 3. make install) RUN
- 启用哪些模块 RUN
- nginx初始化 RUN
- 启动 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

4.4快速部署LNMP网站平台

- 自定义网络
docker network create lnmp - 创建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 - 创建PHP容器
docker run -d --name lnmp_php --net lnmp --mount src=wwwroot,dst=/wwwroot php:v1 - 创建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 - 以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 ---解压






[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"
---省略若干---
网友评论