Docker 学习3

二十一、容器数据卷使用

1. 数据卷介绍
Docker将运用与运行的环境打包形成容器运行, Docker容器产生的数据,如果不通过docker commit生成新的镜像,使得数据做为镜像的一部分保存下来, 那么当容器删除后,数据自然也就没有了。 为了能保存数据在Docker中我们使用卷。

卷就是目录或文件,存在于一个或多个容器中,将我们容器内的目录,挂载到Linux上,但卷不属于联合文件系统(Union FileSystem),因此能够绕过联合文件系统提供一些用于持续存储或共享数据的特性:。
在这里插入图片描述
小结:卷的设计目的就是数据的持久化,完全独立于容器的生存周期,因此Docker不会在容器删除时删除其挂载的数据卷,容器间也可以是数据共享。

2、使用数据卷
运行容器,指定挂载数据卷命令:

docker run -it -v 主机目录:容器目录   (类似端口做的映射)

测试:

docker run -it -v /home/zl/ceshi:/home centos /bin/bash    #挂载命令
docker inspect f3c7fa44b1bb   #查看该容器id的元数据

在这里插入图片描述
测试卷是否成功:
在这里插入图片描述
即使容器停止运行或者容器删除,仍然可以实现数据同步,本地的数据卷不会丢失。
容器卷的好处:我们以后修改只需要在本地修改即可,容器内会自动同步。

二十二、安装MySQL

下载MySQL

#1、拉取镜像
docker pull mysql  
#2、运行容器,需要做数据挂载(注意,需要花费两倍存储空间)
#安装启动mysql,需要配置密码的,这是注意点!
#官方测试:docker run --name some-mysql -e MYSQL_ROOT_PASSWORD=my-secret-pw -d mysql:tag   
真正启动我们的mySQL命令(包含很多的操作)
docker run -d -p 6603:3306 -v /home/mysql/conf:/etc/mysql/conf.d -v /home/mysql/data:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=123456 --name mysql01 mysql:5.7
-d 后台运行
-p 端口映射
-v 卷挂载
-e 是配置环境
--name 容器命名

测试:
在本地创建一个数据库,查看一下我们映射的路径是否ok。
假设我们将容器删除,本地挂载的数据卷不会消失,这就实现容器数据持久话的作用。

二十三、具名挂载和匿名挂载

匿名挂载

匿名挂载命令:
docker run -d -P --name nginx01 -v /etc/nginx nginx
-P 让系统随机映射端口
-v 后面没有填宿主机的目录
docker volume ls   #查看数据卷
local     b65d0b078ece29097541a69a77bc618c8da78683fa66d725c380f43894cbc83e
#这里发现,这种就是匿名挂载,我们在 -v 只写了容器内的路径,没有写容器外的路径。

具名挂载

