Dockerfile

Dockerfile规则

格式:

1.#为注释
2.指令(大写)内容(小写)
3.尽管指令是大小写不敏感的,但是,我们强烈建议指令用大写,内容用小写表示。
Dockerfile是按顺序执行Dockerfile里的指令集合的(从上到下依次执行)

每个Dockerfile的第一个非注释行指令,必须是 “FROM” 指令,用于为镜像文件构建过程中,指定基准镜像,后续的指令运行于此基准镜像所提供的运行环境中

  	实践中,基准镜像可以是任何可用镜像文件,默认情况下,docker build 会在docker主机(本地)上查找指定的镜像文件,当其在本地不存在时,则会从Docker registry(远端)上拉取所需镜像文件。
4组核心的Dockerfile指令

USER,WORKDIR

[root@localhost ~]# vim /data/dockerfile/Dockerfile
FROM docker.io/llxuan518/nginx:v1.16.6
USER nginx
WORKDIR /usr/share/nginx/html

测试

[root@localhost ~]# cd /data/dockerfile/

[root@localhost dockerfile]# docker build . -t docker.io/llxuan518/nginx:v1.16.6_user_workdir

[root@localhost dockerfile]# docker run --rm -it --name nginx123 llxuan518/nginx:v1.16.6_user_workdir /bin/bash
nginx@fbd87fe92f54:/usr/share/nginx/html$ pwd
/usr/share/nginx/html

ADD,EXPOSE( EXPOSE 向外暴露端口只是声明而已)

说明:
ADD:比COPY命令多的功能是,可以自动解压 .tar*的软件包到目标目录下,可以指定源文件为URL地址。

COPY:从Dockerfile所在目录拷贝目标文件到容器的制定目录下,可以支持通配符,如果拷贝的是目录,只拷贝目录下的子文件子目录。

[root@localhost dockerfile]# vim Dockerfile
FROM docker.io/llxuan518/nginx:v1.16.6
ADD index.html /usr/share/nginx/html/index.html
EXPOSE 80

测试

[root@localhost dockerfile]# docker build ./ -t llxuan518/nginx:v1.16.6_user_index

[root@localhost dockerfile]# docker run --rm -it --name nginx2333  -P llxuan518/nginx:v1.16.6_user_index  /bin/bash

RUN,ENV( RUN 构建镜像过程中运行的命令,ENV 设定环境变量)

ENV功能为设置环境变量

语法有两种

  1. ENV
  2. ENV = ...
    两者的区别就是第一种是一次设置一个,第二种是一次设置多个
[root@localhost dockerfile]# vim Dockerfile
FROM centos:7
ENV VER 9.11.4
RUN yum install bind-$VER -y

查看bind版本号

[root@localhost dockerfile]# yum list bind --show-duplicates

测试

[root@localhost dockerfile]# docker build ./ -t llxuan518/bind:v9.11.4_env

[root@localhost dockerfile]# docker run -it --rm --name bind_env llxuan518/bind:v9.11.4_env /bin/bash

CMD,ENTRYPOINT( CMD 使用镜像启动容器时运行的命令)

[root@localhost dockerfile]# vim Dockerfile
FROM centos:7
RUN yum install httpd -y
CMD ["httpd","-D","FOREGROUND"]

构建测试

[root@localhost dockerfile]# docker build ./ -t llxuan518/httpd:test

后台运行

[root@localhost dockerfile]# docker run --rm -d --name my-http llxuan518/httpd:test

ENTRYPOINT

[root@localhost dockerfile]# vim entrypoint.sh
#!/bin/bash
/shin/nginx -g "daemon off;"

[root@localhost dockerfile]# chmod +x entrypoint.sh

[root@localhost dockerfile]# vim Dockerfile 
FROM centos:7
ADD entrypoint.sh /entrypoint.sh
RUN yum install epel-release -q -y && yum install nginx -y
ENTRYPOINT /entrypoint.sh

测试

[root@localhost dockerfile]# docker build ./ -t llxuan518/nginx:mynginx
它不用-d后台,因为它脚本已经定义,只能前台挂着

[root@localhost dockerfile]# docker run --rm -p87:80 llxuan518/nginx:mynginx

VOLUME ["/var/www/html","data/mysql/data"] 数据卷??

范例:编译安装nginx

[root@long docker]# pwd
/opt/docker

[root@long docker]# ll
总共是4个文件
-rw-r--r-- 1 root root     890 Jul 15 02:17 Dockerfile
-rw-r--r-- 1 root root      24 Jul 14 13:06 index.html
-rw-r--r-- 1 root root 1039530 Apr 21  2020 nginx-1.18.0.tar.gz
-rw-r--r-- 1 root root    2659 Jul 15 01:32 nginx.conf

