Day180.容器数据卷&DockerFile -Docker

Docker

容器数据卷

什么是容器数据卷

docker的理念回顾

将应用和环境打包成一个镜像!

数据?如果数据都在容器中,那么我们容器删除,数据就会丢失!需求:数据可以持久化

MySQL,容器删除了,删库跑路!需求:MySQL数据可以存储在本地!

容器之间可以有一个数据共享的技术!Docker容器中产生的数据,同步到本地!

这就是卷技术!目录的挂载,将我们容器内的目录,挂载到Linux上面!

image-20200516105258456

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


使用数据卷

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

-v, --volume list                    Bind mount a volume

docker run -it -v 主机目录:容器内目录  -p 主机端口:容器内端口
➜ ~ docker run -it -v /home/ceshi:/home centos /bin/bash

#通过 docker inspect 容器id 【查看容器详细信息】

image-20200515191647970

测试文件的同步

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-rM7zQVAF-1612105467969)(C:\Users\PePe\AppData\Roaming\Typora\typora-user-images\image-20210129170842966.png)]

再来测试!

1、停止容器

2、宿主机修改文件

3、启动容器

4、容器内的数据依旧是同步的

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-jYXGHHmN-1612105467971)(C:\Users\PePe\AppData\Roaming\Typora\typora-user-images\image-20210129171556844.png)]

就算容器关闭了,主机对映射的文件修改,容器再启动,也是同步的

修改是双向的!!!,容器删除文件 ,那主机也会删除文件

好处:我们以后修改只需要在本地修改即可,容器内会自动同步!


实战:安装MySQL

思考:MySQL的数据持久化的问题

# 获取mysql镜像
➜  ~ docker pull mysql:5.7
# 运行容器,需要做数据挂载 #安装启动mysql,需要配置密码的,这是要注意点!
# 参考官网hub 
docker run --name some-mysql -e MYSQL_ROOT_PASSWORD=my-secret-pw -d mysql:tag

#启动我们得
-d 后台运行
-p 端口映射
-v 卷挂载
-e 环境配置
-- name 容器名字
➜  ~ docker run -d -p 5321:3306 -v /home/mysql/conf:/etc/mysql/conf.d -v /home/mysql/data:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=-e MYSQL_ROOT_PASSWORD=00000 --name mysql01 mysql:5.7

# 启动成功之后,我们在本地使用sqlyog来测试一下
# sqlyog-连接到服务器的5321--和容器内的3306映射 

# 在本地测试创建一个数据库,查看一下我们映射的路径是否ok!

假设我们将容器删除

image-20200516112532950

发现,我们挂载到本地的数据卷依旧没有丢失,实现了容器数据持久化功能


具名和匿名挂载

# 匿名挂载
-v 容器内路径     [没有指定容器外主机的路径]
docker run -d -P --name nginx02 -v /ect/nginx nginx

# 查看所有 volume[容器数据卷] 的情况
[root@izbp1h9ynqgizuhp85e2xkz data]# docker volume ls

下面的乱七八糟乱码的就是匿名挂载,只写了容器内路径,没有写容器外的路径
在这里插入图片描述

# 具名挂载
-v 卷名:容器内路径
docker run -d -P --name nginx03 -v juming-nginx:/etc/nginx nginx 

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ORscD0jr-1612105467978)(C:\Users\PePe\AppData\Roaming\Typora\typora-user-images\image-20210129185935385.png)]

# 查看具名挂载的具体详细信息
docker volume inspect juming-nginx

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-kWVkEjV1-1612105467982)(C:\Users\PePe\AppData\Roaming\Typora\typora-user-images\image-20210129190340781.png)]

所有的docker容器内的卷,没有指定目录的情况下都是在 /var/lib/docker/volumes/xxxx/_data

如果指定了目录,docker volume ls 是查看不到的

我们通过具名挂载可以方便的找到我们的 一个卷 ,大多数情况在使用具名挂载


如何确定是具名挂载、匿名挂载、指定路径挂载?

# 三种挂载: 匿名挂载、具名挂载、指定路径挂载
-v 容器内路径			 #匿名挂载
-v 卷名:容器内路径		   #具名挂载
-v /宿主机路径:容器内路径  #指定路径挂载 docker volume ls 是查看不到的

