前言
学习了docker命令后,接下来要进行学习的就是docker中比较核心的知识:容器数据卷、dockerFile以及docker网络,在这里将学习docker基础的过程记录下来
一、容器数据卷
docker的理念是将我们写好的应用和环境进行打包成为一个镜像。
1. 什么是容器数据卷?
如果我们都将数据放在容器中,将容器删除以后,数据就会丢失。因此就引出了将数据持久化的需求。因此就有了容器之间数据共享的技术:将Docker容器中产生的数据同步到本地。这就是容器数据卷的技术:也叫目录的挂载,将容器内的目录挂载到本机上面。 图解:
容器数据卷的一个好处是哪怕此时容器没有启动,但是要修改容器内的数据只需在本地操作即可,同时容器间也可以进行数据的共享。
2. 通过命令使用数据卷
使用方法: 使用命令来进行挂载:-v
docker run -it -v 主机目录:容器目录
[root@VM-16-16-centos home]
...按快捷键Ctrl + P + Q退出容器...
[root@VM-16-16-centos ceshi]
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
b46ad200daed centos "/bin/bash" 20 seconds ago Up 19 seconds pensive_cartwright
[root@VM-16-16-centos ceshi]
此处省略其它数据...
"Mounts": [
{
"Type": "bind",
"Source": "/home/ceshi",
"Destination": "/home",
"Mode": "",
"RW": true,
"Propagation": "rprivate"
}
],
此处省略其它数据...
此时将容器删除后会发现挂载到本地的数据卷没有丢失,仍然存储在本机
查看数据卷
在可以进行挂载卷以后,可以通过相应的命令来查看数据卷的挂载信息
docker volume [参数]
Commands:
create
inspect
ls
rm
匿名挂载
匿名挂载就是我们在进行挂载时不写主机内路径,只写容器内路径,docker会自动帮我们在主机生成一个目录用于容器的数据挂载
-v 容器内路径
[root@VM-16-16-centos home]
DRIVER VOLUME NAME
local 4bf18cbb2a6128f80fcb499803fc40fd4205255766da919c1dfa0e86accf1944
local 4f417a0068e19f84c0f26a287ad1fde01cc07897d6be80122b7c21f574d78e02
local 7e51a5b64ea902b4035769321b4156dbe9c118f5e32a3e5c70cf8c23968d5db8
local 33119b40b12d49c1d325d8630c8cec5aeb6ceb3c225691e32d6aa407399a4b58
像这样VOLUME_NAME 中没有具体的名字,只有一串地址值的挂载方式就叫匿名挂载
具名挂载
同理,与匿名挂载相反,具名挂载就是在挂载前通过-v 卷名:容器内路径 来进行挂载
-v 卷名:容器内路径
[root@VM-16-16-centos home]
ddfcb311e27b8bd3e592c89ef0f453e72d3f9031f2b7b8975553b946a14841a8
[root@VM-16-16-centos home]
DRIVER VOLUME NAME
local db38f0d2d4fd98997ae86acfcf096cfff6b39230963aeb323da14d1e942e2d08
local juming-centos
但是此时只知道将容器内的数据卷挂载到了主机,具体挂载到了哪个位置则需要使用inspect 来查看
[root@VM-16-16-centos home]
[
{
"CreatedAt": "2021-11-11T21:11:11+08:00",
"Driver": "local",
"Labels": null,
"Mountpoint": "/var/lib/docker/volumes/juming-centos/_data",
"Name": "juming-centos",
"Options": null,
"Scope": "local"
}
]
所有docker容器内部的数据卷,在没有指定主机内的挂载目录时都是在/var/lib/docker/volumes/容器名称/_data 位置进行挂载 因为通过具名挂载可以使我们很方便的找到一个数据卷,因此在大多数情况下都是使用具名挂载
如何判断是具名挂载、匿名挂载还是指定路径挂载?
-v 容器内路径
-v 卷名:容器内路径
-v /宿主机路径:/容器内路径
拓展: 在执行docker命令时会发现有这样的语句,会发现有ro或是rw
docker run -d -P --name centos02 -v juming-centos:/bin/bash:ro centos
docker run -d -P --name centos02 -v juming-centos:/bin/bash:rw centos
解释: 通过-v 容器内路径:ro/rw 可以改变读写权限 ro => readonly??????????只读 当出现ro时就说明这个路径只能通过宿主机来操作,容器内部是无法操作的
rw => readwrite????????可读可写(默认) 一旦设置了容器的权限,此时的容器对挂载出来的内容就会存在限制
3. 通过Dockerfile使用数据卷
Dockerfile就是用来构建docker镜像的构建文件,通过这个dockerfile脚本可以生成镜像。因为镜像是层级结构,因此Dockerfile脚本文件也具备层级结构,脚本文件中的每一层都是一个命令
创建dockerfile文件,名字可以随便,建议为dockerfile,文件中的内容指令全部为大写,文件中的每一个命令都是镜像中的一层
在这里写一个测试文件来进行测试
[root@VM-16-16-centos testDockerfile]
[root@VM-16-16-centos testDockerfile]
FROM centos
VOLUME ["volume01","volume02"]
CMD echo "----------end----------"
CMD /bin/bash
[root@VM-16-16-centos testDockerfile]
Sending build context to Docker daemon 2.048kB
Step 1/4 : FROM centos
---> 5d0da3dc9764
Step 2/4 : VOLUME ["volume01","volume02"]
---> Running in 02e35dd76b93
Removing intermediate container 02e35dd76b93
---> fa6b31173f3a
Step 3/4 : CMD echo "----------end----------"
---> Running in 4508cdfca653
Removing intermediate container 4508cdfca653
---> 75c26eb52f3f
Step 4/4 : CMD /bin/bash
---> Running in c836f8ca91a1
Removing intermediate container c836f8ca91a1
---> 30a7c5c2798f
Successfully built 30a7c5c2798f
Successfully tagged centos:1.0
[root@VM-16-16-centos testDockerfile]
REPOSITORY TAG IMAGE ID CREATED SIZE
centos 1.0 30a7c5c2798f About a minute ago 231MB
tomcat latest b0e0b0a92cf9 3 weeks ago 680MB
centos latest 5d0da3dc9764 8 weeks ago 231MB
mysql 8.0.13 102816b1ee7d 2 years ago 486MB
[root@VM-16-16-centos testDockerfile]
此时的数据卷一定在本机有一个同步的目录,在dockerfile中VOLUME这一行中没有指定数据卷的名称,为匿名挂载
[root@6e08f4a4abbd /]
[root@6e08f4a4abbd volume01]
[root@6e08f4a4abbd volume01]
[root@VM-16-16-centos testDockerfile]
...... 此处省略其他数据 ......
"Mounts": [
{
"Type": "volume",
"Name": "a54af2a118121fbff85d951429b4d4de69c8a7f8840a8cd8202b192c9bad9806",
"Source": "/var/lib/docker/volumes/a54af2a118121fbff85d951429b4d4de69c8a7f8840a8cd8202b192c9bad9806/_data",
"Destination": "volume02",
"Driver": "local",
"Mode": "",
"RW": true,
"Propagation": ""
},
{
"Type": "volume",
"Name": "6acd9a7ec3ffdaa8ccd728d6da31338fadff11042b5e052c9c35cfdee0f4cc4e",
"Source": "/var/lib/docker/volumes/6acd9a7ec3ffdaa8ccd728d6da31338fadff11042b5e052c9c35cfdee0f4cc4e/_data",
"Destination": "volume01",
"Driver": "local",
"Mode": "",
"RW": true,
"Propagation": ""
}
],
... 此处省略其他数据 ...
测试刚才在容器中新建的文件是否同步到了主机 这种方式就是数据卷的挂载,未来在构建自己的镜像时会经常使用这种挂载方式。
数据卷容器
这这里启动三个容器来进行测试,通过刚才自己写的镜像来启动
[root@VM-16-16-centos _data]
[root@837e1ade25ff /]
bin dev etc home lib lib64 lost+found media mnt opt proc root run sbin srv sys tmp usr var volume01 volume02
启动好第一个镜像后,按Ctrl + P + Q退出当前容器,来启动第二个容器,在启动时通过--volumes-from 命令将第二个容器的数据卷挂载到docker01上
[root@VM-16-16-centos _data]
[root@f40031fc1017 /]
total 56
lrwxrwxrwx 1 root root 7 Nov 3 2020 bin -> usr/bin
drwxr-xr-x 5 root root 360 Nov 13 01:55 dev
drwxr-xr-x 1 root root 4096 Nov 13 01:55 etc
drwxr-xr-x 2 root root 4096 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 4096 Sep 15 14:17 lost+found
drwxr-xr-x 2 root root 4096 Nov 3 2020 media
drwxr-xr-x 2 root root 4096 Nov 3 2020 mnt
drwxr-xr-x 2 root root 4096 Nov 3 2020 opt
dr-xr-xr-x 120 root root 0 Nov 13 01:55 proc
dr-xr-x--- 2 root root 4096 Sep 15 14:17 root
drwxr-xr-x 11 root root 4096 Sep 15 14:17 run
lrwxrwxrwx 1 root root 8 Nov 3 2020 sbin -> usr/sbin
drwxr-xr-x 2 root root 4096 Nov 3 2020 srv
dr-xr-xr-x 13 root root 0 Nov 13 01:55 sys
drwxrwxrwt 7 root root 4096 Sep 15 14:17 tmp
drwxr-xr-x 12 root root 4096 Sep 15 14:17 usr
drwxr-xr-x 20 root root 4096 Sep 15 14:17 var
drwxr-xr-x 2 root root 4096 Nov 13 01:51 volume01
drwxr-xr-x 2 root root 4096 Nov 13 01:51 volume02
现在进入docker01容器
[root@VM-16-16-centos ~]
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
822ae9cfcc8d centos:1.0 "/bin/sh -c /bin/bash" About a minute ago Up About a minute docker02
837e1ade25ff centos:1.0 "/bin/sh -c /bin/bash" 56 minutes ago Up 56 minutes docker01
6e08f4a4abbd 30a7c5c2798f "/bin/bash" 2 hours ago Up 2 hours youthful_thompson
[root@VM-16-16-centos ~]
[root@822ae9cfcc8d /]
[root@822ae9cfcc8d volume01]
docker01.txt
图解: 在测试成功两个容器相互挂载后,现在再增加一个是否仍然可以挂载呢? 现在创建第三个容器docker03容器挂载到docker01容器上
[root@VM-16-16-centos ~]
[root@6b7b0023d7c9 /]
[root@6b7b0023d7c9 volume01]
docker01.txt
[root@6b7b0023d7c9 volume01]
[root@6b7b0023d7c9 volume01]
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
6b7b0023d7c9 centos:1.0 "/bin/sh -c /bin/bash" 36 seconds ago Up 35 seconds docker03
822ae9cfcc8d centos:1.0 "/bin/sh -c /bin/bash" 18 minutes ago Up 18 minutes docker02
837e1ade25ff centos:1.0 "/bin/sh -c /bin/bash" About an hour ago Up About an hour docker01
6e08f4a4abbd 30a7c5c2798f "/bin/bash" 2 hours ago Up 2 hours youthful_thompson
[root@VM-16-16-centos ~]
[root@837e1ade25ff volume01]
docker01.txt docker03.txt
此时容器docker02和docker03此时都挂载到了docker01上,那么又会产生一个问题,就是当我们将docker01容器删除或停止以后,docker02和docker03容器中的数据是否仍然存在?接着进行测试 测试结果发现,删除docker01容器后依旧可以访问挂载到docker01中的文件,因此可以发现,在docker 容器挂载是双向拷贝的概念,类似于vue中的v-model双向数据绑定,可以实现两个容器的数据同步。
图解: 结论:容器之间配置信息的传递,数据容器的生命周期一直持续到没有容器使用为止。一旦持久化到了本地,哪怕把所有的容器删除掉,这个时候本地的数据同样是不会删除的
二、DockerFile
1. 什么是dockerfile?
dockerfile是用来构建docker镜像的文件,就是一个命令参数脚本
构建步骤:
- 编写一个dockerfile文件
- docker build构建成为一个镜像
- docker run运行镜像
- docker push发布镜像(DockerHub、阿里云镜像仓库)
查看官方是如何制作镜像文件的:https://hub.docker.com/ 当点击daockerfile的链接跳转到GitHub上时,可以看到官方dockerfile的源码
2. DockerFile构建过程
基础知识:
- 每个关键字(指令)都必须是大写字母
- 指令是从上到下顺序执行的
- “#” 表示注释
- 每一个指令都会创建一个新的镜像层,并提交
dockerfile是面向开发的,以后要发布项目、做镜像时就需要编写dockerfile文件
步骤:开发、部署、运维
- DockerFile:构建文件,定义了一切的步骤
- DockerImages:通过DockerFile构建生成的镜像,最终发布和运行的产品
- DockerContainer:容器就是镜像运行起来提供服务的(使用镜像)
3. DockerFile的指令
FROM // 基础镜像,一切从这里开始构建
MAINTAINER // 镜像是谁写的,姓名+邮箱
RUN // 镜像构建时需要运行的命令
ADD // 步骤:其它镜像,其它镜像的压缩包就是添加的内容
WORKDIR // 镜像的工作目录(可以自己指定)
VOLUME // 挂载的目录
EXPOSE // 暴露端口配置
CMD // 指定这个容器启动时要运行的命令,只有最后一个会生效,可被替代
ENTRYPOINT // 指定这个容器启动时要运行的命令,可以追加命令
ONBUILD // 当构建一个被继承的DockerFile,这个时候就会运行ONBUILD的命令
COPY // 类似ADD命令,将文件拷贝到镜像中
ENV // 构建的时候设置环境变量
4. 实战测试
Centos8.0官方的dockerfile文件 Docker Hub中绝大部分镜像都是从scratch镜像中过来的,然后配置需要的软件和配置来进行构建
[root@VM-16-16-centos ~]
[root@VM-16-16-centos home]
[root@VM-16-16-centos home]
[root@VM-16-16-centos dockerfile]
------------------- dockerfile文件内容 -------------------
FROM centos
MAINTAINER shijimodejiagoushi<1072876976@qq.com>
ENV MYPATH /usr/local
WORKDIR $MYPATH
RUN yum -y install vim
RUN yum -y install net-tools
EXPOSE 90
CMD echo $MYPATH
CMD echo "---------- end ----------"
CMD /bin/bash
------------------- dockerfile文件内容 -------------------
接下来对通过dockerfile构建成功的镜像进行查看与测试
[root@VM-16-16-centos dockerfile]
REPOSITORY TAG IMAGE ID CREATED SIZE
mycentos 1.0 b87f31e57281 13 minutes ago 340MB
centos 1.0 30a7c5c2798f 2 days ago 231MB
halohub/halo 1.4.13 07dafc8f2711 8 days ago 325MB
tomcat latest b0e0b0a92cf9 3 weeks ago 680MB
centos latest 5d0da3dc9764 2 months ago 231MB
mysql 8.0.13 102816b1ee7d 2 years ago 486MB
[root@VM-16-16-centos dockerfile]
[root@df7b4314eb48 local]
/usr/local
三、综合实战:制作Tomcat镜像
1. 准备压缩包
制作tomcat镜像需要使用到Tomcat的压缩包以及JDK的压缩包
下载链接:
- Tomcat8.5.7:https://tomcat.apache.org/download-80.cgi
- JDK8:https://www.oracle.com/java/technologies/javase/javase8-archive-downloads.html
2. 编写Dockerfile文件
官方命名为Dockerfile ,build时就会自动寻找这个文件,就不需要 -f 来进行指定了 在dockerfile文件中,使用ADD命令时添加的是压缩包的话,会自动进行解压
[root@VM-16-16-centos tomcat-dockerfile]
[root@VM-16-16-centos tomcat-dockerfile]
[root@VM-16-16-centos tomcat-dockerfile]
FROM centos
MAINTAINER shijimodejiagoushi<1072876976@qq.com>
COPY readme.txt /usr/local/readme.txt
ADD jdk-8u202-linux-x64.tar.gz /usr/local/
ADD apache-tomcat-8.5.72.tar.gz /usr/local/
RUN yum -y install vim
ENV MYPATH /usr/local
WORKDIR $MYPATH
ENV JAVA_HOME /usr/local/jdk1.8
ENV CLASSPATH $JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
ENV CATALINA_HOME /usr/local/apache-tomcat-8.5.72
ENV CATALINA_BASH /usr/local/apache-tomcat-8.5.72
ENV PATH $PATH:$JAVA_HOME/bin:$CATALINA_HOME/lib:$CATALINA_HOME/bin
EXPOSE 8080
CMD /usr/local/apache-tomcat-8.5.72/bin/startup.sh && tail -F /url/local/apache-tomcat-8.5.72/bin/logs/catalina.out
3. 构建镜像
因为此时的dockerfile文件的名称为Dockerfile,与官方的名称相同,因此直接构建生成镜像即可,无需指定dockerfile的路径
[root@VM-16-16-centos tomcat-dockerfile]
Sending build context to Docker daemon 157.4MB
Step 1/15 : FROM centos
---> 5d0da3dc9764
Step 2/15 : MAINTAINER shijimodejiagoushi<1072876976@qq.com>
---> Using cache
---> 4102f7944f69
Step 3/15 : COPY readme.txt /usr/local/readme.txt
---> 72faff07d65d
Step 4/15 : ADD jdk-8u311-linux-x64.tar.gz /usr/local/
---> 469af64c2dff
Step 5/15 : ADD apache-tomcat-8.5.72.tar.gz /usr/local/
---> d8772f248742
Step 6/15 : RUN yum -y install vim
---> Running in fde58a7e7aea
CentOS Linux 8 - AppStream 16 MB/s | 9.6 MB 00:00
CentOS Linux 8 - BaseOS 4.7 MB/s | 8.5 MB 00:01
CentOS Linux 8 - Extras 24 kB/s | 10 kB 00:00
Dependencies resolved.
================================================================================
Package Arch Version Repository Size
================================================================================
Installing:
vim-enhanced x86_64 2:8.0.1763-15.el8 appstream 1.4 M
Installing dependencies:
gpm-libs x86_64 1.20.7-17.el8 appstream 39 k
vim-common x86_64 2:8.0.1763-15.el8 appstream 6.3 M
vim-filesystem noarch 2:8.0.1763-15.el8 appstream 48 k
which x86_64 2.21-12.el8 baseos 49 k
Transaction Summary
================================================================================
Install 5 Packages
Total download size: 7.8 M
Installed size: 30 M
Downloading Packages:
(1/5): gpm-libs-1.20.7-17.el8.x86_64.rpm 4.2 MB/s | 39 kB 00:00
(2/5): vim-filesystem-8.0.1763-15.el8.noarch.rp 12 MB/s | 48 kB 00:00
(3/5): vim-enhanced-8.0.1763-15.el8.x86_64.rpm 48 MB/s | 1.4 MB 00:00
(4/5): vim-common-8.0.1763-15.el8.x86_64.rpm 90 MB/s | 6.3 MB 00:00
(5/5): which-2.21-12.el8.x86_64.rpm 211 kB/s | 49 kB 00:00
--------------------------------------------------------------------------------
Total 5.3 MB/s | 7.8 MB 00:01
warning: /var/cache/dnf/appstream-02e86d1c976ab532/packages/gpm-libs-1.20.7-17.el8.x86_64.rpm: Header V3 RSA/SHA256 Signature, key ID 8483c65d: NOKEY
CentOS Linux 8 - AppStream 1.6 MB/s | 1.6 kB 00:00
Importing GPG key 0x8483C65D:
Userid : "CentOS (CentOS Official Signing Key) <security@centos.org>"
Fingerprint: 99DB 70FA E1D7 CE22 7FB6 4882 05B5 55B3 8483 C65D
From : /etc/pki/rpm-gpg/RPM-GPG-KEY-centosofficial
Key imported successfully
Running transaction check
Transaction check succeeded.
Running transaction test
Transaction test succeeded.
Running transaction
Preparing : 1/1
Installing : which-2.21-12.el8.x86_64 1/5
Installing : vim-filesystem-2:8.0.1763-15.el8.noarch 2/5
Installing : vim-common-2:8.0.1763-15.el8.x86_64 3/5
Installing : gpm-libs-1.20.7-17.el8.x86_64 4/5
Running scriptlet: gpm-libs-1.20.7-17.el8.x86_64 4/5
Installing : vim-enhanced-2:8.0.1763-15.el8.x86_64 5/5
Running scriptlet: vim-enhanced-2:8.0.1763-15.el8.x86_64 5/5
Running scriptlet: vim-common-2:8.0.1763-15.el8.x86_64 5/5
Verifying : gpm-libs-1.20.7-17.el8.x86_64 1/5
Verifying : vim-common-2:8.0.1763-15.el8.x86_64 2/5
Verifying : vim-enhanced-2:8.0.1763-15.el8.x86_64 3/5
Verifying : vim-filesystem-2:8.0.1763-15.el8.noarch 4/5
Verifying : which-2.21-12.el8.x86_64 5/5
Installed:
gpm-libs-1.20.7-17.el8.x86_64 vim-common-2:8.0.1763-15.el8.x86_64
vim-enhanced-2:8.0.1763-15.el8.x86_64 vim-filesystem-2:8.0.1763-15.el8.noarch
which-2.21-12.el8.x86_64
Complete!
Removing intermediate container fde58a7e7aea
---> 25325ca2577f
Step 7/15 : ENV MYPATH /usr/local
---> Running in a9c36972ce5a
Removing intermediate container a9c36972ce5a
---> 63bb0ba56832
Step 8/15 : WORKDIR $MYPATH
---> Running in d09e1861e9ab
Removing intermediate container d09e1861e9ab
---> 06619c0bcd1e
Step 9/15 : ENV JAVA_HOME /usr/local/jdk1.8
---> Running in 5ef54db767c4
Removing intermediate container 5ef54db767c4
---> 71dea4ae1e23
Step 10/15 : ENV CLASSPATH $JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
---> Running in 015882797b85
Removing intermediate container 015882797b85
---> cf09007b5767
Step 11/15 : ENV CATALINA_HOME /usr/local/apache-tomcat-8.5.72
---> Running in 1109e02165b4
Removing intermediate container 1109e02165b4
---> 77bf619c4bec
Step 12/15 : ENV CATALINA_BASH /usr/local/apache-tomcat-8.5.72
---> Running in 90cd718a8a5c
Removing intermediate container 90cd718a8a5c
---> ca611958f271
Step 13/15 : ENV PATH $PATH:$JAVA_HOME/bin:$CATALINA_HOME/lib:$CATALINA_HOME/bin
---> Running in f07f036febf0
Removing intermediate container f07f036febf0
---> b83a4ed77e8d
Step 14/15 : EXPOSE 8080
---> Running in 3c1de3e2b0e8
Removing intermediate container 3c1de3e2b0e8
---> 4df529a4e623
Step 15/15 : CMD CATALINA_HOME /usr/local/apache-tomcat-8.5.72/bin/startup.sh && tail --F /url/local/apache-tomcat-8.5.72/bin/logs/catalina.out
---> Running in 8206acc4eb6c
Removing intermediate container 8206acc4eb6c
---> 59ed85310171
Successfully built 59ed85310171
Successfully tagged diytomcat:latest
此时可以看到镜像中已经存在刚才由dockerfile构建出的镜像,接下来启动生成的镜像容器并且将容器的工作目录和日志目录挂载到主机上
[root@VM-16-16-centos home]
REPOSITORY TAG IMAGE ID CREATED SIZE
diytomcat latest 59ed85310171 46 minutes ago 686MB
mycentos 1.0 b87f31e57281 3 hours ago 340MB
centos 1.0 30a7c5c2798f 2 days ago 231MB
halohub/halo 1.4.13 07dafc8f2711 8 days ago 325MB
tomcat latest b0e0b0a92cf9 3 weeks ago 680MB
centos latest 5d0da3dc9764 2 months ago 231MB
mysql 8.0.13 102816b1ee7d 2 years ago 486MB
[root@VM-16-16-centos home]
3cb91b448a6d0b836086f15bb763d2bc00944b4f8d9db6c7426d6b62fd4c439f
接下来通过docker exec -it 容器Id 进入到容器的内部 在浏览器上输入ip地址:端口号 查看是否可以访问到tomcat主页 访问成功! 由于我们做了数据卷的挂载,因此我们可以在本地直接编写项目,接下来在本地进行修改文件,查看数据卷的挂载是否成功。
- 在主机的test目录下新建WEB-INF目录
- 新建web.xml文件
<web-app version="2.4"
xmlns="http://java.sun.com/xml/ns/j2ee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee
http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">
</web-app>
- 新建index.jsp文件
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<meta charset="utf-8">
<title>Hello,世纪末的架构师</title>
</head>
<body>
<h2>Hello World!</h2>
</body>
</html>
总结
以上内容就是Docker基础入Dockerfile和容器数据卷的学习,通过docker基础的学习,越发感觉到docker的精妙,而docker命令更是基础中的基础,与Linux命令相似。在学习docker的过程中,对Linux系统的命令也做了一定的回顾与熟练。接下来继续学习docker的进阶知识,docker网络以及之后的docker-compose等内容。
人生如骑自行车,方向掌握在自己手中,用力蹬才能前进,一路上不管逆风还是顺风,全凭自己掌握。你的未来取决于你的现在,有多少付出就有多少收获!
|