Dockerfile配置文件(文件不能有中文注释)

[root@long docker]# cat Dockerfile
#Nginx Base Image
FROM centos:7.9.2009
LABEL maintainer="lvxuan xxx@qq.com"
LABEL project="N520"

ENV password="123456"
ENV user="long"
ENV VER=1.18.0
ENV SRC=/usr/local/src
#ENV CPU="$(lscpu | awk '/^CPU\(s\):/{print $NF}')"
ENV CPU=2
ENV GROUP=80
ENV USER=80
ENV PORT=80

RUN groupadd -g ${GROUP} nginx && useradd -s /sbin/nologin -r -g ${GROUP} -u ${USER} nginx
RUN yum install vim -y && yum install -y vim wget tree  lrzsz gcc gcc-c++ automake pcre pcre-devel zlib zlib-devel openssl openssl-devel iproute net-tools iotop
ADD nginx-${VER}.tar.gz ${SRC}
RUN cd ${SRC}/nginx-${VER} && ./configure --prefix=/apps/nginx && make -j ${CPU} && make install
COPY nginx.conf /apps/nginx/conf/
ADD index.html /apps/nginx/html/index.html

VOLUME ["/static","/data1","/data2"]
RUN chown -R nginx.nginx /apps/
EXPOSE ${PORT}

#ENTRYPOINT ["/apps/nginx/sbin/nginx","-g","daemon off;"]
CMD ["/apps/nginx/sbin/nginx","-g","daemon off;"]

执行构建

[root@long docker]# docker build -t harbor.test.com/centos7:v1 .

基于构建的镜像后台启动容器

[root@long docker]# docker run -itd -p 81:80 --name nginx-v3 harbor.test.com/centos7:v1

案例:自定义Tomcat业务镜像

容器里面jdk的/etc/profile文件的环境是给普通用户使用的

镜像叠加形成

先做出CentOS系统base基础镜像

[root@long-ubuntu centos-7.9]# mkdir -p /opt/dockerfile/{web/{nginx,tomcat,jdk,apache},system/{centos,ubuntu,redhat}}

制作Tomcat镜像叠加形成图形

创建目录

[root@long-ubuntu centos-7.9]# mkdir centos-7.9
[root@long-ubuntu centos-7.9]# pwd
/opt/dockerfile/system/centos/centos-7.9
[root@long-ubuntu centos-7.9]# ll
total 16
-rw-r--r-- 1 root root   49 Jul 16 13:29 build-command.sh
-rw-r--r-- 1 root root  275 Jul 16 13:28 Dockerfile

制作dockerfile

[root@long-ubuntu centos-7.9]# cat Dockerfile
# Centos Base Image
FROM centos:7.9.2009
LABEL maintainer="lvxuan xxx@qq.com"

RUN yum install -y vim wget tree lrzsz gcc gcc-c++ automake pcre pcre-devel zlib zlib-devel openssl openssl-devel iproute net-tools iotop
RUN groupadd long -g 2021 && useradd long -u 2021 -g long

写个构建脚本

[root@long-ubuntu centos-7.9]# cat build-command.sh
#!/bin/bash

docker build -t centos7.9-base:v1 .

执行

[root@long-ubuntu centos-7.9]# bash build-command.sh
...
Step 4/4 : RUN groupadd long -g 2021 && useradd long -u 2021 -g long
 ---> Running in 79bcabe19504
Removing intermediate container 79bcabe19504
 ---> 873548f656bc
Successfully built 873548f656bc
Successfully tagged centos7.9-base:v1

基于自己构建出来的CentOS系统镜像构建一个JDK

[root@long-ubuntu jdk]# ll
total 141556
-rw-r--r-- 1 root root        47 Jul 16 13:41 build-command.sh
-rw-r--r-- 1 root root       398 Jul 16 13:40 Dockerfile
-rw-r--r-- 1 root root 144935989 Jul 16 13:40 jdk-8u291-linux-x64.tar.gz

制作dockerfile文件,记得上传jdk压缩包

写个构建脚本

[root@long-ubuntu jdk]# cat build-command.sh
#!/bin/bash

docker build -t jdk-base:v8.291 .

执行

[root@long-ubuntu jdk]# bash build-command.sh
...
Removing intermediate container 0c00720745fe
 ---> ede217fbdd43
Successfully built ede217fbdd43
Successfully tagged jdk-base:v8.291

拷贝docker配置文件出来

root@long-ubuntu:~# docker cp 85e509e1976a:/etc/profile .

改配置文件