拓展

# 通过 -v 容器内路径: ro rw 改变读写权限
ro  # readonly 只读
rw  # readwrite 可读可写
docker run -d -P --name nginx05 -v juming:/etc/nginx:ro nginx
docker run -d -P --name nginx05 -v juming:/etc/nginx:rw nginx

# ro 只要看到ro就说明这个路径只能通过宿主机来操作,容器内部是无法操作!

初始Dockerfile

Dockerfile 就是用来构建docker镜像的构建文件!命令脚本!先体验一下!

通过这个脚本可以生成镜像,镜像是一层一层的,基本就是一个个命令,每个命令都是一层

# 创建一个dockerfile文件,名字可以随便 建议Dockerfile
# 文件中的内容 指令(大写) 参数

FROM centos
VOLUME ["volume01","volume02"]

CMD echo "-----end------"
CMD /bin/bash

# 这里的每个命令,就是镜像的一层
docker build -f dockerfile -t achang/centos . 

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-kdJbJfKK-1612105467985)(C:\Users\PePe\AppData\Roaming\Typora\typora-user-images\image-20210129210416722.png)]

启动自己写的镜像

右下角的两个目录就是我们生产镜像的时候自动挂载的,数据卷目录

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-kiz5eF3Q-1612105467986)(C:\Users\PePe\AppData\Roaming\Typora\typora-user-images\image-20210129211211446.png)]

这个卷和外部一定有一个同步的目录

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-SSEAMWIQ-1612105467988)(C:\Users\PePe\AppData\Roaming\Typora\typora-user-images\image-20210129211321304.png)]

查看一下卷挂载

docker inspect 容器id

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-xJcIsMfd-1612105467990)(C:\Users\PePe\AppData\Roaming\Typora\typora-user-images\image-20210129212435936.png)]

测试一下刚才的文件是否同步出去了!

这种方式使用的十分多,因为我们通常会构建自己的镜像!

假设构建镜像时候没有挂载卷,要手动镜像挂载 -v 卷名:容器内路径!


数据卷容器

多个MySQL同步数据!

命名的容器挂载数据卷!

image-20200516122047440

--volumes-from list              Mount volumes from the specified container(s)
# 测试,我们通过刚才启动的

image-20200516123020050

image-20200516123128475

# 测试:可以删除docker01,查看一下docker02和docker03是否可以访问这个文件
# 测试依旧可以访问

image-20200516123355034

多个mysql实现数据共享

--volumes-from # 来指定要挂载哪个容器
➜  ~ docker run -d -p 3306:3306 -v /home/mysql/conf:/etc/mysql/conf.d -v /home/mysql/data:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=00000 --name mysql01 mysql:5.7
➜  ~ docker run -d -p 3307:3306 -e MYSQL_ROOT_PASSWORD=00000 --name mysql02 --volumes-from mysql01  mysql:5.7
# 这个时候,可以实现两个容器数据同步!

结论:

容器之间的配置信息的传递,数据卷容器的生命周期一直持续到没有容器使用为止。

但是一旦你持久化到了本地,这个时候,本地的数据是不会删除的!


DockerFile

DockerFile介绍

dockerfile是用来构建docker镜像的文件!命令参数脚本!

构建步骤:

1、 编写一个dockerfile文件

2、 docker build 构建称为一个镜像

3、 docker run运行镜像

4、 docker push发布镜像(DockerHub 、阿里云仓库)

查看官方是怎么做的?

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-XtU5Ehjf-1612105467991)(C:\Users\PePe\AppData\Roaming\Typora\typora-user-images\image-20210130095725610.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-qqsatfZY-1612105467994)(C:\Users\PePe\AppData\Roaming\Typora\typora-user-images\image-20210130095851093.png)]

很多官方镜像都是基础包,很多功能没有,我们通常会自己搭建自己的镜像

官方既然可以制作镜像,那我们也可以!


DockerFile构建过程

基础知识:

1、每个保留关键字(指令)都是必须是大写字母

2、执行从上到下顺序

3、#表示注释

4、每一个指令都会创建提交一个新的镜像层,并提交!

image-20200516131756997

