前提
参考此文档安装完成即可 ubuntu二进制安装docker及docker info介绍(小节1)
~# mkdir /opt/dockerfile/{web/{nginx,tomcat,jdk,apache},system/{centos,ubuntu,alpine,debian}} -pv
- 构建Centos基础镜像
创建Dockerfile
#进到centos目录
~# cd /opt/dockerfile/system/centos/
/opt/dockerfile/system/centos# vim Dockerfile
#Centos 7.7 bash image
#
#
FROM centos:7.7.1908
#维护者信息
LABEL maintainer="stao <clark_0932@qq.com>"
#安装某些包
RUN yum install -y epel-release && yum install -y zip unzip vim wget tree lrzsz gcc gcc-c++ automake pcre pcre-devel zlib zlib-devel openssl openssl-devel iproute net-tools iotop
#创建用户组等信息
RUN groupadd www -g 2020 && useradd www -u 2020 -g www && groupadd nginx -g 2021 && useradd nginx -u 2021 -g nginx
/opt/dockerfile/system/centos# docker build -t centos-base:7.7.1908 .
/opt/dockerfile/system/centos# vim build-command.sh
#!/bin/bsh
docker build -t centos-base:7.7.1908 .
- 构建jdk
JKD下载地址:www.oracle.com/java/techno…
/opt/dockerfile/system/centos# cd /opt/dockerfile/web/jdk/
/opt/dockerfile/web/jdk# mkdir jdk-8u351
/opt/dockerfile/web/jdk# cd jdk-8u351
Dockerfile
/opt/dockerfile/web/jdk/jdk-8u351# vim Dockerfile
FROM centos-base:7.7.1908
#维护者信息
LABEL maintainer="stao <clark_0932@qq.com>"
ADD jdk-8u351-linux-x64.tar.gz /usr/local/src/
RUN ln -sv /usr/local/src/jdk1.8.0_351 /usr/local/jdk
ADD profile /etc/profile
#环境变量
ENV JAVA_HOME /usr/local/jdk
ENV JRE_HOME $JAVA_HOME/jre
ENV CLASSPATH $JAVA_HOME/lib/:$JRE_HOME/lib/
ENV PATH $PATH:$JAVA_HOME/bin
#修改容器时区
RUN rm -rf /etc/localtime && ln -snf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
/opt/dockerfile/web/jdk/jdk-8u351# ll
total 146204
drwxr-xr-x 2 root root 4096 Dec 24 02:13 ./
drwxr-xr-x 3 root root 4096 Dec 24 01:43 ../
-rw-r--r-- 1 root root 471 Dec 24 02:11 Dockerfile
-rw-r--r-- 1 root root 149697219 Dec 24 02:13 jdk-8u351-linux-x64.tar.gz
/opt/dockerfile/web/jdk/jdk-8u351# cp jdk-8u351-linux-x64.tar.gz /usr/local/src/
/opt/dockerfile/web/jdk/jdk-8u351# cd /usr/local/src/
#解压缩
/usr/local/src# tar xvf jdk-8u351-linux-x64.tar.gz
软链接
/usr/local/src# ln -sv /usr/local/src/jdk1.8.0_351/ /usr/local/jdk
添加变量
/usr/local/src# cat /etc/profile
# /etc/profile: system-wide .profile file for the Bourne shell (sh(1))
# and Bourne compatible shells (bash(1), ksh(1), ash(1), ...).
if [ "${PS1-}" ]; then
if [ "${BASH-}" ] && [ "$BASH" != "/bin/sh" ]; then
# The file bash.bashrc already sets the default PS1.
# PS1='\h:\w\$ '
if [ -f /etc/bash.bashrc ]; then
. /etc/bash.bashrc
fi
else
if [ "`id -u`" -eq 0 ]; then
PS1='# '
else
PS1='$ '
fi
fi
fi
if [ -d /etc/profile.d ]; then
for i in /etc/profile.d/*.sh; do
if [ -r $i ]; then
. $i
fi
done
unset i
fi
#添加下面三行变量
export JAVA_HOME=/usr/local/jdk
export CLASSPATH=.:$JAVA_HOME/jre/lib/rt.jar:$JAVA_HOME/lib/dt:jar:$JAVA_HOME/lib/tools.jar
export PATH=$PATH:$JAVA_HOME/bin
#使变量生效
/usr/local/src# source /etc/profile
/usr/local/src# java -version
java version "1.8.0_351"
Java(TM) SE Runtime Environment (build 1.8.0_351-b10)
Java HotSpot(TM) 64-Bit Server VM (build 25.351-b10, mixed mode)
/usr/local/src# cd -
/opt/dockerfile/web/jdk/jdk-8u351
#拷贝profile到当前目录
/opt/dockerfile/web/jdk/jdk-8u351# cp /etc/profile .
#创建build脚本
/opt/dockerfile/web/jdk/jdk-8u351# cat build-command.sh
#!/bin/bash
docker build -t centos-jdk:8u351 .
执行脚本
/opt/dockerfile/web/jdk/jdk-8u351# bash build-command.sh
/opt/dockerfile/web/jdk/jdk-8u351# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
centos-jdk 8u351 fc451dc9106f 29 seconds ago 988MB <--
centos-base 7.7.1908 7e7ba86b94ac 5 minutes ago 612MB
centos 7.7.1908 08d05d1d5859 3 years ago 204MB
#运行容器
/opt/dockerfile/web/jdk/jdk-8u351# docker run --rm -it centos-jdk:8u351 bash
64cc80f39936 /]# java -version
java version "1.8.0_351"
Java(TM) SE Runtime Environment (build 1.8.0_351-b10)
Java HotSpot(TM) 64-Bit Server VM (build 25.351-b10, mixed mode)
查看系统账号是否存在
64cc80f39936 /]# id www
uid=2020(www) gid=2020(www) groups=2020(www)
64cc80f39936 /]# id nginx
uid=2021(nginx) gid=2021(nginx) groups=2021(nginx)
64cc80f39936 /]# exit
- 构建tomcat
#切换目录
/opt/dockerfile/web/jdk/jdk-8u351# cd /opt/dockerfile/web/tomcat/
/opt/dockerfile/web/tomcat# mkdir tomcat8.5.51-base
/opt/dockerfile/web/tomcat# cd tomcat8.5.51-base
#上传软件包
/opt/dockerfile/web/tomcat/tomcat8.5.51-base# ll
total 10084
drwxr-xr-x 2 root root 4096 Dec 24 23:19 ./
drwxr-xr-x 3 root root 4096 Dec 24 20:17 ../
-rw-r--r-- 1 root root 10315164 Dec 24 23:19 apache-tomcat-8.5.51.tar.gz
创建Dockerfile
/opt/dockerfile/web/tomcat/tomcat8.5.51-base# vim Dockerfile
FROM centos-jdk:8u351
#维护者信息
LABEL maintainer="stao <clark_0932@qq.com>"
ADD apache-tomcat-8.5.51.tar.gz /apps
#软链接
RUN ln -sv /apps/apache-tomcat-8.5.51 /apps/tomcat
/opt/dockerfile/web/tomcat/tomcat8.5.51-base# vim build-command.sh
#!/bin/bash
docker build -t centos-tomcat:8.5.51 .
执行
/opt/dockerfile/web/tomcat/tomcat8.5.51-base# bash build-command.sh
测试
#进到容器中
/opt/dockerfile/web/tomcat/tomcat8.5.51-base# docker run --rm -it -p 8080:8080 centos-tomcat:8.5.51 bash
#启动tomcat
5e9fc7025344 /]# /apps/tomcat/bin/catalina.sh start
Using CATALINA_BASE: /apps/tomcat
Using CATALINA_HOME: /apps/tomcat
Using CATALINA_TMPDIR: /apps/tomcat/temp
Using JRE_HOME: /usr/local/jdk/jre
Using CLASSPATH: /apps/tomcat/bin/bootstrap.jar:/apps/tomcat/bin/tomcat-juli.jar
Tomcat started.
#查看是否有tomcat的8080端口
5e9fc7025344 /]# ss -tnl
State Recv-Q Send-Q Local Address:Port Peer Address:Port
LISTEN 0 1 127.0.0.1:8005 *:*
LISTEN 0 100 *:8080 *:*
下载server.xml
5e9fc7025344 /]# sz /apps/tomcat/conf/server.xml
- app1业务
/opt/dockerfile/web/tomcat# pwd
/opt/dockerfile/web/tomcat
root@ubuntu-1:/opt/dockerfile/web/tomcat# mkdir tomcat-app1
root@ubuntu-1:/opt/dockerfile/web/tomcat# cd tomcat-app1/
/opt/dockerfile/web/tomcat/tomcat-app1# mkdir linux00
#创建页面
/opt/dockerfile/web/tomcat/tomcat-app1# vim linux00/index.html
linux00 tomcat web page app1
#打包
/opt/dockerfile/web/tomcat/tomcat-app1# tar czvf linux00.tar.gz linux00/*
上传server.xml、并修改
/opt/dockerfile/web/tomcat/tomcat-app1# ll server.xml
-rw-r--r-- 1 root root 7588 Dec 24 23:58 server.xml
/opt/dockerfile/web/tomcat/tomcat-app1# vim server.xml
#修改以下信息
<Host name="localhost" appBase="/data/tomcat/webapps"
unpackWARs="false" autoDeploy="false">
/opt/dockerfile/web/tomcat/tomcat-app1# vim Dockerfile
FROM centos-tomcat:8.5.51
ADD server.xml /apps/tomcat/conf/server.xml
ADD linux00.tar.gz /data/tomcat/webapps <--此处路径要和server.xml中路径一致(看上图)
ADD run_tomcat.sh /apps/tomcat/bin/run_tomcat.sh
#递归修改权限
RUN chown www.www /apps -R
EXPOSE 8080 8005 8009
CMD ["/apps/tomcat/bin/run_tomcat.sh"]
/opt/dockerfile/web/tomcat/tomcat-app1# vim run_tomcat.sh
#!/bin/bash
echo "192.168.37.248 dns1.123.local" >> /etc/hosts
echo "192.168.37.249 dns2.123.local" >> /etc/hosts
echo "nameserver 223.5.5.5" > /etc/resolv.conf
su - www -c "/apps/tomcat/bin/catalina.sh start"
tail -f /etc/hosts
/opt/dockerfile/web/tomcat/tomcat-app1# vim build-command.sh
#!/bin/bash
docker build -t tomcat-linux00:app1 .
#添加执行权限
/opt/dockerfile/web/tomcat/tomcat-app1# chmod a+x run_tomcat.sh
#执行
/opt/dockerfile/web/tomcat/tomcat-app1# bash build-command.sh
/opt/dockerfile/web/tomcat/tomcat-app1# docker run --rm -it -p8080:8080 tomcat-linux00:app1
Using CATALINA_BASE: /apps/tomcat
Using CATALINA_HOME: /apps/tomcat
Using CATALINA_TMPDIR: /apps/tomcat/temp
Using JRE_HOME: /usr/local/jdk
Using CLASSPATH: /apps/tomcat/bin/bootstrap.jar:/apps/tomcat/bin/tomcat-juli.jar
Tomcat started.
127.0.0.1 localhost
::1 localhost ip6-localhost ip6-loopback
fe00::0 ip6-localnet
ff00::0 ip6-mcastprefix
ff02::1 ip6-allnodes
ff02::2 ip6-allrouters
172.17.0.2 5e1a997dceb1
192.168.37.248 dns1.123.local
192.168.37.249 dns2.123.local
新开一个窗口
~# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
5e1a997dceb1 tomcat-linux00:app1 "/apps/tomcat/bin/ru…" About a minute ago Up About a minute 8005/tcp, 8009/tcp, 0.0.0.0:8080->8080/tcp, :::8080->8080/tcp clever_johnson
#进入容器
~# docker exec -it 5e1a997dceb1 bash
5e1a997dceb1 /]# cat /etc/hosts
127.0.0.1 localhost
::1 localhost ip6-localhost ip6-loopback
fe00::0 ip6-localnet
ff00::0 ip6-mcastprefix
ff02::1 ip6-allnodes
ff02::2 ip6-allrouters
172.17.0.2 5e1a997dceb1
192.168.37.248 dns1.123.local
192.168.37.249 dns2.123.local
5e1a997dceb1 /]# cat /etc/resolv.conf
nameserver 223.5.5.5
#窗口8080端口是否启动
5e1a997dceb1 /]# ss -tnl
State Recv-Q Send-Q Local Address:Port Peer Address:Port
LISTEN 0 1 127.0.0.1:8005 *:*
LISTEN 0 100 *:8080 *:*
浏览器访问 http://192.168.37.101:8080/linux00
- 再创建个APP2业务
/opt/dockerfile/web/tomcat/tomcat-app1# cd ..
#创建app2
/opt/dockerfile/web/tomcat# cp -rf tomcat-app1 tomcat-app2
/opt/dockerfile/web/tomcat# cd tomcat-app2
#网页信息
/opt/dockerfile/web/tomcat/tomcat-app2# vim linux00/index.html
linux00 tomcat web page app2
#删除之前的
/opt/dockerfile/web/tomcat/tomcat-app2# rm -rf linux00.tar.gz
#重新打包
/opt/dockerfile/web/tomcat/tomcat-app2# tar czvf linux00.tar.gz linux00/*
/opt/dockerfile/web/tomcat/tomcat-app2# vim build-command.sh
#!/bin/bash
docker build -t tomcat-linux00:app2 .
/opt/dockerfile/web/tomcat/tomcat-app2# vim Dockerfile
FROM centos-tomcat:8.5.51
ADD server.xml /apps/tomcat/conf/server.xml
ADD linux00.tar.gz /data/tomcat/webapps
ADD run_tomcat.sh /apps/tomcat/bin/run_tomcat.sh
#递归修改权限
RUN chown www.www /apps -R
EXPOSE 8080 8005 8009
CMD ["/apps/tomcat/bin/run_tomcat.sh"]
/opt/dockerfile/web/tomcat/tomcat-app2# bash build-command.sh
/opt/dockerfile/web/tomcat/tomcat-app2# docker run --rm -it -p8081:8080 tomcat-linux00:app2
Using CATALINA_BASE: /apps/tomcat
Using CATALINA_HOME: /apps/tomcat
Using CATALINA_TMPDIR: /apps/tomcat/temp
Using JRE_HOME: /usr/local/jdk
Using CLASSPATH: /apps/tomcat/bin/bootstrap.jar:/apps/tomcat/bin/tomcat-juli.jar
Tomcat started.
127.0.0.1 localhost
::1 localhost ip6-localhost ip6-loopback
fe00::0 ip6-localnet
ff00::0 ip6-mcastprefix
ff02::1 ip6-allnodes
ff02::2 ip6-allrouters
172.17.0.2 bc835822c80e
192.168.37.248 dns1.123.local
192.168.37.249 dns2.123.local
浏览器测试