docker学习4------docker数据卷和dockerfile文件(18-33集)

目录

docker镜像讲解

镜像是什么

 Docker镜像加载原理

UnionFS(联合文件系统)

 Docker镜像加载原理

 分层理解

分层的镜像

 加深理解

 特点

 如何提交一个自己的镜像    commit镜像

如果想要保存当前容器的状态,就可以通过commit来提交,获得一个镜像,就好比我们以前学习VM时候,快照

容器数据卷

什么是容器数据卷

docker的理念回顾

 总结一句话:容器的持久化和同步操作!容器间也是可以数据共享的!

使用数据卷

方式一:直接使用命令来挂载     ~~~    -v

实战:安装mysql

具名与匿名挂载

初识DockerFile

​编辑 数据卷容器

结论:1、容器之间配置信息的传递,数据卷容器的生命周期一直持续到没有容器使用为止2、一旦持久化到了本地,本地的数据是不会删除的

DockFile

DockFile介绍

 DockFile构建过程

 DockerFile的指令

 实战测试 

创建一个自己的centos:这里2022年需要将FROM centos改为FROM centos:7

列出本地进行变更历史 

CMD 和 ENTRYPOINT 区别

dockerfile中的很多命令都十分相似,需要了解他们的区别,可以对比他们然后测试

实战Tomcat镜像

发布自己的镜像:发布到 DockerHub 上

 小结​编辑


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

 小结

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值