Dockerfile是面向开发的,我们以后要发布项目,做镜像,就需要编写dockerfile文件,这个文件十分简单!

Docker镜像逐渐成企业交付的标准,必须要掌握!

DockerFile:构建文件,定义了一切的步骤,源代码

DockerImages:通过DockerFile构建生成的镜像,最终发布和运行产品。

Docker容器:容器就是镜像运行起来提供服务。


DockerFile的指令

FROM				# 基础镜像,一切从这里开始构建
MAINTAINER			# 镜像是谁写的, 姓名+邮箱
RUN					# 镜像构建的时候需要运行的命令
ADD					# 步骤,tomcat镜像,这个tomcat压缩包!添加内容 添加同目录
WORKDIR				# 镜像的工作目录
VOLUME				# 挂载的目录
EXPOSE				# 保留端口配置
CMD					# 指定这个容器启动的时候要运行的命令,只有最后一个会生效,可被替代。
ENTRYPOINT			# 指定这个容器启动的时候要运行的命令,可以追加命令
ONBUILD				# 当构建一个被继承 DockerFile 这个时候就会运行ONBUILD的指令,触发指令。
COPY				# 类似ADD,将我们文件拷贝到镜像中
ENV					# 构建的时候设置环境变量!

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-yx2ei2pD-1612105467997)(C:\Users\PePe\AppData\Roaming\Typora\typora-user-images\image-20210130174740007.png)]


实战测试

官方centos写的DockerFile:

Docker Hub中99%的镜像都是从这个基本镜像过来的FROM scratch,然后配置需要的软件和配置来进行构建的

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-mf1mEoSz-1612105467999)(C:\Users\PePe\AppData\Roaming\Typora\typora-user-images\image-20210130192111879.png)]

创建一个自己的centos

1、编写DockerFile文件

# 1、编写DockerFile文件
FROM centos
MAINTAINER achang<[email protected]>

ENV MYPATH /usr/local
WORKDIR $MYPATH

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

EXPOSE 5299

CMD echo $MYPATH
CMD echo "---END---"
CMD /bin/bash

2、通过文件构建执行镜像

# 2、通过文件构建执行镜像
# -t -target 目标名(自定义)
# -f -file 指定哪个dockerfile文件

# 命令 docker build -f 文件路径 -t 镜像名:[tag] .

[root@izbp1h9ynqgizuhp85e2xkz dockerfile]# docker build -f myDockerFile-centos -t mycentos:0.1 .
Sending build context to Docker daemon  2.048kB
Step 1/10 : FROM centos
 ---> 300e315adb2f
Step 2/10 : MAINTAINER achang<[email protected]>
 ---> Using cache
 ---> 82edb0ac69c2
Step 3/10 : ENV MYPATH /usr/local
 ---> Using cache
 ---> e2325f72ff50
Step 4/10 : WORKDIR $MYPATH
 ---> Using cache
 ---> c3c6e1f65466
Step 5/10 : RUN yum -y install vim
 ---> Using cache
 ---> f3c0242d3727
Step 6/10 : RUN yum -y install net-tools
 ---> Running in 1d695361c61b
Last metadata expiration check: 0:04:02 ago on Sat Jan 30 11:45:24 2021.
Dependencies resolved.
================================================================================
 Package         Architecture Version                        Repository    Size
================================================================================
Installing:
 net-tools       x86_64       2.0-0.52.20160912git.el8       baseos       322 k

Transaction Summary
================================================================================
Install  1 Package

Total download size: 322 k
Installed size: 942 k
Downloading Packages:
net-tools-2.0-0.52.20160912git.el8.x86_64.rpm   1.5 MB/s | 322 kB     00:00    
--------------------------------------------------------------------------------
Total                                           444 kB/s | 322 kB     00:00     
Running transaction check
Transaction check succeeded.
Running transaction test
Transaction test succeeded.
Running transaction
  Preparing        :                                                        1/1 
  Installing       : net-tools-2.0-0.52.20160912git.el8.x86_64              1/1 
  Running scriptlet: net-tools-2.0-0.52.20160912git.el8.x86_64              1/1 
  Verifying        : net-tools-2.0-0.52.20160912git.el8.x86_64              1/1 

Installed:
  net-tools-2.0-0.52.20160912git.el8.x86_64                                     

Complete!
Removing intermediate container 1d695361c61b
 ---> 55b1ed9cadea
Step 7/10 : EXPOSE 5299
 ---> Running in b0dcf59f3190
Removing intermediate container b0dcf59f3190
 ---> d8c0d393ea76
Step 8/10 : CMD echo $MYPATH
 ---> Running in 208ebfa2d3ba
Removing intermediate container 208ebfa2d3ba
 ---> 57ac789f1e5b
Step 9/10 : CMD echo "---END---"
 ---> Running in f173e33f2b6c
Removing intermediate container f173e33f2b6c
 ---> 13b13c7594ba
Step 10/10 : CMD /bin/bash
 ---> Running in 85751b8ad3f4
Removing intermediate container 85751b8ad3f4
 ---> 0513d130fa1b
Successfully built 0513d130fa1b
Successfully tagged mycentos:0.1

测试运行

已经有vim指令

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-onyo9lP7-1612105468001)(C:\Users\PePe\AppData\Roaming\Typora\typora-user-images\image-20210130195204976.png)]

有了ifconfig命令

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Xm0txhkO-1612105468003)(C:\Users\PePe\AppData\Roaming\Typora\typora-user-images\image-20210130195536811.png)]

列出本地进行的变更历史

docker history 镜像ID

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ZElGpbcz-1612105468005)(C:\Users\PePe\AppData\Roaming\Typora\typora-user-images\image-20210130195802971.png)]


CMD 和 ENTRYPOINT区别

CMD					# 指定这个容器启动的时候要运行的命令,只有最后一个会生效,可被替代。
ENTRYPOINT			# 指定这个容器启动的时候要运行的命令,可以追加命令

测试cmd

# 编写dockerfile文件
$ vim dockerfile-test-cmd

# dockerfile内容
FROM centos
CMD ["ls","-a"]


# 构建镜像
$ docker build  -f dockerfile-test-cmd -t cmd-test:0.1 .
# 运行镜像
$ docker run cmd-test:0.1
.
..
.dockerenv
bin
dev

# 想追加一个命令  -l 成为ls -al
[root@izbp1h9ynqgizuhp85e2xkz dockerfile]# docker run cmd-test -l
docker: Error response from daemon: OCI runtime create failed: container_linux.go:370: starting container process caused: exec: "-l": executable file not found in $PATH: unknown.

# cmd的情况下 -l 替换了CMD成为了CMD["ls","-l"]。 -l  -->不是命令所以报错

# 需要写以下,通过ls -al 完整的命令 替换上面的 ls -a
# [root@izbp1h9ynqgizuhp85e2xkz dockerfile]# docker run cmd-test ls -al

发现CMD命令是替换之前的命令,所以就需要写原生命令


测试ENTRYPOINT

# 编写dockerfile文件
$ vim dockerfile-test-entrypoint

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

[root@izbp1h9ynqgizuhp85e2xkz dockerfile]# docker run 2c09d7cc807f
.
..
.dockerenv
bin
dev
etc
home
lib
lib64
lost+found
media
mnt
opt
proc
root
run
sbin
srv
sys
tmp
usr
var


# 我们的命令,是直接拼接在 ENTRYPOINT 命令后面的
[root@izbp1h9ynqgizuhp85e2xkz dockerfile]# docker run 2c09d7cc807f -l
total 56
drwxr-xr-x   1 root root 4096 Jan 30 12:41 .
drwxr-xr-x   1 root root 4096 Jan 30 12:41 ..
-rwxr-xr-x   1 root root    0 Jan 30 12:41 .dockerenv
lrwxrwxrwx   1 root root    7 Nov  3 15:22 bin -> usr/bin
drwxr-xr-x   5 root root  340 Jan 30 12:41 dev
drwxr-xr-x   1 root root 4096 Jan 30 12:41 etc
drwxr-xr-x   2 root root 4096 Nov  3 15:22 home
lrwxrwxrwx   1 root root    7 Nov  3 15:22 lib -> usr/lib
lrwxrwxrwx   1 root root    9 Nov  3 15:22 lib64 -> usr/lib64
drwx------   2 root root 4096 Dec  4 17:37 lost+found
drwxr-xr-x   2 root root 4096 Nov  3 15:22 media
drwxr-xr-x   2 root root 4096 Nov  3 15:22 mnt
drwxr-xr-x   2 root root 4096 Nov  3 15:22 opt
dr-xr-xr-x 123 root root    0 Jan 30 12:41 proc
dr-xr-x---   2 root root 4096 Dec  4 17:37 root
drwxr-xr-x  11 root root 4096 Dec  4 17:37 run
lrwxrwxrwx   1 root root    8 Nov  3 15:22 sbin -> usr/sbin
drwxr-xr-x   2 root root 4096 Nov  3 15:22 srv
dr-xr-xr-x  13 root root    0 Jan 30 12:41 sys
drwxrwxrwt   7 root root 4096 Dec  4 17:37 tmp
drwxr-xr-x  12 root root 4096 Dec  4 17:37 usr
drwxr-xr-x  20 root root 4096 Dec  4 17:37 var

发现了ENTRYPOINT 命令可以在命令后面叠加


实战:Tomcat镜像

1、准备镜像文件

准备tomcat 和 jdk到当前目录,编写好README

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-UAIWTJEz-1612105468007)(C:\Users\PePe\AppData\Roaming\Typora\typora-user-images\image-20210131112528338.png)]

2、编写dokerfile,官方命名Dockerfilebuild时会自动寻找这个文件,就不需要-f指定了

FROM centos
MAINTAINER achang<[email protected]>
COPY readme.txt /usr/local/readme.txt

ADD jdk-8u161-linux-x64.tar.gz /usr/local
ADD apache-tomcat-9.0.41.tar.gz /usr/local

RUN yum -y install vim

ENV MYPATH /usr/local
ENV JAVA_HOME /usr/local/jdk1.8.0.161
ENV CLASSPATH $JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
ENV CATALINA_HOME /usr/local/apache-tomcat-9.0.41
ENV CATALINA_BASH /usr/local/apache-tomcat-9.0.41
ENV PATH $PATH:$JAVA_HOME/bin:$CATALINA_HOME/lib:$CATALINA_HOME/bin

WORKDIR $MYPATH

EXPOSE 8080

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

3、构建镜像,通过build命令构建,不要忘记 .

# docker build -t dirtomcat .
[root@izbp1h9ynqgizuhp85e2xkz test]# docker build -t dirtomcat .
Sending build context to Docker daemon  201.2MB
Step 1/15 : FROM centos
 ---> 300e315adb2f
Step 2/15 : MAINTAINER achang<[email protected]>
 ---> Using cache
 ---> 82edb0ac69c2
Step 3/15 : COPY readme.txt /usr/local/readme.txt
 ---> 6139a88f8d11
Step 4/15 : ADD jdk-8u161-linux-x64.tar.gz /usr/local
 ---> 9de12dfdd661
Step 5/15 : ADD apache-tomcat-9.0.41.tar.gz /usr/local
 ---> 1686e6a55ab1
Step 6/15 : RUN yum -y install vim
 ---> Running in 61ebe2e2edec
CentOS Linux 8 - AppStream                      1.3 MB/s | 6.3 MB     00:04    
CentOS Linux 8 - BaseOS                         507 kB/s | 2.3 MB     00:04    
CentOS Linux 8 - Extras                          15 kB/s | 8.6 kB     00:00    
Last metadata expiration check: 0:00:01 ago on Sun Jan 31 03:56:13 2021.
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-15.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-15.el8.x86_64.rpm        294 kB/s |  39 kB     00:00    
(2/5): vim-filesystem-8.0.1763-15.el8.noarch.rp 1.3 MB/s |  48 kB     00:00    
(3/5): vim-enhanced-8.0.1763-15.el8.x86_64.rpm  3.7 MB/s | 1.4 MB     00:00    
(4/5): vim-common-8.0.1763-15.el8.x86_64.rpm     12 MB/s | 6.3 MB     00:00    
(5/5): which-2.21-12.el8.x86_64.rpm             100 kB/s |  49 kB     00:00    
--------------------------------------------------------------------------------
Total                                           4.7 MB/s | 7.8 MB     00:01     
warning: /var/cache/dnf/appstream-02e86d1c976ab532/packages/gpm-libs-1.20.7-15.el8.x86_64.rpm: Header V3 RSA/SHA256 Signature, key ID 8483c65d: NOKEY
CentOS Linux 8 - AppStream                      1.3 MB/s | 1.6 kB     00:00    
Importing GPG key 0x8483C65D:
 Userid     : "CentOS (CentOS Official Signing Key) <[email protected]>"
 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-15.el8.x86_64                          4/5 
  Running scriptlet: gpm-libs-1.20.7-15.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-15.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-15.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 61ebe2e2edec
 ---> 72d40532bcc0
Step 7/15 : ENV MYPATH /usr/local
 ---> Running in 64953e87fb82
Removing intermediate container 64953e87fb82
 ---> 157e51dd50d8
Step 8/15 : ENV JAVA_HOME /usr/local/jdk1.8.0.161
 ---> Running in 28e653e0397f
Removing intermediate container 28e653e0397f
 ---> 6bed45cea259
Step 9/15 : ENV CLASSPATH $JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
 ---> Running in 714dfa4e0f32
Removing intermediate container 714dfa4e0f32
 ---> 00438e7f51e3
Step 10/15 : ENV CATALINA_HOME /usr/local/apache-tomcat-9.0.41
 ---> Running in f38eb17a0979
Removing intermediate container f38eb17a0979
 ---> 633b86a072f4
Step 11/15 : ENV CATALINA_BASH /usr/local/apache-tomcat-9.0.41
 ---> Running in d26c47994ef8
Removing intermediate container d26c47994ef8
 ---> b7903f70d65c
Step 12/15 : ENV PATH $PATH:$JAVA_HOME/bin:$CATALINA_HOME/lib:$CATALINA_HOME/bin
 ---> Running in 2afe4f349677
Removing intermediate container 2afe4f349677
 ---> aedaee0f98df
Step 13/15 : WORKDIR $MYPATH
 ---> Running in 0a013008277c
Removing intermediate container 0a013008277c
 ---> 9760898da7dd
Step 14/15 : EXPOSE 8080
 ---> Running in d69219c8493e
Removing intermediate container d69219c8493e
 ---> 46190e253c19
Step 15/15 : CMD /usr/local/apache-tomcat-9.0.41/bin/startup.sh && tail -F /usr/localapache-tomcat-9.0.41/bin/logs/catalina.out
 ---> Running in 3f0b6ea8f2ed
Removing intermediate container 3f0b6ea8f2ed
 ---> 08532a1cace3
Successfully built 08532a1cace3
Successfully tagged dirtomcat:latest

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-uv57gZcp-1612105468009)(C:\Users\PePe\AppData\Roaming\Typora\typora-user-images\image-20210131115934224.png)]

4、run镜像

[root@izbp1h9ynqgizuhp85e2xkz test]# docker run -d -p 5333:8080 --name achangtomcat -v /home/test/tomcat/test:/usr/local/apache-tomcat-9.0.41/webapps/test -v /home/test/build/tomcat/logs/:/usr/local/apache-tomcat-9.0.41/logs diytomcat

5、访问测试

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

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-OsWEYu0M-1612105468011)(C:\Users\PePe\AppData\Roaming\Typora\typora-user-images\image-20210131204732418.png)]

web.xml:↓

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" id="WebApp_ID" version="2.5">
    <display-name>db</display-name>
    <welcome-file-list>
        <welcome-file>index.html</welcome-file>
        <welcome-file>index.htm</welcome-file>
        <welcome-file>index.jsp</welcome-file>
        <welcome-file>default.html</welcome-file>
        <welcome-file>default.htm</welcome-file>
        <welcome-file>default.jsp</welcome-file>
    </welcome-file-list>
</web-app>

index.jsp:↓

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>hello,achang</title>
</head>
<body>
Hello World!<br/>
<%
System.out.println("-----test-----");
%>
</body>
</html>

发现:项目部署成功,可以直接访问!

我们以后开发的步骤:需要掌握Dockerfile的编写!我们之后的一切都是使用docker镜像来发布运行!


