目录
如果想要保存当前容器的状态,就可以通过commit来提交,获得一个镜像,就好比我们以前学习VM时候,快照
总结一句话:容器的持久化和同步操作!容器间也是可以数据共享的!
结论:1、容器之间配置信息的传递,数据卷容器的生命周期一直持续到没有容器使用为止2、一旦持久化到了本地,本地的数据是不会删除的
创建一个自己的centos:这里2022年需要将FROM centos改为FROM centos:7
dockerfile中的很多命令都十分相似,需要了解他们的区别,可以对比他们然后测试
docker镜像讲解
镜像是什么
Docker镜像加载原理
UnionFS(联合文件系统)
Docker镜像加载原理
分层理解
分层的镜像
加深理解
特点
如何提交一个自己的镜像 commit镜像
docker commit 提交容器成为一个新的副本
# 命令和Git原理类似
docker commit -m="提交的描述信息" -a="作者" 容器id 目标镜像名.[tag]
实战测试
# 1、启动一个默认的tomcat
# 2、发现这个默认的tomcat 是没有webapps应用,镜像的原因,官方的镜像默认webapps 下面是没有文件的
# 3、自己拷贝进去了基本的文件
# 4、将修改后的容器通过commit提交为一个镜像,我们以后使用修改后的镜像即可,这就是修改后的镜像
[root@k3 ~]# docker exec -it tomcat /bin/bash
root@e5fe938049b2:/usr/local/tomcat#
root@e5fe938049b2:/usr/local/tomcat# ls
BUILDING.txt LICENSE README.md RUNNING.txt conf logs temp webapps.dist
CONTRIBUTING.md NOTICE RELEASE-NOTES bin lib native-jni-lib webapps work
root@e5fe938049b2:/usr/local/tomcat# cd webapps
root@e5fe938049b2:/usr/local/tomcat/webapps# ls
root@e5fe938049b2:/usr/local/tomcat/webapps# cd ..
root@e5fe938049b2:/usr/local/tomcat# cp -r webapps.dist/* webapps
root@e5fe938049b2:/usr/local/tomcat# cd webapps
root@e5fe938049b2:/usr/local/tomcat/webapps# ls
ROOT docs examples host-manager manager webapps.dist
root@e5fe938049b2:/usr/local/tomcat# exit
exit
[root@k3 ~]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
e5fe938049b2 tomcat "catalina.sh run" 3 minutes ago Up 3 minutes 0.0.0.0:3355->8080/tcp, :::3355->8080/tcp tomcat
[root@k3 ~]# docker commit -a="davina" -m="add webapps app" e5fe938049b2 tomcat02:1.0
sha256:e7ecf7f1a0163db9ce1206e43721bd5a47308e81579d3c8a1dae1da39c390664
[root@k3 ~]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
tomcat02 1.0 e7ecf7f1a016 24 seconds ago 689MB
tomcat latest 5eb506608219 36 hours ago 685MB
如果想要保存当前容器的状态,就可以通过commit来提交,获得一个镜像,就好比我们以前学习VM时候,快照
容器数据卷
什么是容器数据卷
docker的理念回顾
总结一句话:容器的持久化和同步操作!容器间也是可以数据共享的!
使用数据卷
方式一:直接使用命令来挂载 ~~~ -v
docker run -it -v 主机目录:容器内目录
# 测试
[root@k2 home]# docker run -it -v /home/ceshi:/home centos /bin/bash
# 启动起来时候,我们可以通过 docker inspect 容器id
测试文件的同步
再来测试
1、停止容器
2、宿主机上修改文件
3、启动容器
4、容器内的数据依然是同
好处:我们以后修改只需要在本地修改即可,容器内会自动同步
实战:安装mysql
思考:Mysql的数据持久化的问题
# 获取镜像
docker pull mysql:5.7
# 运行容器,需要做数据挂载
# 安装启动mysql,需要配置密码
# 官方测试:docker run --name some-mysql -e MYSQL_ROOT_PASSWORD=pwd -d mysql:tag
# 启动我们的mysql
-d 后台运行
-p 端口映射
-v 卷挂载
-e 环境配置
--name 容器名字
[root@k3 /]# docker run -d -p 3310: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
# 启动成功之后,在本地使用Navicat连接测试一下
连接到服务器的3310 ---- 3310和容器内的3306映射,就可以连接成功
[root@k3 /]# docker pull mysql:5.7
5.7: Pulling from library/mysql
c32ce6654453: Pull complete
415d08ee031a: Pull complete
7a38fec2542f: Pull complete
352881ee8fe9: Pull complete
b8e20da291b6: Pull complete
66c2a8cc1999: Pull complete
d3a3a8e49878: Pull complete
172aabfba65c: Pull complete
fea17d0b1d1e: Pull complete
fff7f5411ca9: Pull complete
c33d43428e07: Pull complete
Digest: sha256:16e159331007eccc069822f7b731272043ed572a79a196a05ffa2ea127caaf67
Status: Downloaded newer image for mysql:5.7
docker.io/library/mysql:5.7
[root@k3 /]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
tomcat02 1.0 e7ecf7f1a016 About an hour ago 689MB
tomcat latest 5eb506608219 37 hours ago 685MB
nginx latest de2543b9436b 42 hours ago 142MB
mysql 5.7 a3d35804fa37 8 days ago 462MB
portainer/portainer latest 12b0b8dced14 10 days ago 75.4MB
centos latest 5d0da3dc9764 8 months ago 231MB
elasticsearch 7.6.2 f29a1ee41030 2 years ago 791MB
[root@k3 /]# docker run -d -p 3310: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
f3cc67b88ff4dbd55e63ec3327985ad7a9c1cdfb4bfefc6ceb7124f7eb123536
# 假设将容器删除
[root@k3 /]# docker rm -f mysql01
mysql01
[root@k3 /]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
e5fe938049b2 tomcat "catalina.sh run" About an hour ago Up About an hour 0.0.0.0:3355->8080/tcp, :::3355->8080/tcp tomcat
[root@k3 /]# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
e5fe938049b2 tomcat "catalina.sh run" About an hour ago Up About an hour 0.0.0.0:3355->8080/tcp, :::3355->8080/tcp tomcat
[root@k3 mysql]# cd /home/
[root@k3 home]# ll
总用量 0
drwxr-xr-x. 2 root root 23 5月 20 00:08 ceshi
drwxr-xr-x. 4 root root 30 5月 20 00:26 mysql
[root@k3 home]# cd mysql/
[root@k3 mysql]# ll
总用量 4
drwxr-xr-x. 2 root root 6 5月 20 00:26 conf
drwxr-xr-x. 5 polkitd root 4096 5月 20 00:26 data
发现,我们挂载到本地的数据卷依然没有丢失,这就实现了容器数据持久化功能
具名与匿名挂载
# 匿名挂载
-v 容器内路径
docker run -d -P --name nginx04 -v /etc/nginx nginx
# 查看所有的volume的情况
[root@k3 mysql]# docker volume ls
DRIVER VOLUME NAME
local f171cbe47f213b28f4d483d5f70aaaa52e611ef1e5a0cca34375ccc3bd6f5a3e
# 这里发现,这个匿名挂载,在 -v 只写了容器内的路径,没有写容器外的路径
# 具名挂载
[root@k3 mysql]# docker run -d -P --name nginx05 -v juming-nginx:/etc/nginx nginx
78c0aca70fcc020f8daf0e9da4475e3453f8f7be360cc2743f9706e1a48e2880
[root@k3 mysql]# docker volume ls
DRIVER VOLUME NAME
local juming-nginx
# 通过 -v 卷名:容器内路径
查看一下这个卷
[root@k3 mysql]# docker run -d -P --name nginx04 -v /etc/nginx nginx
12b4da52e66666666666666666666666666cd312c197
[root@k3 mysql]# docker volume ls
DRIVER VOLUME NAME
local f171cbe47f2136666666666666666cca34375ccc3bd6f5a3e
[root@k3 mysql]# docker run -d -P --name nginx05 -v juming-nginx:/etc/nginx nginx
78c0ac666666666666666666666666643f9706e1a48e2880
[root@k3 mysql]# docker volume ls
DRIVER VOLUME NAME
local f171cbe46666666666666666666666cc3bd6f5a3e
local juming-nginx
# 如何确定是具名挂载还是匿名挂载,还是指定路径挂载
-v 容器内路径 # 匿名挂载
-v 卷名:容器内路径 # 具名挂载
-v /宿主机路径::容器内路径 # 指定路径挂载
############ 扩展
# 通过 -v 容器内路径 :ro rw 改变读写权限
ro readonly # 只读
rw readwrite # 可读可写
# 一旦这个设置了容器权限,容器对我们挂载出来的内容就有了限定
docker run -d -P --name nginx05 -v juming-nginx:/etc/nginx:ro nginx
docker run -d -P --name nginx05 -v juming-nginx:/etc/nginx:rw nginx
# ro 只要看到ro就说明这个路径只能通过宿主机来操作,容器内都是无法操作
初识DockerFile
DockerFile就是用来构建docker镜像的构建文件
通过这个脚本可以生成镜像,镜像是一层一层的,脚本是一个一个的命令,每个命令都是一层
# 创建一个dockerfile文件,名字可以随机,建议dockerfile
# 文件中的内容 指令(大写)、参数
FROM centos
VOLUME ["volume01","volume02"]
CMD echo ".....end...."
CMD /bin/bash
# 这里的每个命令,就是镜像的一层
# 启动自己写的容器
这个卷和外部一定一个同步的目录
[root@k3 ~]# cd /home/
[root@k3 home]# mkdir docker-test-volume
[root@k3 home]# ll
总用量 0
drwxr-xr-x. 2 root root 23 5月 20 00:08 ceshi
drwxr-xr-x. 2 root root 6 5月 20 21:58 docker-test-volume
drwxr-xr-x. 4 root root 30 5月 20 00:26 mysql
[root@k3 home]# cd docker-test-volume/
[root@k3 docker-test-volume]# vim dockerfile1
[root@k3 docker-test-volume]# cat dockerfile1
FROM centos
VOLUME ["volume01","volume02"]
CMD echo ".....end...."
CMD /bin/bash
[root@k3 docker-test-volume]# docker build -f /home/docker-test-volume/dockerfile1 -t kuangshen/centos:1.0 .
Sending build context to Docker daemon 2.048kB
Step 1/4 : FROM centos
---> 5d0da3dc9764
Step 2/4 : VOLUME ["volume01","volume02"]
---> Running in 4b2875873838
Removing intermediate container 4b2875873838
---> 16f999ab4e62
Step 3/4 : CMD echo ".....end...."
---> Running in 2167a8190a0b
Removing intermediate container 2167a8190a0b
---> 5c2538632e52
Step 4/4 : CMD /bin/bash
---> Running in 96610439a302
Removing intermediate container 96610439a302
---> f29e4091c083
Successfully built f29e4091c083
Successfully tagged kuangshen/centos:1.0
[root@k3 docker-test-volume]# vim dockerfile1
[root@k3 docker-test-volume]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
kuangshen/centos 1.0 f29e4091c083 8 minutes ago 231MB
centos latest 5d0da3dc9764 8 months ago 231MB
elasticsearch 7.6.2 f29a1ee41030 2 years ago 791MB
[root@k3 docker-test-volume]# docker run -it f29e4091c083 /bin/bash
[root@08e521953b67 /]# ls -l
total 0
lrwxrwxrwx. 1 root root 7 Nov 3 2020 bin -> usr/bin
drwxr-xr-x. 5 root root 360 May 20 14:13 dev
drwxr-xr-x. 1 root root 66 May 20 14:13 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 2021 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. 288 root root 0 May 20 14:13 proc
dr-xr-x---. 2 root root 162 Sep 15 2021 root
drwxr-xr-x. 11 root root 163 Sep 15 2021 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 May 17 11:08 sys
drwxrwxrwt. 7 root root 171 Sep 15 2021 tmp
drwxr-xr-x. 12 root root 144 Sep 15 2021 usr
drwxr-xr-x. 20 root root 262 Sep 15 2021 var
drwxr-xr-x. 2 root root 6 May 20 14:13 volume01
drwxr-xr-x. 2 root root 6 May 20 14:13 volume02
[root@k3 ~]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
08e521953b67 f29e4091c083 "/bin/bash" 9 minutes ago Up 9 minutes inspiring_golick
e6d17d636007 centos "/bin/bash" 22 hours ago Up 22 hours laughing_joliot
[root@k3 ~]# docker inspect 08e521953b67
数据卷容器
多个mysql同步数据
# 启动3个容器,通过刚才自己写的镜像启动
[root@k3 ~]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
kuangshen/centos 1.0 f29e4091c083 2 hours ago 231MB
centos latest 5d0da3dc9764 8 months ago 231MB
[root@k3 ~]# docker run -it --name docker01 kuangshen/centos:1.0
[root@438dd0283032 /]# [root@k3 ~]#
[root@k3 ~]#
[root@k3 ~]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
438dd0283032 kuangshen/centos:1.0 "/bin/sh -c /bin/bash" About a minute ago Up About a minute docker01
08e521953b67 f29e4091c083 "/bin/bash" 2 hours ago Up 2 hours inspiring_golick
e6d17d636007 centos "/bin/bash" 24 hours ago Up 24 hours laughing_joliot
[root@k3 ~]# docker run -it --name docker02 --volumes-from docker01 kuangshen/centos:1.0
[root@32faf9bf5a79 /]#
[root@k3 ~]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
32faf9bf5a79 kuangshen/centos:1.0 "/bin/sh -c /bin/bash" 3 minutes ago Up 3 minutes docker02
438dd0283032 kuangshen/centos:1.0 "/bin/sh -c /bin/bash" 6 minutes ago Up 6 minutes docker01
e6d17d636007 centos "/bin/bash" 24 hours ago Up 24 hours laughing_joliot
[root@k3 ~]#
[root@k3 ~]#
[root@k3 ~]# docker attach 438dd0283032
[root@438dd0283032 /]# ls -l
total 0
lrwxrwxrwx. 1 root root 7 Nov 3 2020 bin -> usr/bin
drwxr-xr-x. 5 root root 360 May 20 16:12 dev
drwxr-xr-x. 1 root root 66 May 20 16:12 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 2021 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. 304 root root 0 May 20 16:12 proc
dr-xr-x---. 2 root root 162 Sep 15 2021 root
drwxr-xr-x. 11 root root 163 Sep 15 2021 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 May 17 11:08 sys
drwxrwxrwt. 7 root root 171 Sep 15 2021 tmp
drwxr-xr-x. 12 root root 144 Sep 15 2021 usr
drwxr-xr-x. 20 root root 262 Sep 15 2021 var
drwxr-xr-x. 2 root root 6 May 20 16:12 volume01
drwxr-xr-x. 2 root root 6 May 20 16:12 volume02
[root@438dd0283032 /]# cd volume01
[root@438dd0283032 volume01]# ls
[root@438dd0283032 volume01]# touch docker01.txt
[root@438dd0283032 volume01]# ls
docker01.txt
# 退到宿主机 ctrl+P+Q
[root@k3 ~]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
32faf9bf5a79 kuangshen/centos:1.0 "/bin/sh -c /bin/bash" 6 minutes ago Up 6 minutes docker02
438dd0283032 kuangshen/centos:1.0 "/bin/sh -c /bin/bash" 9 minutes ago Up 9 minutes docker01
e6d17d636007 centos "/bin/bash" 24 hours ago Up 24 hours laughing_joliot
[root@k3 ~]# docker attach 32faf9bf5a79
[root@32faf9bf5a79 /]# cd volume01
[root@32faf9bf5a79 volume01]# ls
docker01.txt
[root@32faf9bf5a79 volume01]#
重要代码部分:
# 测试,可以删除docker01,查看一下docker02和docker03是否可以访问这个文件
# 测试依然可以访问
多个MySQL实现数据共享
[root@k3 home]# docker run -d -p 3310:3306 -v /home/mysql/conf -v /var/lib/mysql -e MYSQL_ROOT_PASSWORD=123456 --name mysql01 mysql:5.7
[root@k3 home]# docker run -d -p 3310:3306 -e MYSQL_ROOT_PASSWORD=123456 --name mysql02 --volumes-from mysql01 mysql:5.7
# 这个时候,可以实现两个容器数据同步
结论:
1、容器之间配置信息的传递,数据卷容器的生命周期一直持续到没有容器使用为止
2、一旦持久化到了本地,本地的数据是不会删除的
DockFile
DockFile介绍
DockFile构建过程
DockerFile的指令
FROM # 基础镜像,一切从这里开始构建
MAINTAINER # 镜像是谁写的,姓名+邮箱
RUN # 镜像构建的是需要运行的命令
ADD # 步骤:tomcat镜像,这个tomcat压缩包!添加内容
WORKDIR # 镜像的工作目录
VOLUME # 挂载的目录
EXPOSE # 保留端口配置
CMD # 指定容器启动时要运行的命令,只有最后一个会生效,可被替代
ENTRYPOINT # 指定容器启动时要运行的命令,可以追加命令
ONBUILD # 当构建一个被继承 DockerFile时,就会运行这个指令,触发指令
COPY # 类似ADD,将文件拷贝到镜像中
ENV # 构建的时候,设置环境变量
实战测试
[root@k3 home]# cd /home
[root@k3 home]# mkdir dockerfile
[root@k3 home]# cd dockerfile
[root@k3 dockerfile]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
centos latest 5d0da3dc9764 8 months ago 231MB
[root@k3 dockerfile]# docker run -it centos
[root@ff53460fa928 /]# pwd
/
[root@ff53460fa928 /]# vim
bash: vim: command not found
[root@ff53460fa928 /]# ifconfig
bash: ifconfig: command not found
[root@ff53460fa928 /]# [root@k3 dockerfile]#
[root@k3 dockerfile]# vim mydockerfile-centos
创建一个自己的centos:这里2022年需要将FROM centos改为FROM centos:7
# 1、编写dockerfile的文件
[root@k3 dockerfile]# cat mydockerfile-centos
FROM centos
MAINTAINER davina<12346789@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 mycentos:0.1 .
# 命令
docker build -f dockerfile文件路径 -t 镜像名:[tag] .
# 3、测试运行
docker images
docker run -it mycentos:0.1
pwd
ifconfig
vim test
列出本地进行变更历史
CMD 和 ENTRYPOINT 区别
CMD # 指定容器启动时要运行的命令,只有最后一个会生效,可被替代
ENTRYPOINT # 指定容器启动时要运行的命令,可以追加命令
####################### 测试cmd
# 1、编写dockerfile文件
vim dockerfile-cmd-test
FROM centos
CMD ["ls","-a"]
# 2、构建镜像
docker build -f dockerfile-cmd-test -t cmdtest .
# 3、run运行,ls -a 命令生效
docker run ...
# 想追加一个命令 -l ls -a
docker run ... -l
# cmd 的清理下 -l 替换了cmd ["ls","-a"] 命令 ,-l 不是命令,所以报错
##################### 测试entrypoint
# 1、编写dockerfile文件
vim dockerfile-entrypoint-test
FROM centos
ENTRYPOINT ["ls","-a"]
# 2、构建镜像
docker build -f dockerfile-entrypoint-test -t entrypointtest.
# 3、run运行,ls -a 命令生效
docker run ...
# 想追加一个命令 -l ls -a
docker run ... -l
dockerfile中的很多命令都十分相似,需要了解他们的区别,可以对比他们然后测试
实战Tomcat镜像
1、准备镜像文件 tomcat 压缩包,jdk的压缩包
下载 xxxxx.tar.gz
2、编写dockerfile文件,官方命名 Dockerfile , build 会自动寻找这个文件,就不需要 -f
touch readme.txt
vim Dockerfile
FROM centos
MAINTAINER davina<1234567@qq.com>
COPY readme.txt /usr/local/readme.txt
ADD jdk-xxx.tar.gz /usr/local/
ADD apache-tomcat-xxx.tar.gz /usr/local/
RUN yum -y install vim
ENV MYPATH /usr/local
WORKDIR $MYPATH
ENV JAVA_HOME /usr/local/jdkxxx
ENV CLASSPATH $JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
ENV CATALINA_HOME /usr/local/apache-tomcat-xxx
ENV CATALINA_BASH /usr/local/apache-tomcat-xxx
ENV PATH $PATH:$JAVA_HOME/bin:$CATALINA_HOME/lib:$CATALINA_HOME/bin
EXPOSE 8080
CMD /usr/local/apache-tomcat-xxx/bin/startup.sh && tail -F /usr/local/tomcat-xxx/bin/logs/cataline.out
docker build -t diytomcat .
3、构建镜像
docker build -t diytomcat .
docker images
4、启动镜像
docker run -d -p 9090:8080 --name davinatomcat -v /home/davina/build/tomcat/test:/usr/local/apache-tomcat-xxx/webapps/test -v /home/davina/build/tomcat/tomcatlogs/:/usr/local/apache-tomcat-xxx/logs diytomcat
5、访问测试
docker exec -it ... /bin/bash
ll
ls -l
curl localhost:9090
6、发布项目(由于做了卷挂载,直接在本地编写项目就可以发布)
cd /usr/ /test
mkdir WEB-INF
cd WEB-INF
vim web.xml
<?xml version="1.0" encoding="UTF-8"?>
<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>
vim index.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>hello.davina</title>
</head>
<body>
Hello World!<br/>
<%
System.out.println("......my test web logs ........ " );
%>
</body>
</html>
访问 localhost:9090/test
发现:项目部署成功,可以直接访问
我们以后的开发步骤:需要掌握Dockerfile的编写,之后的一切都是使用docker镜像来发布运行
发布自己的镜像:发布到 DockerHub 上
1、地址 https://hub.docker.com/ 注册自己的账号
2、确定这个账号可以登录
3、在我们的服务器上提交镜像
docker login --help
docker login -u davina
4、提交自己的镜像
docker push davina/diytomcat:1.0
# push 镜像的问题
# 解决,增加一个 tag
docker tag [IMAGE ID] push davina/diytomcat:1.0
docker images
docker push davina/diytomcat:1.0