[root@long-ubuntu jdk]# vim profile
# jdk
export JAVA_HOME=/usr/local/jdk
export JRE_HOME=$JAVA_HOME/jre
export CLASSPATH=$JAVA_HOME/lib/:$JRE_HOME/lib/
export PATH=$PATH:$JAVA_HOME/bin

修改dockerfile并重新构建

[root@long-ubuntu jdk]# cat Dockerfile
#JDK Base Image
FROM centos7.9-base:v1
LABEL maintainer="lvxuan xxx@qq.com"

ADD jdk-8u291-linux-x64.tar.gz /usr/local/src/
RUN ln -sv /usr/local/src/jdk1.8.0_291 /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

查看当前目录所有

[root@long-ubuntu jdk]# ll
total 141560
-rw-r--r-- 1 root root        47 Jul 16 13:41 build-command.sh
-rw-r--r-- 1 root root       423 Jul 16 14:04 Dockerfile
-rw-r--r-- 1 root root 144935989 Jul 16 13:40 jdk-8u291-linux-x64.tar.gz
-rw-r--r-- 1 root root       731 Jul 16 14:03 profile

执行

[root@long-ubuntu jdk]# bash build-command.sh
...
Removing intermediate container 0c00720745fe
 ---> ede217fbdd43
Successfully built ede217fbdd43
Successfully tagged jdk-base:v8.291

测试验证(这才是正常普通用户也有java权限看到)

[root@long-ubuntu jdk]# docker run -it --rm jdk-base:v8.291 bash
[root@e8074749c67e /]# java -version
java version "1.8.0_291"
Java(TM) SE Runtime Environment (build 1.8.0_291-b10)
Java HotSpot(TM) 64-Bit Server VM (build 25.291-b10, mixed mode)
[root@e8074749c67e /]# su - long
[long@e8074749c67e ~]$ pwd
/home/long
[long@e8074749c67e ~]$ id
uid=2021(long) gid=2021(long) groups=2021(long)
[long@e8074749c67e ~]$ java -version
java version "1.8.0_291"
Java(TM) SE Runtime Environment (build 1.8.0_291-b10)
Java HotSpot(TM) 64-Bit Server VM (build 25.291-b10, mixed mode)

基于上面的JDK基础镜像制作Tomcat-base基础镜像

base里所有的文件,记得上传Tomcat压缩包

[root@ubuntu-1804 tomcat8-base]# ll
-rw-r--r-- 1 root root 10312541 Jul 20 01:40 apache-tomcat-8.5.54.tar.gz
-rw-r--r-- 1 root root       52 Jul 20 01:40 build-command.sh
-rw-r--r-- 1 root root      383 Jul 20 01:38 Dockerfile

写dockerfile文件

[root@long-ubuntu tomcat-base]# vim Dockerfile
#Tomcat Base Image
FROM jdk-base:v8.291
LABEL maintainer="lvxuan xxx@qq.com"

#env
ENV TZ "Asia/Shanghai" ENV LANG en_US.UTF-8
ENV TERM xterm
ENV TOMCAT_MAJOR_VERSION 8
ENV TOMCAT_MINOR_VERSION 8.5.54
ENV CATALINA_HOME /apps/tomcat
ENV APP_DIR ${CATALINA_HOME}/webapps

#tomcat
RUN mkdir /apps
ADD apache-tomcat-8.5.54.tar.gz /apps
RUN ln -sv /apps/apache-tomcat-8.5.54 /apps/tomcat

写个构建脚本

[root@long-ubuntu tomcat-base]# vim build-command.sh
#!/bin/bash

docker build -t tomcat-base:v8.5.54 .

执行

[root@long-ubuntu tomcat-base]# bash build-command.sh
...
Removing intermediate container 8cc5c96df0c7
 ---> 7dc7e5874247
Successfully built 7dc7e5874247
Successfully tagged tomcat-base:v8.5.54

测试 启动并设置退出就删除

[root@long-ubuntu tomcat-base]# docker run -it --rm -p 8080:8080 tomcat-base:v8.5.54 bash

容器启动后需要进入然后启动Tomcat

[root@98559cc53536 /]# /apps/tomcat/bin/catalina.sh run
Using CATALINA_BASE:   /apps/tomcat
Using CATALINA_HOME:   /apps/tomcat
Using CATALINA_TMPDIR: /apps/tomcat/temp
Using JRE_HOME:        /usr/local/jdk/jre

制作Tomcat业务镜像比如app1,app2

准备一个tar包或者说假设从开发哪里得到的tar包

[root@long-ubuntu tomcat-app1]# pwd
/opt/dockerfile/web/tomcat/tomcat-app1