发布自己的镜像

Dockerhub

1、地址 https://hub.docker.com/

2、确定这个账号可以登录

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-P83C4QsT-1612105468012)(C:\Users\PePe\AppData\Roaming\Typora\typora-user-images\image-20210131205815771.png)]

3、登录

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Y91KAGmp-1612105468014)(C:\Users\PePe\AppData\Roaming\Typora\typora-user-images\image-20210131205910095.png)]

# docker login --help
Usage:  docker login [OPTIONS] [SERVER]

Log in to a Docker registry.
If no server is specified, the default is defined by the daemon.

Options:
  -p, --password string   Password
      --password-stdin    Take the password from stdin
  -u, --username string   Username

4、提交 push镜像

[root@izbp1h9ynqgizuhp85e2xkz logs]# docker push diytomcat
Using default tag: latest
The push refers to repository [docker.io/library/diytomcat]
8c521d4e223e: Preparing 
150761504cc4: Preparing 
303269e3e2c1: Preparing 
f26a70e72c57: Preparing 
2653d992f4ef: Preparing 
denied: requested access to the resource is denied #push失败,被拒绝

会发现push不上去,因为如果没有前缀的话默认是push到 官方的library

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-CscdlwZA-1612105468015)(C:\Users\PePe\AppData\Roaming\Typora\typora-user-images\image-20210131220255059.png)]

# 解决方法
前提保证 docker login -u XXXX账号 -p XXX密码 # 登录过

# docker tag 容器名 docker库你自己的id/自定义名
docker tag diytomcat achang3306/diytomcat

# 再 push

docker push achang3306/diytomcat

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-vm7n8pOF-1612105468017)(C:\Users\PePe\AppData\Roaming\Typora\typora-user-images\image-20210131220244759.png)]


阿里云镜像服务上

进入阿里云容器镜像服务

1、登录阿里云

2、找到容器镜像服务

3、创建名称容器(一个大容器,下面放很多的镜像)

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ZgOLthgE-1612105468018)(C:\Users\PePe\AppData\Roaming\Typora\typora-user-images\image-20210131220714492.png)]

4、创建容器镜像

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-vsqRoWSG-1612105468020)(C:\Users\PePe\AppData\Roaming\Typora\typora-user-images\image-20210131220907044.png)]

5、浏览阿里云

注意:要根据阿里云要求的格式书写指令

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-luun73Aj-1612105468021)(C:\Users\PePe\AppData\Roaming\Typora\typora-user-images\image-20210131230202294.png)]


看官网 很详细 https://cr.console.aliyun.com/repository/

$ sudo docker login --username=[email protected] registry.cn-hangzhou.aliyuncs.com
$ sudo docker tag [ImageId] registry.cn-hangzhou.aliyuncs.com/achang/achang-test:[镜像版本号]
$ sudo docker push registry.cn-hangzhou.aliyuncs.com/achang/achang-test:[镜像版本号]

示例:

# 登录获得权限
[root@izbp1h9ynqgizuhp85e2xkz logs]# docker login [email protected] registry.cn-hangzhou.aliyuncs.com
Password: 
WARNING! Your password will be stored unencrypted in /root/.docker/config.json.
Configure a credential helper to remove this warning. See
https://docs.docker.com/engine/reference/commandline/login/#credentials-store

Login Succeeded