具名挂载命令:
docker run -d --name nginx001 -v juming-nginx:/etc/nginx nginx
通过-v 卷名:容器内路径
查看一下这卷
”[[e[31docker volume ls
DRIVER    VOLUME NAME
local     b65d0b078ece29097541a69a77bc618c8da78683fa66d725c380f43894cbc83e
local     juming-nginx

在这里插入图片描述
所有的docker容器内的卷,没有指定目录的情况下都是在/var/lib/docker/volumes/*****/_data
我们通过具名挂载可以方便的找到我们的一个卷,大多数情况使用具名挂载。
匿名挂载,具名挂载,指定路径挂载的命令区别如下:
-v 容器内路径 #匿名挂载
-v 卷名:容器内路径 #具名挂载
-v /宿主机路径:容器内路径 #指定路径挂载
指定数据卷映射的相关参数:
ro —— readonly 只读。设置了只读则只能操作宿主机的路径,不能操作容器中的对应路径。
rw ----- readwrite 可读可写

[root@iZwz99sm8v95sckz8bd2c4Z ~]# docker run -d -P --name nginx02 -v juming-nginx:/etc/nginx:ro nginx
[root@iZwz99sm8v95sckz8bd2c4Z ~]# docker run -d -P --name nginx02 -v juming-nginx:/etc/nginx:rw nginx

二十四、数据卷只Dockerfile

Dockerfile就是用来构建docker镜像的构建文件。就是命令脚本!通过这个脚本可以生成镜像,镜像是一层一层的,脚本一个个的命令,每个命令都是一层!
之前我们是用commit,现在用这种Dockerfile方式

#使用Dockerfile构建一个新的镜像,dockerfile01文件的内容,匿名挂载了volume01和volume02两个目录;创建的这个dockerfile文件名字可以随意,建议用Dockerfile。
#文件中的内容为: 指令(都是大写的)   参数
FROM centos

VOLUME ["volume01","volume02"]

CMD echo "------end------"
CMD /bin/bash
这里的每个命令,就是镜像的一层

通过这个Dockerfile构建镜像

             构建   指定用的dockerfile文件  生成镜像的命名   存放的地址
”[[e[31docker build -f dockerfile1         -t /zl/centos   .
invalid argument "/zl/centos" for "-t, --tag" flag: invalid reference format
See 'docker build --help'.[[e[31docker build -f dockerfile1 -t zl/centos .
Sending build context to Docker daemon  2.048kB
Step 1/4 : FROM centos
 ---> 5d0da3dc9764
Step 2/4 : VOLUME ["volume01","volume02"]
 ---> [Warning] IPv4 forwarding is disabled. Networking will not work.
 ---> Running in d96e7ce20f85
Removing intermediate container d96e7ce20f85
 ---> bc26018ba83e
Step 3/4 : CMD echo "------end------"
 ---> [Warning] IPv4 forwarding is disabled. Networking will not work.
 ---> Running in a92d325daa5f
Removing intermediate container a92d325daa5f
 ---> 2cbc28dd0988
Step 4/4 : CMD /bin/bash
 ---> [Warning] IPv4 forwarding is disabled. Networking will not work.
 ---> Running in 400b76e54f9f
Removing intermediate container 400b76e54f9f
 ---> 84ffe390e1fd
Successfully built 84ffe390e1fd
Successfully tagged zl/centos:latest

生成的镜像如图:
在这里插入图片描述
启动自己写的镜像:

[[e[31docker run -it 84ffe390e1fd  /bin/bash
WARNING: IPv4 forwarding is disabled. Networking will not work.
[root@fcfe9934c1f3 /]# ls -l
total 0
lrwxrwxrwx.   1 root root   7 Nov  3  2020 bin -> usr/bin
drwxr-xr-x.   5 root root 360 Dec 22 07:28 dev
drwxr-xr-x.   1 root root  66 Dec 22 07:28 etc
drwxr-xr-x.   2 root root   6 Nov  3  2020 home
lrwxrwxrwx.   1 root root   7 Nov  3  2020 lib -> usr/lib
lrwxrwxrwx.   1 root root   9 Nov  3  2020 lib64 -> usr/lib64
drwx------.   2 root root   6 Sep 15 14:17 lost+found
drwxr-xr-x.   2 root root   6 Nov  3  2020 media
drwxr-xr-x.   2 root root   6 Nov  3  2020 mnt
drwxr-xr-x.   2 root root   6 Nov  3  2020 opt
dr-xr-xr-x. 242 root root   0 Dec 22 07:28 proc
dr-xr-x---.   2 root root 162 Sep 15 14:17 root
drwxr-xr-x.  11 root root 163 Sep 15 14:17 run
lrwxrwxrwx.   1 root root   8 Nov  3  2020 sbin -> usr/sbin
drwxr-xr-x.   2 root root   6 Nov  3  2020 srv
dr-xr-xr-x.  13 root root   0 Dec 13 02:22 sys
drwxrwxrwt.   7 root root 171 Sep 15 14:17 tmp
drwxr-xr-x.  12 root root 144 Sep 15 14:17 usr
drwxr-xr-x.  20 root root 262 Sep 15 14:17 var
drwxr-xr-x.   2 root root   6 Dec 22 07:28 volume01  这两个目录就是我们生成镜像的时候,自动挂载的数据卷目录。
drwxr-xr-x.   2 root root   6 Dec 22 07:28 volume02

这个卷和外部一定有一个同步的目录
在这里插入图片描述
用docker inspect 容器id 查找该容器的linux的卷位置。
在这里插入图片描述
测试一下刚才在容器内创建的文件同步至宿主机:
在这里插入图片描述
这种方式我们未来使用的十分多,因为我们通常会构建自己的镜像。
假设构建镜像时候没有挂载卷,要自动镜像挂载 ,即 -v

二十五、数据卷容器

在这里插入图片描述
在这里插入图片描述
创建docker02继承docker01,通过参数–volumes-from,设置容器2和容器1建立数据卷挂载关系。

命令如下:
”[[e[31docker run  -it --name docker02 --volumes-from docker01 zl/centos
WARNING: IPv4 forwarding is disabled. Networking will not work.
[root@e15d3f003189 /]# ls -l
total 0
lrwxrwxrwx.   1 root root   7 Nov  3  2020 bin -> usr/bin
drwxr-xr-x.   5 root root 360 Dec 22 08:05 dev
drwxr-xr-x.   1 root root  66 Dec 22 08:05 etc
drwxr-xr-x.   2 root root   6 Nov  3  2020 home
lrwxrwxrwx.   1 root root   7 Nov  3  2020 lib -> usr/lib
lrwxrwxrwx.   1 root root   9 Nov  3  2020 lib64 -> usr/lib64
drwx------.   2 root root   6 Sep 15 14:17 lost+found
drwxr-xr-x.   2 root root   6 Nov  3  2020 media
drwxr-xr-x.   2 root root   6 Nov  3  2020 mnt
drwxr-xr-x.   2 root root   6 Nov  3  2020 opt
dr-xr-xr-x. 247 root root   0 Dec 22 08:05 proc
dr-xr-x---.   2 root root 162 Sep 15 14:17 root
drwxr-xr-x.  11 root root 163 Sep 15 14:17 run
lrwxrwxrwx.   1 root root   8 Nov  3  2020 sbin -> usr/sbin
drwxr-xr-x.   2 root root   6 Nov  3  2020 srv
dr-xr-xr-x.  13 root root   0 Dec 13 02:22 sys
drwxrwxrwt.   7 root root 171 Sep 15 14:17 tmp
drwxr-xr-x.  12 root root 144 Sep 15 14:17 usr
drwxr-xr-x.  20 root root 262 Sep 15 14:17 var
drwxr-xr-x.   2 root root   6 Dec 22 07:54 volume01
drwxr-xr-x.   2 root root   6 Dec 22 07:54 volume02

测试docker01创建的文件会同步到docker02
在这里插入图片描述
创建docker03继承docker01,数据也是可以同步的。
在这里插入图片描述
再测试:删除docker01,docker02和docker03依旧可以访问文件。
在这里插入图片描述
所以,即使删除了容器,也不会影响到其他容器的文件,是拷贝的概念。
在这里插入图片描述
用途:多个mysql、redis实现数据共享。
在这里插入图片描述
结论:
容器之间配置信息的传递,数据卷容器的生命周期一直持续到没有人使用容器为止。
但是一旦持久化到了本地,这个时候,本地下数据不会删除。

二十六、DockerFile介绍

Dockerfile就是用来构建docker镜像的构建文件。就是命令脚本!
构建步骤:

	1、编写一个dockerfile 文件
	2、docker build 构建成为一个镜像
	3、docker run 运行镜像
	4、docker push 发布镜像(发布的两个地方:DockerHub、阿里云镜像仓库)

DockerFile构建过程
基础知识:
1、每个保留关键字(指令)都必须是大写字母
2、执行从上到下顺序执行
3、#表示注释
4、每个指令都会创建提交一个新的镜像层,并提交!
镜像结构图:
在这里插入图片描述
dockerfile是面向开发的,我们以后要发布项目,做镜像,就是要编写dokerfile文件,这个文件十分简单。

小结:
DockerFile:它就是一个构建文件,定义了一切的步骤;
DockerImages:通过DockerFile构建生成的镜像,最终发布运行的产品。
Docker容器:容器就是镜像运行起来提供服务的。

二十七、DockerFile指令说明

指令说明
FROM指定基础镜像
MAINTAINER镜像是谁写的,姓名+邮箱
RUN镜像构建的时候需要运行的命令
ADD将本地文件添加到容器中,tar类型文件会自动解压(网络压缩资源不会被解压),可以访问网络资源,类似wget
WORKDIR镜像的工作目录
VOLUME挂载的目录
EXPOSE保留端口配置
CMD指定这个容器启动的时候要运行的命令(只有最后一个会生效)
ENTRYPOINT指定这个容器启动的时候要运行的命令,可以追加命令
ONBUILD当构建一个被继承DockerFile,这个时候就会运行ONBUILD的指令,触发指令
COPY功能类似ADD,但是是不会自动解压文件,也不能访问网络资源
ENV构建的时候设置环境变量

二十八、实战:构建自己的centos

Docker Hub中99%镜像都是从这个基础镜像过来的,即FROM scrach,然后配置自己需要的软件进行构建。
创建自己的centos

#1、编写dockerFile文件
FROM centos
MAINTAINER zhanglong<1299823875@qq.com>

ENV MYPATH /usr/local
WORKDIR $MYPATH

RUN yum -y install vim
RUN yum -y install net-tools

EXPOSE 80

CMD echo $MYPATH
CMD echo "------end------"
CMD /bin/bash
#2、通过以上的配置文件构建我们的镜像
#通过命令构建:(注意:当报错时可能是输入法出错了)
docker build -f mydockerFile-centos -t mydockerFileCentos:0.1 .

逐行解释该Dockerfile文件的指令:

FROM centos:该image文件继承官方的centos,后面加冒号如centos:7,用于指定镜像的版本
ENV MYPATH /usr/local:设置环境变量MYPATH ,后面有用到
WORKDIR $MYPATH:直接使用上面设置的环境变量,指定/usr/local为工作目录
RUN yum -y install vim和RUN yum -y install net-tools:在/usr/local目录下,运行yum -y install vim和yum -y install net-tools命令安装工具,注意安装后的所有依赖和工具都会打包到image文件中
EXPOSE 80:将容器80端口暴露出来,允许外部连接这个端口
CMD:指定容器启动的时候运行命令
通过这个dockerfile构建镜像,构建镜像命令:docker build -f dockerfile文件路径 -t 镜像名[:版本号] .(这里有个小点.)

上面命令中,-t参数用来指定 image 文件的名字,后面还可以用冒号指定标签。如果不指定,默认的标签就是latest。最后的那个点表示 Dockerfile 文件所在的路径,上例是当前路径,所以是一个点。

执行build命令生成image文件,如果执行成功,可以通过docker images来查看新生成的镜像文件。

下面生成容器,测试相关命令,查看默认工作目录是否设置成功,vim和net-tools工具是否下载成功。

[root@iZwz99sm8v95sckz8bd2c4Z dockerfile]# docker run -it mycentos:1.0
[root@e548efe82b30 local]# pwd
/usr/local
#net-tools工具提供ifconfig命令
[root@e548efe82b30 local]# ifconfig
eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 172.17.0.3  netmask 255.255.0.0  broadcast 172.17.255.255
        ether 02:42:ac:11:00:03  txqueuelen 0  (Ethernet)
        RX packets 0  bytes 0 (0.0 B)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 0  bytes 0 (0.0 B)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

lo: flags=73<UP,LOOPBACK,RUNNING>  mtu 65536
        inet 127.0.0.1  netmask 255.0.0.0
        loop  txqueuelen 1000  (Local Loopback)
        RX packets 0  bytes 0 (0.0 B)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 0  bytes 0 (0.0 B)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

[root@e548efe82b30 local]# vi test.txt 
[root@e548efe82b30 local]# cat test.txt
Hello world!

另外,我们通过docker history 容器id命令来查看镜像的构建步骤

[root@iZwz99sm8v95sckz8bd2c4Z dockerfile]# docker history 1185a46e3a12
IMAGE          CREATED          CREATED BY                                      SIZE      COMMENT
1185a46e3a12   13 minutes ago   /bin/sh -c #(nop)  CMD ["/bin/sh" "-c" "/bin…   0B        
83459c404586   13 minutes ago   /bin/sh -c #(nop)  CMD ["/bin/sh" "-c" "echo…   0B        
9b8661c812c4   13 minutes ago   /bin/sh -c #(nop)  CMD ["/bin/sh" "-c" "echo…   0B        
2064c1540e8e   13 minutes ago   /bin/sh -c #(nop)  EXPOSE 80                    0B        
1b15d4a1fd5e   13 minutes ago   /bin/sh -c yum -y install net-tools             23.3MB    
9336c20f0b6d   13 minutes ago   /bin/sh -c yum -y install vim                   58MB      
7d46880ef0fd   14 minutes ago   /bin/sh -c #(nop) WORKDIR /usr/local            0B        
e27a56b5247b   14 minutes ago   /bin/sh -c #(nop)  ENV MYPATH=/usr/local        0B        
b2b6851e55fa   14 minutes ago   /bin/sh -c #(nop)  MAINTAINER ethan<12583985…   0B        
300e315adb2f   3 weeks ago      /bin/sh -c #(nop)  CMD ["/bin/bash"]            0B        
<missing>      3 weeks ago      /bin/sh -c #(nop)  LABEL org.label-schema.sc…   0B        
<missing>      3 weeks ago      /bin/sh -c #(nop) ADD file:bd7a2aed6ede423b7…   209MB

二十九、CMD和ENTRYPOINT的区别

写CMD的dockerFile

FROM centos
CMD ["ls","-a"]

再build构建镜像

[[e[docker build -f dockerfile-CMD-test -t cmdtst .[[e[31docker images
REPOSITORY    TAG       IMAGE ID       CREATED          SIZE
cmdtst        latest    4dc544b82f59   17 minutes ago   231MB
<none>        <none>    0012da1eef3b   29 minutes ago   231MB
nginx         latest    f6987c8d6ed5   47 hours ago     141MB
tomcat        latest    24207ccc9cce   2 weeks ago      680MB
hello-world   latest    feb5d9fea6a5   3 months ago     13.3kB
centos        latest    5d0da3dc9764   3 months ago     231MB

测试运行

[[e[31docker run cmdtst 
WARNING: IPv4 forwarding is disabled. Networking will not work.
.
..
.dockerenv
bin
dev
etc
home
lib
lib64
lost+found
media
mnt
opt
proc
root
run
sbin
srv
sys
tmp
usr
var
发现我们的ls-a命令生效

想追加一个命令 -l 即 ls -al

docker run cmdtst -l
WARNING: IPv4 forwarding is disabled. Networking will not work.
docker: Error response from daemon: OCI runtime create failed: container_linux.go:380: starting container process caused: exec: "-l": executable file not found in $PATH: unknown.
#CMD的情况下 -l替换了CMD["ls","-a"]命令,-l不是命令所以报错[[e[31docker run cmdtst ls -al
WARNING: IPv4 forwarding is disabled. Networking will not work.
^Ctotal 0
drwxr-xr-x.   1 root root   6 Dec 23 02:46 .
drwxr-xr-x.   1 root root   6 Dec 23 02:46 ..
-rwxr-xr-x.   1 root root   0 Dec 23 02:46 .dockerenv
lrwxrwxrwx.   1 root root   7 Nov  3  2020 bin -> usr/bin
drwxr-xr-x.   5 root root 340 Dec 23 02:46 dev
drwxr-xr-x.   1 root root  66 Dec 23 02:46 etc
drwxr-xr-x.   2 root root   6 Nov  3  2020 home
lrwxrwxrwx.   1 root root   7 Nov  3  2020 lib -> usr/lib
lrwxrwxrwx.   1 root root   9 Nov  3  2020 lib64 -> usr/lib64
drwx------.   2 root root   6 Sep 15 14:17 lost+found
drwxr-xr-x.   2 root root   6 Nov  3  2020 media
drwxr-xr-x.   2 root root   6 Nov  3  2020 mnt
drwxr-xr-x.   2 root root   6 Nov  3  2020 opt
dr-xr-xr-x. 228 root root   0 Dec 23 02:46 proc
dr-xr-x---.   2 root root 162 Sep 15 14:17 root
drwxr-xr-x.  11 root root 163 Sep 15 14:17 run
lrwxrwxrwx.   1 root root   8 Nov  3  2020 sbin -> usr/sbin
drwxr-xr-x.   2 root root   6 Nov  3  2020 srv
dr-xr-xr-x.  13 root root   0 Dec 13 02:22 sys
drwxrwxrwt.   7 root root 171 Sep 15 14:17 tmp
drwxr-xr-x.  12 root root 144 Sep 15 14:17 usr
drwxr-xr-x.  20 root root 262 Sep 15 14:17 var
完整的命令即可替换了,如上的命令。

写ENTRYPOINT的dockerFile

FROM centos
ENTRYPOINT ["ls","-a"]

再build构建镜像

[[e[31docker build -f dockerfile-cmd-entrypoint -t entrypoint-test .
Sending build context to Docker daemon  4.096kB
Step 1/2 : FROM centos
 ---> 5d0da3dc9764
Step 2/2 : ENTRYPOINT ["ls","-a"]
 ---> [Warning] IPv4 forwarding is disabled. Networking will not work.
 ---> Running in 927b3ccc8cb4
Removing intermediate container 927b3ccc8cb4
 ---> d43b235a2232
Successfully built d43b235a2232
Successfully tagged entrypoint-test:latest

测试运行

[[e[31docker run entrypoint-test
WARNING: IPv4 forwarding is disabled. Networking will not work.
.
..
.dockerenv
bin
dev
etc
home
lib
lib64
lost+found
media
mnt
opt
proc
root
run
sbin
srv
sys
tmp
usr
var

追加-l测试运行

[[e[31docker run entrypoint-test -l
WARNING: IPv4 forwarding is disabled. Networking will not work.
total 0
drwxr-xr-x.   1 root root   6 Dec 23 02:58 .
drwxr-xr-x.   1 root root   6 Dec 23 02:58 ..
-rwxr-xr-x.   1 root root   0 Dec 23 02:58 .dockerenv
lrwxrwxrwx.   1 root root   7 Nov  3  2020 bin -> usr/bin
drwxr-xr-x.   5 root root 340 Dec 23 02:58 dev
drwxr-xr-x.   1 root root  66 Dec 23 02:58 etc
drwxr-xr-x.   2 root root   6 Nov  3  2020 home
lrwxrwxrwx.   1 root root   7 Nov  3  2020 lib -> usr/lib
lrwxrwxrwx.   1 root root   9 Nov  3  2020 lib64 -> usr/lib64
drwx------.   2 root root   6 Sep 15 14:17 lost+found
drwxr-xr-x.   2 root root   6 Nov  3  2020 media
drwxr-xr-x.   2 root root   6 Nov  3  2020 mnt
drwxr-xr-x.   2 root root   6 Nov  3  2020 opt
dr-xr-xr-x. 234 root root   0 Dec 23 02:58 proc
dr-xr-x---.   2 root root 162 Sep 15 14:17 root
drwxr-xr-x.  11 root root 163 Sep 15 14:17 run
lrwxrwxrwx.   1 root root   8 Nov  3  2020 sbin -> usr/sbin
drwxr-xr-x.   2 root root   6 Nov  3  2020 srv
dr-xr-xr-x.  13 root root   0 Dec 13 02:22 sys
drwxrwxrwt.   7 root root 171 Sep 15 14:17 tmp
drwxr-xr-x.  12 root root 144 Sep 15 14:17 usr
drwxr-xr-x.  20 root root 262 Sep 15 14:17 var

小结:从以上测试我们可以发现,追加的命令ENTRYPOINT是直接拼接在后面的,CMD后面家的命令是直接替换原先的命令的。
在这里插入图片描述
在这里插入图片描述

三十、DockerFile制作tomcat镜像

1、准备镜像文件,tomcat压缩包、jdk压缩包!
2、编写DockerFile文件,官方命名Dockerfile,build会自动寻找这个文件,就不需要-f指定了!
FROM centos
MAINTAINET zhanglong<1299823875@qq.com>

COPY readme.txt /usr/local/readme.txt

ADD jdk-17_linux-x64_bin.tar.gz /usr/local/
ADD apache-tomcat-10.0.14.tar.gz /usr/local/

ENV MYPATH /usr/local
WORKDIR $MYPATH

ENV JAVA_HOME /usr/local/jdk-17.0.1
ENV CLASSPATH $JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
ENV CATLINA /usr/local/apache-tomcat-10.0.14
ENV CATLINA_BASH /usr/local/apache-tomcat-10.0.14
ENV PATH $PATH:$JAVA_HOME/bin:$CATLINA_HOME/lib:$CATLINA_HOME/bin

EXPOSE 8080

CMD /usr/local/apache-tomcat-10.0.14/bin/startup.sh && tail -F /url/local/apache-tomcat-10.0.14/bin/logs/catalina.out


3、构建镜像

[[e[31docker build -t dittomcat .  #构建镜像命令 (不用-f)
Sending build context to Docker daemon  508.2MB
Step 1/14 : FROM centos
 ---> 5d0da3dc9764
Step 2/14 : MAINTAINER zhanglong<1299823875@qq.com>
 ---> Using cache
 ---> a7d9220eaea1
Step 3/14 : COPY readme.txt /usr/local/readme.txt
 ---> 75185a519370
Step 4/14 : ADD jdk-17_linux-x64_bin.tar.gz /usr/local/
 ---> f18628c943f9
Step 5/14 : ADD apache-tomcat-10.0.14.tar.gz /usr/local/
 ---> cb5f48249d52
Step 6/14 : ENV MYPATH /usr/local
 ---> Running in 744c9532630c
Removing intermediate container 744c9532630c
 ---> d717e7fbae30
Step 7/14 : WORKDIR $MYPATH
 ---> Running in 3762997c1004
Removing intermediate container 3762997c1004
 ---> 516f5b34b897
Step 8/14 : ENV JAVA_HOME /usr/local/jdk-17.0.1
 ---> Running in 220966c0cf08
Removing intermediate container 220966c0cf08
 ---> e59e54441933
Step 9/14 : ENV CLASSPATH $JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
 ---> Running in aad69d3a8eed
Removing intermediate container aad69d3a8eed
 ---> cb0337461428
Step 10/14 : ENV CATLINA /usr/local/apache-tomcat-10.0.14
 ---> Running in a2e841bbfaee
Removing intermediate container a2e841bbfaee
 ---> a49466facf63
Step 11/14 : ENV CATLINA_BASH /usr/local/apache-tomcat-10.0.14
 ---> Running in f583436a78d5
Removing intermediate container f583436a78d5
 ---> 71c7024ddf09
Step 12/14 : ENV PATH $PATH:$JAVA_HOME/bin:$CATLINA_HOME/lib:$CATLINA_HOME/bin
 ---> Running in ed57ce38dcae
Removing intermediate container ed57ce38dcae
 ---> 25db5b914fcc
Step 13/14 : EXPOSE 8080
 ---> Running in 93274e9a65ca
Removing intermediate container 93274e9a65ca
 ---> 020a513795c6
Step 14/14 : CMD /usr/local/apache-tomcat-10.0.14/bin/startup.sh && tail -F /url/local/apache-tomcat-10.0.14/bin/logs/catalina.out
 ---> Running in 4b8e68a76874
Removing intermediate container 4b8e68a76874
 ---> 9fbaefa2a0f0
Successfully built 9fbaefa2a0f0
Successfully tagged dittomcat:latest
”[[e[31docker images    #检查镜像
REPOSITORY        TAG       IMAGE ID       CREATED              SIZE
dittomcat         latest    9fbaefa2a0f0   About a minute ago   563MB
entrypoint-test   latest    d43b235a2232   7 hours ago          231MB
cmdtst            latest    4dc544b82f59   8 hours ago          231MB
<none>            <none>    0012da1eef3b   8 hours ago          231MB
nginx             latest    f6987c8d6ed5   2 days ago           141MB
tomcat            latest    24207ccc9cce   2 weeks ago          680MB
hello-world       latest    feb5d9fea6a5   3 months ago         13.3kB
centos            latest    5d0da3dc9764   3 months ago         231MB

4、启动镜像

docker run -d -p 9090:8080 --name zhanglongtomcat -v /home/zl/build/tomcat/test:/usr/local/apache-tomcat-10.0.14/webapps/test -v /home/zl/build/tomcat/tomcatlogs:/usr/local/apache-tomcat-10.0.14/logs dittomcat

5、外部网络访问测试:
在这里插入图片描述

6、发布项目(由于做了卷挂载,我们直接在本地编写项目就可以发布了)

<!DOCTYPE html>
<html>
    <head>
         <meta charset="UTF-8"/>
        <title>这是个标题</title>
    </head>
    <body>
        <h1>这是一个一个简单的HTML</h1>
        <p>Hello World!</p>
    </body>
</html>

7、访问测试,浏览器访问查看是否能正常访问

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值