[root@long-ubuntu tomcat]# mkdir tomcat-app1
[root@long-ubuntu tomcat]# cd tomcat-app1/

[root@long-ubuntu tomcat-app1]# mkdir myapps

[root@long-ubuntu tomcat-app1]# echo "Tomcat Web1 Page" > myapps/index.html
[root@long-ubuntu tomcat-app1]# cat myapps/index.html
Tomcat Web1 Page

# 假设(自己制作压缩包)
[root@long-ubuntu tomcat-app1]# tar zcf myapps.tar.gz myapps/*

配置dockerfile文件

# 默认路径
[root@long-ubuntu tomcat-app1]# cat Dockerfile
#Tomcat Web Image
FROM tomcat-base:v8.5.54
LABEL maintainer="lvxuan xxx@qq.com"

ADD myapps/* /apps/tomcat/webapps/myapps/
RUN chown -R long.long /apps/tomcat/

写个构建脚本

[root@long-ubuntu tomcat-app1]# vim build-command.sh
#!/bin/bash
#
docker build -t tomcat-web:app1 .

执行

[root@long-ubuntu tomcat-app1]# bash build-command.sh
...
 ---> ec9da7cf9d4d
Successfully built ec9da7cf9d4d
Successfully tagged tomcat-web:app1

所有

[root@ubuntu-1804 tomcat-app1]# ll
-rw-r--r-- 1 root root   48 Jul 20 01:47 build-command.sh
-rw-r--r-- 1 root root  158 Jul 20 01:46 Dockerfile
drwxr-xr-x 2 root root 4096 Jul 20 01:45 myapp/
-rw-r--r-- 1 root root  146 Jul 20 01:46 myapp.tar.gz

测试

# 启动容器
[root@long-ubuntu tomcat-app1]# docker run -it --rm -p 8080:8080 tomcat-web:app1 bash

# 进入容器启动Tomcat
[root@569f4535d70d /]# /apps/tomcat/bin/catalina.sh run

# false 是关闭自动解包自动部署
<Host name="localhost"  appBase="/data/tomcat/webapps"
            unpackWARs="false" autoDeploy="false">

拷贝容器配置文件出来并修改

root@long-ubuntu:~# docker cp 9c68593ce1bd:/apps/tomcat/conf/server.xml .

重新修改Dockerfile文件指向自定义路径

[root@long-ubuntu tomcat-app1]# cat Dockerfile
#Tomcat Web Image
FROM tomcat-base:v8.5.54
LABEL maintainer="lvxuan xxx@qq.com"

ADD run_tomcat.sh /apps/tomcat/bin
ADD server.xml /apps/tomcat/conf/server.xml
RUN mkdir -p /data/tomcat/webapps
ADD myapps.tar.gz /data/tomcat/webapps/
RUN chown -R long.long /apps/tomcat/ /data/tomcat/webapps

EXPOSE 8080
CMD ["/apps/tomcat/bin/run_tomcat.sh"]

准备tomcat容器启动执行脚本这样就不用Tomcat自带的启动命令了

[root@long-ubuntu tomcat-app1]# cat run_tomcat.sh
#!/bin/bash
echo "1.1.1.1 abc.test.com" >> /etc/hosts

# 不能在使用run,一定要使用start,如果使用run就会一直卡住,这样就不能达到想要的效果,比如有个pid为1的进程
su - long -c "/apps/tomcat/bin/catalina.sh start"
tail -f /etc/hosts

如果dockerfile文件有写启动脚本,用命令行启动就不要加bash直接启动即可

[root@long-ubuntu tomcat-app1]# docker run -it --rm -p 8080:8080 tomcat-web:app1
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.
...
172.17.0.2      387f94ddd9dc
1.1.1.1 abc.test.com

改装后的所有文件

[root@ubuntu-1804 tomcat-app1]# ll
-rw-r--r-- 1 root root   48 Jul 20 01:47 build-command.sh
-rw-r--r-- 1 root root  343 Jul 20 01:54 Dockerfile
drwxr-xr-x 2 root root 4096 Jul 20 01:45 myapp/
-rw-r--r-- 1 root root  146 Jul 20 01:46 myapp.tar.gz
-rw-r--r-- 1 root root  274 Jul 20 01:54 run_tomcat.sh
-rw------- 1 root root 7603 Jul 20 01:53 server.xml

浏览器访问

制作第二个Tomcat-app2

可以直接拷贝方式

[root@long-ubuntu tomcat]# mkdir tomcat-app2
[root@long-ubuntu tomcat]# cp -r tomcat-app1/* tomcat-app2

修改脚本

[root@long-ubuntu tomcat-app2]# vim build-command.sh
#!/bin/bash
#
docker build -t tomcat-web:app2 .

修改tar包里面的信息或者说这个tar是开发给的tar包

[root@long-ubuntu tomcat-app2]# mkdir myapps
[root@long-ubuntu tomcat-app2]# echo "Tomcat Web2 Page" > myapps/index.html
[root@long-ubuntu tomcat-app2]# cat myapps/index.html
Tomcat Web2 Page

# 打包
[root@long-ubuntu tomcat-app2]# tar zcvf myapps.tar.gz myapps
myapps/
myapps/index.html

构建

[root@long-ubuntu tomcat-app2]# bash build-command.sh
...
 ---> 39134c7a2142
Successfully built 39134c7a2142
Successfully tagged tomcat-web:app2

测试

[root@long-ubuntu tomcat-app2]# docker run -it -p 8080:8080 tomcat-web:app2
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.
...
1.1.1.1 abc.test.com

所有的镜像

[root@long-ubuntu ~]# docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
tomcat-web          app2                39134c7a2142        3 minutes ago       886MB
tomcat-web          app1                bfbb82aa0dfe        19 minutes ago      886MB
tomcat-base         v8.5.54             7dc7e5874247        13 hours ago        871MB
jdk-base            v8.291              da87eec5a41e        13 hours ago        857MB
centos7.9-base      v1                  873548f656bc        13 hours ago        497MB
centos              7.9.2009            8652b9f0cb4c        8 months ago        204MB

制作 HAproxy镜像

dockerfile镜像制作流程,先把lua和haproxy编译出来保证其能正常编译不报错在加其他参数

dockerfile配置文件

[root@long-ubuntu haproxy]# cat Dockerfile
#Haproxy Base Image
FROM centos7.9-base:v1
LABEL maintainer="lvxuan xxx@qq.com"

RUN yum -y install gcc gcc-c++ glibc glibc-devel pcre pcre-devel readline-devel openssl openssl-devel systemd-devel \
    net-tools vim iotop bc zip unzip zlib-devel lrzsz tree screen lsof tcpdump wget ntpdate

ADD lua-5.3.5.tar.gz /usr/local/src
RUN cd /usr/local/src/lua-5.3.5 && make linux test

ADD haproxy-2.1.7.tar.gz /usr/local/src/
RUN cd /usr/local/src/haproxy-2.1.7 && make ARCH=x86_64 TARGET=linux-glibc \
    USE_PCRE=1 USE_OPENSSL=1 USE_ZLIB=1 USE_SYSTEMD=1 \
    USE_LUA=1 LUA_INC=/usr/local/src/lua-5.3.5/src/ LUA_LIB=/usr/local/src/lua-5.3.5/src/ && make install PREFIX=/apps/haproxy

RUN ln -s /apps/haproxy/sbin/haproxy /usr/sbin/haproxy

RUN mkdir /apps/haproxy/run
ADD haproxy.cfg /etc/haproxy/haproxy.cfg
ADD run_haproxy.sh /usr/bin
EXPOSE 80 9999

CMD ["/usr/bin/run_haproxy.sh"]

启动脚本(haproxy -f 后面跟以cfg结尾的配置就可以启动)

[root@long-ubuntu haproxy]# cat run_haproxy.sh
#!/bin/bash
echo "1.1.1.1 aa.xx.com" >> /etc/hosts

/apps/haproxy/sbin/haproxy -f /etc/haproxy/haproxy.cfg
tail -f /etc/hosts

构建

[root@long-ubuntu haproxy]# cat build-command.sh
#!/bin/bash
#
docker build -t haproxy-2.1.7-base:v1 .

执行

[root@long-ubuntu haproxy]# bash build-command.sh
...
 ---> 0f268f9b7022
Successfully built 0f268f9b7022
Successfully tagged haproxy-2.1.7-base:v1

所有文件如下

[root@long-ubuntu haproxy]# ll
total 2972
-rw-r--r-- 1 root root      54 Jul 17 08:36 build-command.sh
-rw-r--r-- 1 root root     883 Jul 17 08:33 Dockerfile
-rw-r--r-- 1 root root 2709999 Jul 17 07:52 haproxy-2.1.7.tar.gz
-rw-r--r-- 1 root root     655 Jul 17 08:36 haproxy.cfg
-rw-r--r-- 1 root root  303543 Jul 17 07:52 lua-5.3.5.tar.gz
-rwxr-xr-x 1 root root     126 Jul 17 08:32 run_haproxy.sh*

上传镜像到harbor仓库

[root@long-ubuntu haproxy]# docker tag haproxy-2.1.7-base:v1 harbor.longxuan.vip/m44/haproxy-2.1.7-base:v1

[root@long-ubuntu haproxy]# docker push harbor.longxuan.vip/m44/haproxy-2.1.7-base:v1

扩展 HAproxy + nginx + Tomcat

这个图缺个keepalived的虚拟VIP

nginx修改配置文件

[root@long-ubuntu nginx]# vim nginx.conf

    upstream tomcat-server {
        server 172.31.0.29:8080;
        server 172.31.0.39:8080;
    }
    server {
        listen       80;
        server_name  localhost;
        location / {
            root   html;
            index  index.html index.htm;
        }
        location /myapps {
            proxy_pass http://tomcat-server;
        }

haproxy修改配置文件


[root@long-ubuntu nginx]# cat ../haproxy/haproxy.cfg
global
chroot /apps/haproxy
stats socket /apps/haproxy/run/haproxy.sock mode 600 level admin
uid 99
gid 99
daemon
nbproc 1
pidfile /apps/haproxy/run/haproxy.pid
log 127.0.0.1 local3 info
defaults
option http-keep-alive
option forwardfor
mode http
timeout connect 300000ms
timeout client 300000ms
timeout server 300000ms

listen stats
  mode http
  bind 0.0.0.0:9999
  stats enable
  log global
  stats uri /haproxy-status
  stats auth haadmin:123456

listen web_port
  bind 0.0.0.0:80
  mode http
  log global
  balance roundrobin
  server web1 172.31.0.29:86 check inter 3000 fall 2 rise 5
  server web2 172.31.0.39:86 check inter 3000 fall 2 rise 5

另外一台机器需要安装好docker环境,镜像可以上传到私有仓库然后下载,如果没有私有仓库也可以使用打包镜像方式传到机器

范例:使用save打包

[root@long-ubuntu nginx]# docker save f585766e2f1e > haproxy-2.1.7-base.tar.gz

# 把tar包拷贝到其他机器上
[root@long-ubuntu nginx]# scp haproxy-2.1.7-base.tar.gz 172.31.0.19:/opt

# 在其他机器导入
[root@Bj-Ubuntu ~/harbor]# docker load < /opt/haproxy-2.1.7-base.tar.gz

范例:使用私有仓库

# tomcat-app2镜像上传
[root@long-ubuntu nginx]# docker tag tomcat-web:app2 harbor.longxuan.vip/m44/tomcat-web:app2
[root@long-ubuntu nginx]# docker push harbor.longxuan.vip/m44/tomcat-web:app2

# haproxy镜像上传
[root@long-ubuntu haproxy]# docker tag haproxy-2.1.7-base:v1 harbor.longxuan.vip/m44/haproxy-2.1.7-base:v1
[root@long-ubuntu haproxy]# docker push harbor.longxuan.vip/m44/haproxy-2.1.7-base:v1

# nginx镜像上传
[root@long-ubuntu nginx]# docker tag centos7-nginx-1.18:v1 harbor.longxuan.vip/m44/centos7-nginx-1.18:v1
[root@long-ubuntu nginx]# docker push harbor.longxuan.vip/m44/centos7-nginx-1.18:v1

另外一台机器操作到私有仓库拉取镜像

[root@long-ubuntu ~]# docker pull harbor.longxuan.vip/m44/centos7-nginx-1.18:v1

[root@long-ubuntu ~]# docker pull harbor.longxuan.vip/m44/haproxy-2.1.7-base:v1

[root@long-ubuntu ~]# docker pull harbor.longxuan.vip/m44/tomcat-web:app2

基于三个镜像启动

[root@long-ubuntu ~]# docker run -itd -p 8080:8080 harbor.longxuan.vip/m44/tomcat-web:app2

[root@long-ubuntu ~]# docker run -itd -p 86:80 harbor.longxuan.vip/m44/centos7-nginx-1.18:v1

[root@long-ubuntu ~]# docker run -itd -p 80:80 -p 9999:9999 harbor.longxuan.vip/m44/haproxy-2.1.7-base:v1

浏览器验证

案例:基于官方 alpine 基础镜像制作自定义镜像

[root@long-ubuntu alpine]# ll
total 1040
-rw-r--r-- 1 root root      53 Jul 17 12:21 build-command.sh
-rw-r--r-- 1 root root     847 Jul 17 12:54 Dockerfile
-rw-r--r-- 1 root root 1039530 Jul 17 12:21 nginx-1.18.0.tar.gz
-rw-r--r-- 1 root root    2848 Jul 17 12:34 nginx.conf
-rw-r--r-- 1 root root     175 Jul 17 12:57 static.tar.gz

dockerfile配置文件

[root@long-ubuntu alpine]# cat Dockerfile
#Images alpine create
FROM alpine:latest
LABEL maintainer="lvxuan XXX@qq.com"

#COPY repositories /etc/apk/repositories
RUN sed -i -e 's/http:/https:/' /etc/apk/repositories
RUN apk update && apk add iotop gcc libgcc libc-dev libcurl libc-utils pcre-dev \
    zlib-dev libnfs make pcre pcre2 zip unzip net-tools pstree wget libevent libevent-dev iproute2

ADD nginx-1.18.0.tar.gz /opt/
RUN cd /opt/nginx-1.18.0 && ./configure --prefix=/apps/alpnginx && make && make install && ln -sv /apps/alpnginx/sbin/nginx /usr/bin/

RUN mkdir -p /data/alpnginx
RUN addgroup -g 2021 -S nginx && adduser -s /sbin/nologin -S -D -u 2021 -G nginx nginx
COPY nginx.conf /apps/alpnginx/conf/nginx.conf
ADD static.tar.gz /apps/alpnginx/html

RUN chown nginx.nginx /data/alpnginx/ /apps/alpnginx/ -R

EXPOSE 80 443
CMD ["/apps/alpnginx/sbin/nginx","-g","daemon off;"]

构建脚本

[root@long-ubuntu alpine]# cat build-command.sh
#!/bin/bash
#
docker build -t alpine-nginx-1.18:v1 .

启动测试

[root@long-ubuntu alpine]# docker run -it --rm -p 81:80 alpine-nginx-1.18:v1

案例:基于官方 Ubuntu 基础镜像制作自定义镜像

[root@long-ubuntu ubuntu]# ll
total 1044
-rw-r--r-- 1 root root      57 Jul 17 13:13 buil-command.sh
-rw-r--r-- 1 root root    1138 Jul 17 13:30 Dockerfile
-rw-r--r-- 1 root root 1039530 Jul 17 13:11 nginx-1.18.0.tar.gz
-rw-r--r-- 1 root root    2848 Jul 17 13:12 nginx.conf
-rw-r--r-- 1 root root     814 Jul 17 13:29 sources.list
-rw-r--r-- 1 root root     175 Jul 17 13:12 static.tar.gz

Dockerfile配置文件(目前遇到不是使用官方的apt源就会报错)

[root@long-ubuntu ubuntu]# cat Dockerfile
#Images ubuntu-18.04 create
FROM ubuntu:18.04
LABEL maintainer="lvxuan xxx@qq.com"

COPY sources.list /etc/apt/sources.list
RUN apt update && apt install -y iproute2 ntpdate tcpdump telnet traceroute \
    nfs-kernel-server nfs-common lrzsz tree openssl libssl-dev libpcre3 libpcre3-dev \
    zlib1g-dev ntpdate tcpdump telnet traceroute gcc openssh-server lrzsz tree \
    openssl libssl-dev libpcre3 libpcre3-dev zlib1g-dev ntpdate tcpdump telnet \
    traceroute iotop unzip zip make \
    && touch /tmp/linux.txt

ADD nginx-1.18.0.tar.gz /usr/local/src
RUN cd /usr/local/src/nginx-1.18.0 \
    && ./configure --prefix=/apps/ubtnginx \
    && make && make install && ln -sv /apps/ubtnginx/sbin/nginx /usr/bin \
    && rm -rf /usr/local/src/nginx-1.18.0 \
    && rm -rf /usr/local/src/nginx-1.18.0.tar.gz

ADD nginx.conf /apps/ubtnginx/conf/nginx.conf
ADD static.tar.gz /apps/ubtnginx/html

RUN groupadd -g 2022 nginx && useradd -g nginx -s /usr/sbin/nologin -u 2022 nginx \
    && mkdir -p /data/ubtnginx \
    && chown -R nginx.nginx /apps/ubtnginx /data/ubtnginx

EXPOSE 80 443
CMD ["/apps/ubtnginx/sbin/nginx","-g","daemon off;"]

构建脚本

[root@long-ubuntu ubuntu]# cat buil-command.sh
#!/bin/bash
#
docker build -t ubuntu-18.04-nginx-18:v1 .

执行构建

[root@long-ubuntu ubuntu]# bash buil-command.sh
 ---> 6302f193fb87
Successfully built 6302f193fb87
Successfully tagged ubuntu-18.04-nginx-18:v1

启动容器验证

[root@long-ubuntu ubuntu]# docker run -it --rm -p 82:80 ubuntu-18.04-nginx-18:v1

原文地址:https://www.cnblogs.com/xuanlv-0413/p/15168116.html

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


&lt;servlet&gt; &lt;servlet-name&gt;tomcatpooljsp&lt;/servlet-name&gt; &lt;jsp-file&gt;/WEB-INF/tomcatpool.jsp&lt;/jsp-file&gt; &lt;/servlet&gt; &lt;servlet-mapping&gt; &lt;servlet-name&gt;tomcatpooljsp&lt;/servlet-nam...
遵循Java Servlet 规范第4节中的建议 ,Apache Tomcat实现了系统地重新加载Java类的方法,以允许在不重新启动整个服务器的情况下更新应用程序的组件。 此功能对于开发非常重要,因为事实证明,随着服务器启动和重启时间的延长,这会严重浪费开发人员的时间。实际上,Java EE堆栈应用服务器的服务器重新启动时间很慢,这是Tomcat广泛用于个人和企业级项目的推动力之一。但是,即使Tomcat也无法 像运行时重新加载应用程序一样快地启动。通过仅重新加载隔离的应用程序的更改的类,开发人员..
JMX(Java管理扩展)是一项非常强大的技术,可让您管理,监视和配置Tomcat MBean。如果您是Tomcat管理员,那么您应该熟悉如何在tomcat中启用JMX来监视堆内存,线程,CPU使用率,类以及配置各种MBean。在本文中,我将讨论如何使用JConsole启用并连接到Tomcat。我假设您已经安装了Tomcat(如果没有);您可以参考安装指南。转到安装了Tomcat的路径 转到bin文件夹 将文件创建为“ setenv.sh” 使用vi编辑器修改文件并添加以下内容
总览介绍 建立 取得Java 获取TomCat 将TomCat安装为Windows服务 将TomCat设置为Linux服务(系统化) 使用Nginx作为反向代理 基本用法 手动启动和停止TomCat 验证TomCat服务器正在运行 服务静态文件 服务Java服务器页面(JSP) 修改设定 部署网络应用 使用管理网页界面 创建一个TomCat管理员用户 访问管理网络应用 管理网络应用 结论 参考链接介绍在最简单的概念中,To.
PSI Probe是Lambda Probe的社区驱动分支,使用相同的开源许可证(GPLv2)分发。它旨在替换和扩展Tomcat Manager,从而使管理和监视Apache Tomcat实例更加容易。与许多其他服务器监视工具不同,PSI Probe不需要对现有应用程序进行任何更改。它通过可访问Web的界面提供所有功能,只需将其部署到服务器即可使用。这些功能包括:请求:即使在每个应用程序的基础上,实时监视流量。 会话:浏览/搜索属性,查看上一个IP,到期,估计大小。 JSP:浏览,查看源代码,进
监视和管理Tomcat目录介绍 启用JMX远程 使用JMX远程Ant任务管理Tomcat JMXAccessorOpenTask-JMX打开连接任务 JMXAccessorGetTask:获取属性值Ant任务 JMXAccessorSetTask:设置属性值Ant任务 JMXAccessorInvokeTask:调用MBean操作Ant任务 JMXAccessorQueryTask:查询MBean Ant任务 JMXAccessorCreateTask:远程创建MBean Ant任
1.tomcat与jetty都是一种servlet引擎,他们都支持标准的servlet规范和javaEE规范
“The origin server did not find a current representation for the target resource...
Artifacts是maven中的一个概念,表示某个module要如何打包,例如war exploded、war、jar、ear等等这种打包形式;
使用 IDEA 编辑器开发项目十分便捷,这里介绍使用 IDEA 编辑器添加 Tomcat
这篇“servlet和tomcat的知识点有哪些”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅...
这篇文章主要讲解了“Tomcat管理平台实例分析”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Tomcat管理平...
本文小编为大家详细介绍“tomcat虚拟主机怎么配置”,内容详细,步骤清晰,细节处理妥当,希望这篇“tomcat虚拟主机怎么配置”文章能帮助大家解决疑惑,下面跟
今天小编给大家分享一下tomcat相关配置与eclipse集成的方法的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家
这篇“Tomcat之web应用的目录组成结构是怎样的”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,
今天小编给大家分享一下tomcat目录映射的方法的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大...
这篇“tomcat的环境怎么配置”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文...
环境:tomcat:apache-tomcat-7.0.35 cactiEZ:10.1系统:centos5.6_x64一、配置tomcat服务器1、添加账号vim tomcat-users.xml 重启tomcat2、安装snmp协议yum...
一、 软环下载地址软件链接地址https://files.cnblogs.com/files/jinrf/openssl-1.0.2-latest.tar.gzhttps://files.cnblogs.com/files/jinrf/apr-util-1.6...