[root@izbp1h9ynqgizuhp85e2xkz logs]# docker images
REPOSITORY             TAG       IMAGE ID       CREATED         SIZE
diytomcat              latest    27fce10d773a   3 hours ago     668MB
achang/tomcat          1.0       27fce10d773a   3 hours ago     668MB
achang1010/diytomcat   latest    27fce10d773a   3 hours ago     668MB
achang123/diytomcat    0.1       27fce10d773a   3 hours ago     668MB
achang168/diytomcat    latest    27fce10d773a   3 hours ago     668MB
achang3306/diytomcat   latest    27fce10d773a   3 hours ago     668MB
achang555/tomcat       0.1       27fce10d773a   3 hours ago     668MB
entrypoint-test        latest    2c09d7cc807f   26 hours ago    209MB
cmd-test               latest    8e57c56caa7e   27 hours ago    209MB
mycentos               0.1       0513d130fa1b   27 hours ago    282MB
achang/centos          latest    d4fdaffa138e   2 days ago      209MB
tomcat02               1.0       116c7aa5521d   2 days ago      654MB
mysql                  5.7       a70d36bc331a   12 days ago     449MB
redis                  latest    621ceef7494a   2 weeks ago     104MB
tomcat                 9.0       040bdb29ab37   2 weeks ago     649MB
tomcat                 latest    040bdb29ab37   2 weeks ago     649MB
nginx                  latest    f6d0b4767a6c   2 weeks ago     133MB
centos                 latest    300e315adb2f   7 weeks ago     209MB
portainer/portainer    latest    62771b0b9b09   6 months ago    79.1MB
elasticsearch          7.6.2     f29a1ee41030   10 months ago   791MB
hello-world            latest    bf756fb1ae65   13 months ago   13.3kB

# 将要上传阿里云的资源改名
[root@izbp1h9ynqgizuhp85e2xkz logs]# docker tag 27fce10d773a registry.cn-hangzhou.aliyuncs.com/achang/achang-test:0.1
[root@izbp1h9ynqgizuhp85e2xkz logs]# docker images
REPOSITORY                                             TAG       IMAGE ID       CREATED         SIZE
diytomcat                                              latest    27fce10d773a   3 hours ago     668MB
registry.cn-hangzhou.aliyuncs.com/achang/achang-test   0.1       27fce10d773a   3 hours ago     668MB
achang/tomcat                                          1.0       27fce10d773a   3 hours ago     668MB
achang1010/diytomcat                                   latest    27fce10d773a   3 hours ago     668MB
achang123/diytomcat                                    0.1       27fce10d773a   3 hours ago     668MB
achang168/diytomcat                                    latest    27fce10d773a   3 hours ago     668MB
achang3306/diytomcat                                   latest    27fce10d773a   3 hours ago     668MB
achang555/tomcat                                       0.1       27fce10d773a   3 hours ago     668MB
entrypoint-test                                        latest    2c09d7cc807f   26 hours ago    209MB
cmd-test                                               latest    8e57c56caa7e   27 hours ago    209MB
mycentos                                               0.1       0513d130fa1b   27 hours ago    282MB
achang/centos                                          latest    d4fdaffa138e   2 days ago      209MB
tomcat02                                               1.0       116c7aa5521d   2 days ago      654MB
mysql                                                  5.7       a70d36bc331a   12 days ago     449MB
redis                                                  latest    621ceef7494a   2 weeks ago     104MB
tomcat                                                 9.0       040bdb29ab37   2 weeks ago     649MB
tomcat                                                 latest    040bdb29ab37   2 weeks ago     649MB
nginx                                                  latest    f6d0b4767a6c   2 weeks ago     133MB
centos                                                 latest    300e315adb2f   7 weeks ago     209MB
portainer/portainer                                    latest    62771b0b9b09   6 months ago    79.1MB
elasticsearch                                          7.6.2     f29a1ee41030   10 months ago   791MB
hello-world                                            latest    bf756fb1ae65   13 months ago   13.3kB

# 上传push想要的镜像
[root@izbp1h9ynqgizuhp85e2xkz logs]# docker push registry.cn-hangzhou.aliyuncs.com/achang/achang-test:0.1
The push refers to repository [registry.cn-hangzhou.aliyuncs.com/achang/achang-test]
8c521d4e223e: Pushed 
150761504cc4: Pushed 
303269e3e2c1: Pushed 
f26a70e72c57: Pushed 
2653d992f4ef: Pushed 
0.1: digest: sha256:2194133a2e9eed0f20a085ffbfe0e2d1af4015adc9120b4d38dc992f8d1a914e size: 1373

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-wNNlCSG6-1612105468023)(C:\Users\PePe\AppData\Roaming\Typora\typora-user-images\image-20210131230125029.png)]


小结

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Pt4VGH3H-1612105979557)(C:\Users\PePe\AppData\Roaming\Typora\typora-user-images\image-20210131231252118.png)]

猜你喜欢

转载自blog.csdn.net/qq_43284469/article/details/113487218
今日推荐