docker
Namespaces 命名空间,是linux内核提供的一种对进程资源隔离的机制,比如网络,进程,挂载点等
CGroup 对资源进行限制,防止cpu或内存用的过多等
ls -l /sys/fs/cgroup/
虚拟机与docker区别
虚拟机是在硬件基础上通过hypervisor虚拟出硬件,比如虚拟出多个cpu等....
docker是在操作系统上的进程,共享宿主机内核,docker上有文件系统,库文件等,,,
docker history nginx:latest
查看镜像层
docker容器的网络访问
一, 指定映射(docker 会自动添加一条iptables规则来实现端口映射)
启动docker后会有个docker0的网卡,docker把网关指向docker0 通过内核转发上外网
docker网络主要依赖于iptables
[root@docker01 ~]# iptables -t nat -L -n
[root@docker01 ~]# tcpdump port 80 -nn -i docker0
[root@docker01 ~]# tcpdump port 81 -nn -i eth0
二. docker网络端口设置的5种方法
-p hostPo rt:containerPort
-p ip:hostPort:containerPort
-p ip::containerPort(随机端口)
-p hostPort:containerPort:udp
-p 81:80 –p 443:443 可以指定多个-p
1, docker 端口映射
把宿主机的端口81映射到docker的80
[root@docker01 ~]# docker run -d -p 81:80 nginx:latest
2, -p ip:hostPort:containerPort
[root@docker01 yum.repos.d]# ifconfig eth0:1 10.0.0.100/24 up
[root@docker01 yum.repos.d]# docker run -d -p 10.0.0.11:80:80 nginx:latest
23f1620839e3c06810500f6712edf5def2674af25f9d2921ef6f2b56713636ff
[root@docker01 yum.repos.d]# docker run -d -p 10.0.0.100:80:80 nginx:latest
8ae65d993f00e16bd4e814f22a5648351572fc2aa2a8da4281b3976062bc940b
3. -p ip::containerPort(随机端口)
[root@docker01 ~]# docker run -d -p 10.0.0.100::80 nginx:latest
4. -p 81:80 –p 443:443 可以指定多个-p
5. 随机映射
docker run -P (随机端口)
[root@docker01 ~]# docker run -d -P nginx:latest
三. 数据卷(文件或目录)
docker卷有2种
docker 自行维护管理的卷 | /var/lib/docker/volumes/xxxx/_date |
绑定挂载卷 |
把宿主机的文件,挂载到docker nginx里
mkdir /opt/xiaoniao
把程序放到 /opt/xiaoniao/下
语法: docker run -d -p 80:80 -v 宿主机文件目录:docker nginx容器站点目录 nginx:latest
[root@docker01 ~]# docker run -d -p 80:80 -v /opt/xiaoniao:/usr/share/nginx/html nginx:latest
数据卷容器
共享挂载
[root@docker01 ~]# docker run -d -p 81:80 --volumes-from 其他容器名nginx:latest
[root@docker01 ~]# docker run -d -p 81:80 --volumes-from gracious_stallman nginx:latest
四, 基于nginx启动一个容器,监听80和81,访问80,出现nginx默认首页,访问81,出现小鸟
-p 指定多个端口
-v指定多个文件 挂载配置文件
1.在/opt下创建nginx 配置文件
[root@docker01 ~]# cat /opt/xiaoniao.conf
server {
listen 81;
server_name localhost;
location / {
root /opt/xiaoniao;
index index.html index.htm;
}
}
2.启动容器
docker run -d -p 宿主机端口:dockernginx端口 -p 81:81 -v宿主机nginx配置文件: docker nginx配置文件 -v /opt/xiaoniao:/opt/xiaoniao nginx:latest
docker run -d -p 80:80 -p 81:81 -v /opt/xiaoniao.conf:/etc/nginx/conf.d/xiaoniao.conf -v /opt/xiaoniao:/opt/xiaoniao nginx:latest
3.测试
浏览器访问10.0.0.11出现nginx欢迎界面
访问10.0.0.11:81出现小鸟
[root@docker01 opt]# docker exec -it elated_proskuriakova /bin/bash
-v 指定的 配置文件在docker nginx 被挂载了
root@08b0fa4b91b8:/# cat /etc/nginx/conf.d/xiaoniao.conf
server {
listen 81;
server_name localhost;
location / {
root /opt/xiaoniao;
index index.html index.htm;
}
}
五,手动将容器保存为镜像
手动制作镜像步骤
启动一个容器,安装服务
把刚才安装好服务的容器,提交为镜像
测试
1):基于容器制作镜像
1 echo '192.168.20.200 mirrors.aliyun.com' >>/etc/hosts
2 curl -o /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-6.repo
3 yum install openssh-server -y
4 /etc/init.d/sshd start
5 echo 123456|passwd --stdin root
6 docker run -d -p 1122:22 cnetos:6.9 -p 1122 暴露端口,防止端口冲突+
7 windows连接测试
shell ssh 10.0.0.11 1022 直接连接容器
8 提交镜像 docker commit 容器id或者容器的名字 新的镜像名字[:版本号可选]
docker commit docker 5cef7c611c35 centos6.9_ssh:v1
9 查看
docker images
vi /init.sh
#!/bin/bash
/etc/init.d/httpd start
/usr/sbin/sshd -D
chmod +x /init.sh
2)将容器提交为镜像
docker commit oldboy centos6-ssh-httpd:v1
3)测试镜像功能是否可用
六,dockerfile
企业使用容器,写dockerfile就是基本功
dockerfile主要组成部分:
基础镜像信息 FROM:centos:6.9
制作镜像操作指令 RUN yum install openssh-server -y
容器启动时执行的初始命令 CMD ["/bin/bash"]
七 centos6 构建ssh_httpd
创建目录准备构建镜像
dockerfile 文件的名字必须叫dockerfile
[root@docker01 opt]# mkdir dockerfile
[root@docker01 opt]# cd dockerfile
[root@docker01 dockerfile]# mkdir centos6.9_ssh
[root@docker01 dockerfile]# cd centos6.9_ssh
[root@docker01 centos6.9_ssh]# vim dockerfile
[root@docker01 ~]# cat /opt/dockerfile/centos6.9_ssh/dockerfile
FROM centos:6.9 依赖的基础镜像
RUN yum install openssh-server -y RUN 执行的命令
RUN /etc/init.d/sshd start && echo "12345" | passwd --stdin root
CMD ["/usr/sbin/sshd","-D"] 启动后运行 卡住的命令 传参 用 , " 参数"
构建镜像
[root@docker01 centos6.9_ssh]# docker run -d -p 1033:22 centos6.9_ssh:v1
docker images查看已经存到仓库
启动容器
[root@docker01 centos6.9_ssh]# docker run -d -p 1033:22 centos6.9_ssh:v1
进入容器
[root@docker01 centos6.9_ssh]# ssh root@10.0.0.11 -p 1033
八,构建centos7 ssh httpd镜像
[root@docker01 ~]# docker search centos
[root@docker01 opt]# mkdir dockerfile
[root@docker01 opt]# cd dockerfile
mkdir centos_init
[root@docker01 centos7_init]# vim dockerfile
[root@docker01 ~]# cat /opt/dockerfile/centos7_init/dockerfile
FROM centos:latest
RUN curl -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-7.repo
RUN yum -y install iproute
RUN yum install openssh-server -y
RUN yum -y install httpd
RUN yum install vim wget bash-completion lrzsz nmap nc tree htop iftop net-tools -y
RUN echo "12345" | passwd --stdin root
RUN ssh-keygen -t dsa -f /etc/ssh/ssh_host_dsa_key
RUN ssh-keygen -t rsa -f /etc/ssh/ssh_host_rsa_key
ADD init.sh /init.sh
CMD ["/bin/bash","/init.sh"]
CMD ["/usr/sbin/init"]
[root@docker01 centos7_init]# cat init.sh
#!/bin/bash
systemctl start sshd
systemctl start httpd
/usr/sbin/sshd -D
构建镜像并运行
docker image build -t centos7_ssh_httpd:v1 .
docker run --privileged -d -p 1888:80 -p 1222:22 centos7_ssh_httpd:v1
登陆测试
[root@docker01 ~]# ssh root@10.0.0.11 -p 1222
九, 基于 centos7 构建 随机端口
docker image build -t centos_expose:v1 .
docker run --privileged -d -P centos_expose:v1
十., workdir 工作目录
[root@docker01 dok]# cat dockerfile
FROM centos:latest
RUN curl -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-7.repo
RUN yum -y install iproute openssh-server httpd vim wget bash-completion php php-cli unzip php-mbstring php-gd
RUN echo "12345" | passwd --stdin root
WORKDIR /var/www/html/
RUN curl -O http://static.kodcloud.com/update/download/kodexplorer4.36.zip
RUN unzip kodexplorer4.36.zip
RUN chmod -R 777 /var/www/html/
EXPOSE 22 80
ADD init.sh /init.sh
CMD ["/bin/bash","/init.sh"]
CMD ["/usr/sbin/init"]
[root@docker01 ~]# cat /opt/dockerfile/dok/init.sh
#!/bin/bash
systemctl start httpd
tail -F /var/log/httpd/access_log
构建
docker run --privileged -d -p 80:80 dok:v1
docker exec -it elastic_lehmann /bin/bash
在dockerfile 里所有的路径都是在 workdir 指定的目录下
十一,构建tomcat
[root@db01 tomcat]# cat dockerfile
FROM docker.io/centos:7.4.1708
RUN yum -y install jave-1.8.0-openjdk-devel tomcat tomcat-docs-webapp tomcat-admin-webapps tomcat-webapps && \
yum clean all
EXPOSE 8080/tcp
CMD source /etc/sysconfig/tomcat && /usr/libexec/tomcat/server start
docker build ./ -t docker.io/tomcat:v2
docker run --name tc2 -d -P -p 8080:8080 docker.io/tomcat:v2
docker exec -it tomcat:v2 /bin/bash
十二, nginx 反代tomcat
docker run --name tc1 -d -P -p 8080:8080 docker.io/tomcat:v2
docker inspect tc1
"NetworkID": "75c1e3cc4c51a55c63d49c092e37e504d2163a9dd489553d8bb12c591a97098f",
"EndpointID": "12cce43d64c7cdcfe952c51984f42b0f4a42d9a95567a147175ed752e97f6d75",
"Gateway": "172.17.0.1",
"IPAddress": "172.17.0.2",
"IPPrefixLen": 16,
"IPv6Gateway": "",
"GlobalIPv6Address": "",
"GlobalIPv6PrefixLen": 0,
"MacAddress": "02:42:ac:11:00:02"
}
}
}
}
]
[root@db01 snginx]# cat dockerfile
FROM docker.io/centos:7.4.1708
RUN curl -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-7.repo
ADD tc1.conf /etc/nginx/conf.d/
ADD nginx.repo /etc/yum.repos.d/
ENV path=/bin:/sbin:/usr/bin:/usr/sbin
RUN yum -y install nginx net-tools
EXPOSE 80/tcp
ADD init.sh /init.sh
CMD ["/bin/bash","/init.sh"]
CMD ["/usr/sbin/init"]
cat tc1.conf
server {
listen 80;
server_name ng.ng.com;
location / {
proxy_pass http://tc1.db01.com:8080/;
}
}
docker build ./ -t docker.io/nginx:v3
docker run --name nt1 -P -p 80:80 -d --add-host ng.ng.com:172.17.0.2 docker.io/nginx:v3
测试:
[root@db01 ~]# curl -I http://ng.ng.com:8080
HTTP/1.1 200 OK
Server: Apache-Coyote/1.1
Content-Type: text/html;charset=ISO-8859-1
Transfer-Encoding: chunked
Date: Sun, 24 Mar 2019 15:25:33 GMT
十三, docker卷管理
docker volume ls 查看卷
docker volume create 创建卷
docker inspect nginx-vol 查看卷详情
用卷创建容器
docker run -d -it -p 88:80 --name=nginx-test --mount src=nginx-vol dst=/usr/share/nginx/html nginx1
docker run -d -it --name=nginx-test --mount src=nginx-vol dst=/usr/share/nginx/html nginx
nginx 容器中的/usr/share/nginx/html的内容在 宿主机docker /var/lib/docker/volome/_data里 容器删了之后,文件保存在_date里
删除卷
docker volume rm nginx-vol
注意: 如果没有指定卷,会自动创建,建议使用--mount 创建
示例
创建1个nginx卷,用与挂载nginx
[root@db01 centos7]# docker volume create nginx-vol
nginx-vol
[root@db01 centos7]# docker volume ls
DRIVER VOLUME NAME
local nginx-vol
[root@db01 centos7]# docker volume inspect nginx-vol
[
{
"CreatedAt": "2019-04-05T16:27:47+08:00", #创建时间
"Driver": "local",
"Labels": {},
"Mountpoint": "/var/lib/docker/volumes/nginx-vol/_data", #挂载点
"Name": "nginx-vol",
"Options": {},
"Scope": "local"
}
]
启动容器
docker run -d -it -p 88:80 --name=nginx-test --mount src=nginx-vol dst=/usr/share/nginx/html nginx
--mount src=创建的卷(持久化与宿主机目录关联)
查看nginx-vol目录有nginx安装时的首页文件等.....
[root@db01 snginx]# ll /var/lib/docker/volumes/nginx-vol/_data/
total 12
-rw-r--r-- 1 root root 494 Mar 26 22:04 50x.html
-rw-r--r-- 1 root root 19 Apr 5 17:27 aaa.html
-rw-r--r-- 1 root root 612 Mar 26 22:04 index.html
十四 ,管理应用程序数据 --mount type=bind
docker run --name=nginx-test -d -it -p 88:80 --mount type=bind,src=/app/www,dst=/usr/share/nginx/html nginx:latest
src指定的目录要事先存在,
dst指定的目录里面的内容会隐藏掉,适用于war ,jar包挂载 nfs共享等,直接挂载宿主机目录
验证绑定
docker inspect nginx-test
注意:
1.如果src指定的源目录不存在,会报错,
2.如果dest目录非空,目录里的东西会被隐藏
上传docker镜像到 docker hub
宿主机创建挂载目录
mkdir /app/wwwroot -p
unzip wordpress.unzip 解压到 /app/wwwroot
创建nginx容器
docker run --name=nginx-test -d -it -p 88:80 --mount type=bind,src=/app/wwwroot,dst=/usr/share/nginx/html nginx
十五,官方进行lnmp 运行wrodpress
创建网络lnmp
docker network lnmp
创建myslq容器
docker run -itd \
--name lnmp_mysql \
--net lnmp \
-p 3306:3306 \
--mount src=mysql-vol,dst=/var/lib/mysql \
-e MYSQL_ROOT_PASSWORD=123456 \
mysql --character-set-server=utf8
ALTER USER 'root'@'%' IDENTIFIED WITH mysql_native_password BY '123456';
flush privileges;
创建数据库
docker exec lnmp_mysql sh \
-c 'exec mysql -uroot -p"$MYSQL_ROOT_PASSWORD" -e "create database wp"'
[root@db01 ~]# mysql -uroot -p123456 -h 10.0.0.51
docker logs lnmp_mysql
docker top lnmp_mysql
创建php容器
docker run -itd \
--name lnmp_web \
--net lnmp -p 88:80 \
--mount type=bind,src=/app/wwwroot,dst=/var/www/html richarvey/nginx-php-fpm
浏览器10.0.0.51:88/wordpress 就可以访问wrodpress了
同一自定义网络里可用容器名通信
常用的数据,使用数据卷,因为常访问的数据放在容器里是经过一层驱动.性能会下降, 是docker优化的一部分
十六 ,自定义docker 运行wordpress
php dockerfile
[root@db01 php]# cat Dockerfile
FROM centos7.4_ssh_base:v1
#RUN yun install -y gcc gcc-c++ make gd-devel libxml2-devel libcurl-devel libjpeg-devel libpng-devel
RUN yum install -y zlib libjpeg freetype libpng gd curl zlib-devel \
libxml2-devel libjpeg-devel freetype-devel libpng-devel gd-devel \
curl-devel libjpeg-turbo-devel libcurl-devel libxslt-devel \
libmcrypt-devel mhash mcrypt perl openssl-devel libacl-devel install gcc gcc-c++ \
systemtap-sdt-devel libzip-devel systemtap-sdt-devel make \ && yum clean all && rm -fr /var/cache/yum/*
ADD php-7.2.8.tar.gz /tmp/
RUN cd /tmp/php-7.2.8 && \
./configure --prefix=/usr/local/php \
--enable-calendar \
--enable-sysvsem \
--enable-sysvshm \
--enable-sysvmsg \
--enable-bcmath \
--enable-exif \
--enable-ftp \
--enable-mbstring \
--enable-sockets \
--enable-dtrace \
--enable-soap \
--enable-zip \
--enable-mbregex \
--enable-inline-optimization \
--enable-pcntl \
--enable-pdo \
--enable-opcache \
--enable-xml \
--enable-libzip \
--enable-maintainer-zts \
--enable-fpm \
--enable-mysqlnd \
--with-iconv-dir=/usr/local/libiconv \
--with-gettext \
--with-libxml-dir \
--with-zlib \
--with-kerberos=/usr \
--with-openssl \
--with-mhash \
--with-mysqli=mysqlnd \
--with-pdo-mysql=mysqlnd \
--with-gd \
--with-fpm-acl \
--disable-rpath && \
make && make install && \
cp /usr/local/php/etc/php-fpm.conf.default /usr/local/php/etc/php-fpm.conf && \
sed -i "81a daemonize = no" /usr/local/php/etc/php-fpm.conf && \
cp /usr/local/php/etc/php-fpm.d/www.conf.default /usr/local/php/etc/php-fpm.d/www.conf && \
sed -i "s/listen = 127.0.0.1:9000/listen = 0.0.0.0:9000/g" /usr/local/php/etc/php-fpm.d/www.conf && \
cp /tmp/php-7.2.8/php.ini-production /usr/local/php/lib/php.ini && \
cp /tmp/php-7.2.8/sapi/fpm/init.d.php-fpm /etc/init.d/php-fpm && chmod +x /etc/init.d/php-fpm && \
rm -fr /tmp/php-7.2.8* && yum clean all
WORKDIR /usr/local/php
EXPOSE 9000
CMD ["./sbin/php-fpm","-c","/usr/local/php/etc/php-fpm.conf"]
#构建
[root@db01 php]docker build -t php7.2.8:v3 .
# 查看
[root@db01 php]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
php7.2.8 v3 a1e5da9f7c61 About an hour ago 788MB
# 运行
docker run -itd \
--name lnmp_php \
--net lnmp \
--mount type=bind,src=/app/wwwroot,dst=/usr/local/nginx/html \
php7.2.8:v1
nginx dockerfile
docker
FROM centos7.4_ssh_base:v1
RUN yum install -y gcc gcc-c++ make openssl-devel pcre-devel && yum clean all && rm -fr /var/cache/yum/*
ADD nginx-1.14.2.tar.gz /tmp
RUN cd /tmp/nginx-1.14.2 && \
./configure --prefix=/usr/local/nginx \
--with-http_stub_status_module \
--with-http_ssl_module && \
make && make install && \
rm -fr /tmp/nginx-1.14.2/*
WORKDIR /usr/local/nginx
EXPOSE 80
CMD ["./sbin/nginx","-g","daemon off;"]
构建
docker bulid -t nginx nginx-1.14:v1 .
启动
docker run -itd \
--name=lnmp_nginx \
--net lnmp -p 188:80 \
-v /root/dockefile/runtime/nginx/word.conf:/usr/local/nginx/conf/nginx.conf \
--mount type=bind,src=/app/wwwroot,dst=/usr/local/nginx/html \
nginx-1.14:v1
浏览器测试
mysql dockerfile
[root@db01 mysql4]# cat dockerfile
FROM centos7.4_ssh_base:v1
ADD mysql-5.6.40.tar.gz /opt/
RUN yum install -y cmake make gcc gcc-c++ ncurses-devel autoconf && yum clean all && rm -fr /var/cache/yum/* \
&& useradd mysql -s /sbin/nologin/ -M && mkdir /application && cd /opt/mysql-5.6.40/ && cmake . -DCMAKE_INSTALL_PREFIX=/application/mysql-5.6.40 \
-DMYSQL_DATADIR=/application/mysql-5.6.40/data \
-DMYSQL_UNIX_ADDR=/application/mysql-5.6.40/tmp/mysql.sock \
-DDEFAULT_CHARSET=utf8 \
-DDEFAULT_COLLATION=utf8_general_ci \
-DWITH_EXTRA_CHARSETS=all \
-DWITH_INNOBASE_STORAGE_ENGINE=1 \
-DWITH_FEDERATED_STORAGE_ENGINE=1 \
-DWITH_BLACKHOLE_STORAGE_ENGINE=1 \
-DWITHOUT_EXAMPLE_STORAGE_ENGINE=1 \
-DWITH_ZLIB=bundled \
-DWITH_SSL=bundled \
-DENABLED_LOCAL_INFILE=1 \
-DWITH_EMBEDDED_SERVER=1 \
-DENABLE_DOWNLOADS=1 \
-DWITH_DEBUG=0 && \
make && make install && \
rm -fr /opt/* && \
ln -s /application/mysql-5.6.40/ /application/mysql && \
cp /application/mysql/support-files/mysql.server /etc/init.d/mysqld && chmod +x /etc/init.d/mysqld && \
mkdir /application/mysql-5.6.40/tmp && \
chown -R mysql.mysql /application/mysql-5.6.40/ && \
chown -R mysql.mysql /application/mysql && \
cd /application/mysql/scripts && ./mysql_install_db --user=mysql --basedir=/application/mysql --datadir=/application/mysql/data
COPY docker-entrypoint.sh /usr/local/bin/
ENV PATH=/application/mysql/bin:$PATH
RUN ln -s /usr/local/bin/docker-entrypoint.sh /entrypoint.sh
ENTRYPOINT ["docker-entrypoint.sh"]
CMD ["/application/mysql/bin/mysqld_safe"]
构建镜像
docker build -t mysql:v2 .
启动
docker run -itd --name lnmp_mysql --net lnmp -p 3306:3306 --mount src=mysql-vol,dst=/var/lib/mysql -e MYSQL_ROOT_PASSWORD=123456 mysql-5.6.40:v2
docker exec -it lnmp_mysql bash
mysql
mysql> create database wp;
mysql> grant all on *.* to root@'%' identified by '123456';
mysql> flush privileges;
/** WordPress数据库的名称 */
define('DB_NAME', 'wp');
/** MySQL数据库用户名 */
define('DB_USER', 'root');
/** MySQL数据库密码 */
define('DB_PASSWORD', '123456');
/** MySQL主机 */
define('DB_HOST', 'lnmp_mysql');
/** 创建数据表时默认的文字编码 */
十七Tomcat
[root@db01 tomcat7]# cat dockerfile
FROM centos7.4_ssh_base:v1
ADD jdk-8u151-linux-x64.tar.gz /usr/local/
ADD apache-tomcat-7.0.78.tar.gz /usr/local/
ENV JAVA_HOME=/usr/local/jdk1.8.0_151
ENV PATH=$JAVA_HOME/bin:$JAVA_HOME/jre/bin:$PATH
ENV CLASSPATH=.:$JAVA_HOME/lib:$JAVA_HOME/jre/lib:$JAVA_HOME/lib/tools.jar
ENV CATALINA_BASE=/usr/local/tomcat
ENV PATH=$CATALINA_BASE/bin:$PATH
RUN ln -s /usr/local/apache-tomcat-7.0.78 /usr/local/tomcat && \
ln -s /usr/local/jdk1.8.0_151 /usr/local/jdk
#COPY context.xml server.xml /usr/local/apache-tomcat-7.0.78/conf/
WORKDIR /usr/local/tomcat/lib/
#COPY commons-pool2-2.6.0.jar jedis-2.5.2.jar tomcat-redis-session-manager-2.0.0.jar /usr/local/tomcat/lib/
EXPOSE 8080
WORKDIR /usr/local/tomcat
CMD ["./bin/catalina.sh","run"]
创建 src 目录用户挂载tomcat站点,与 容器/usr/local/apache-tomcat-7.0.78/webapps 关联
mkdir /app/webapps/test -p
[root@db01 ~]# cat /app/webapps/test/index.jsp
<html>
<head><title>TomcatA</title></head>
<body>
<h1><font color="blue">TomcatA.linuxinfo.top</font></h1>
<tablealign="centre" border="1">
<tr>
<td>SessionID</td>
<% session.setAttribute("linuxinfo.top","linuxinfo.top");%>
<td><%=session.getId() %></td>
</tr>
<tr>
<td>Createdon</td>
<td><%=session.getCreationTime() %></td>
</tr>
</table>
</body>
</html>
构建
[root@db01 tomcat7]# docker build -t tomcat7:v1 .
运行
docker run -itd \
--name=tomcat \
-p 8080:8080 \
--mount type=bind,src=/app/webapps/,dst=/usr/local/apache-tomcat-7.0.78/webapps \
tomcat7:v1
浏览器访问测试
Tomcat-redis-session
[root@db01 tomcat-redis]# cat dockerfile
FROM centos7.4_ssh_base:v1
ADD pak1/jdk-8u151-linux-x64.tar.gz /usr/local/
ADD pak1/apache-tomcat-7.0.78.tar.gz /usr/local/
ENV JAVA_HOME=/usr/local/jdk1.8.0_151
ENV PATH=$JAVA_HOME/bin:$JAVA_HOME/jre/bin:$PATH
ENV CLASSPATH=.:$JAVA_HOME/lib:$JAVA_HOME/jre/lib:$JAVA_HOME/lib/tools.jar
ENV CATALINA_BASE=/usr/local/tomcat
ENV PATH=$CATALINA_BASE/bin:$PATH
RUN ln -s /usr/local/apache-tomcat-7.0.78 /usr/local/tomcat && \
ln -s /usr/local/jdk1.8.0_151 /usr/local/jdk
COPY context.xml server.xml /usr/local/apache-tomcat-7.0.78/conf/
COPY pak1 /usr/local/tomcat/lib/
WORKDIR /usr/local/tomcat/lib/
EXPOSE 8080
WORKDIR /usr/local/tomcat
CMD ["./bin/catalina.sh","run"]
[root@db01 ~]# cat /app/webapps/test/index.jsp
<html>
<head><title>TomcatA</title></head>
<body>
<h1><font color="blue">TomcatA.linuxinfo.top</font></h1>
<tablealign="centre" border="1">
<tr>
<td>SessionID</td>
<% session.setAttribute("linuxinfo.top","linuxinfo.top");%>
<td><%=session.getId() %></td>
</tr>
<tr>
<td>Createdon</td>
<td><%=session.getCreationTime() %></td>
</tr>
</table>
</body>
</html>
[root@db01 ~]# cat /app/webappsB/test/index.jsp
<html>
<head><title>TomcatB</title></head>
<body>
<h1><font color="red">TomcatB.linuxinfo.top</font></h1>
<tablealign="centre" border="1">
<tr>
<td>SessionID</td>
<% session.setAttribute("linuxinfo.top","linuxinfo.top");%>
<td><%=session.getId() %></td>
</tr>
<tr>
<td>Createdon</td>
<td><%=session.getCreationTime() %></td>
</tr>
</table>
</body>
</html>
[root@db01 tomcat-redis]# docker run -itd --name=tomcat -p 8080:8080 --mount type=bind,src=/app/webapps/,dst=/usr/local/apache-tomcat-7.0.78/webapps tomcat-redis:v1
[root@db01 tomcat-redis]# docker run -itd --name=tomcatB -p 8080:8080 --mount type=bind,src=/app/webapps/,dst=/usr/local/apache-tomcat-7.0.78/webapps tomcat-redis:v1
测试: