docker基础学习笔记(代码片段)

Dream_飞翔 Dream_飞翔     2023-02-01     700

关键词:


前言

学习了docker命令后,接下来要进行学习的就是docker中比较核心的知识:容器数据卷、dockerFile以及docker网络,在这里将学习docker基础的过程记录下来


一、容器数据卷

docker的理念是将我们写好的应用和环境进行打包成为一个镜像。

1. 什么是容器数据卷?

如果我们都将数据放在容器中,将容器删除以后,数据就会丢失。因此就引出了将数据持久化的需求。因此就有了容器之间数据共享的技术:将Docker容器中产生的数据同步到本地。这就是容器数据卷的技术:也叫目录的挂载,将容器内的目录挂载到本机上面
图解

容器数据卷的一个好处是哪怕此时容器没有启动但是要修改容器内的数据只需在本地操作即可,同时容器间也可以进行数据的共享。


2. 通过命令使用数据卷

使用方法: 使用命令来进行挂载:-v

docker run -it -v 主机目录:容器目录

# 测试:
# 运行centos容器,并将容器中的/home目录挂载到主机中的/home/ceshi目录下
[root@VM-16-16-centos home]# docker run -it -v /home/ceshi:/home centos /bin/bash
...按快捷键Ctrl + P + Q退出容器...
# 查看当前正在运行的容器
[root@VM-16-16-centos ceshi]# docker ps
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]# docker inspect b46ad200daed

此处省略其它数据...
"Mounts": [
	
		"Type": "bind",           # 绑定的形式
        "Source": "/home/ceshi",  # 主机内地址
        "Destination": "/home",   # docker容器内的地址
        "Mode": "",
        "RW": true,
        "Propagation": "rprivate"
     
],
此处省略其它数据...


此时将容器删除后会发现挂载到本地的数据卷没有丢失,仍然存储在本机


查看数据卷

在可以进行挂载卷以后,可以通过相应的命令来查看数据卷的挂载信息

docker volume [参数]

# 可选参数
Commands:
  create      # 创建一个数据卷
  inspect     # 查看数据卷的元数据
  ls          # 查看所有的数据卷
  rm          # 移除一个或多个数据卷


匿名挂载

匿名挂载就是我们在进行挂载时不写主机内路径,只写容器内路径docker会自动帮我们在主机生成一个目录用于容器的数据挂载

-v 容器内路径

# 例如:
# 查看所有数据卷信息
[root@VM-16-16-centos home]# docker volume ls   
DRIVER    VOLUME NAME
# 以下就是匿名挂载
local     4bf18cbb2a6128f80fcb499803fc40fd4205255766da919c1dfa0e86accf1944
local     4f417a0068e19f84c0f26a287ad1fde01cc07897d6be80122b7c21f574d78e02
local     7e51a5b64ea902b4035769321b4156dbe9c118f5e32a3e5c70cf8c23968d5db8
local     33119b40b12d49c1d325d8630c8cec5aeb6ceb3c225691e32d6aa407399a4b58

像这样VOLUME_NAME中没有具体的名字,只有一串地址值的挂载方式就叫匿名挂载


具名挂载

同理,与匿名挂载相反,具名挂载就是在挂载前通过-v 卷名:容器内路径来进行挂载

-v 卷名:容器内路径

# 例如:

# 将centos容器的/home/ceshi目录下的内容挂载到主机,并且将数据卷的名称设置为juming-centos
[root@VM-16-16-centos home]# docker run -d -it  -v juming-centos:/home/ceshi centos
ddfcb311e27b8bd3e592c89ef0f453e72d3f9031f2b7b8975553b946a14841a8

# 查看所有的挂载列表
[root@VM-16-16-centos home]# docker volume ls   
DRIVER    VOLUME NAME
local     db38f0d2d4fd98997ae86acfcf096cfff6b39230963aeb323da14d1e942e2d08
local     juming-centos

但是此时只知道将容器内的数据卷挂载到了主机,具体挂载到了哪个位置则需要使用inspect来查看

# 通过具体的数据卷名称来查看数据卷的元数据
[root@VM-16-16-centos home]# docker volume inspect juming-centos   
[
    
        "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,文件中的内容指令全部为大写,文件中的每一个命令都是镜像中的一层

在这里写一个测试文件来进行测试

# 编辑dockerfile文件
[root@VM-16-16-centos testDockerfile]# vim dockerfile
# 查看编辑的文件内容    
[root@VM-16-16-centos testDockerfile]# cat dockerfile
FROM centos

VOLUME ["volume01","volume02"]

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

# 在输出文件内容没有问题时,开始根据dockerfile构建docker镜像
[root@VM-16-16-centos testDockerfile]# docker build -f dockerfile -t centos:1.0 .
Sending build context to Docker daemon  2.048kB
# 基础的镜像
Step 1/4 : FROM centos
 ---> 5d0da3dc9764
# 通过VOLUME进行挂载
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

# 根据dockerfile构建好docker镜像后查看
[root@VM-16-16-centos testDockerfile]# docker images
REPOSITORY     TAG       IMAGE ID       CREATED              SIZE
# 这里就是我们刚才通过dockerfile构建的镜像
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]# docker run -it 30a7c5c2798f /bin/bash


此时的数据卷一定在本机有一个同步的目录,在dockerfile中VOLUME这一行中没有指定数据卷的名称,为匿名挂载

# 在容器内跳转到volume01目录下
[root@6e08f4a4abbd /]# cd volume01
# 在该目录下新建container.txt文件
[root@6e08f4a4abbd volume01]# touch container.txt
# 在不结束容器运行的前提下退出容器
[root@6e08f4a4abbd volume01]# read escape sequence
# 查看当前容器的元数据
[root@VM-16-16-centos testDockerfile]# docker inspect 6e08f4a4abbd

...... 此处省略其他数据 ......

"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": ""
	
],

... 此处省略其他数据 ...

测试刚才在容器中新建的文件是否同步到了主机

这种方式就是数据卷的挂载,未来在构建自己的镜像时会经常使用这种挂载方式。


数据卷容器


这这里启动三个容器来进行测试,通过刚才自己写的镜像来启动

# 启动第一个容器并命名为docker01
[root@VM-16-16-centos _data]# docker run -it --name docker01 centos:1.0
[root@837e1ade25ff /]# ls
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]# docker run -it --name docker02 --volumes-from docker01 centos:1.0
[root@f40031fc1017 /]# ls -l
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
# 在创建的docker02容器中也有了挂载的数据卷
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 ~]# docker ps
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
# 进入到容器docker02中
[root@VM-16-16-centos ~]# docker attach 822ae9cfcc8d
# 跳转到docker02的volume01目录下
[root@822ae9cfcc8d /]# cd volume01
# 查看当前目录下的文件,发现此时docker02容器的volume01的目录下有在docker01中volume01目录中创建的文件
[root@822ae9cfcc8d volume01]# ls
docker01.txt

图解

在测试成功两个容器相互挂载后,现在再增加一个是否仍然可以挂载呢?
现在创建第三个容器docker03容器挂载到docker01容器上

[root@VM-16-16-centos ~]# docker run -it --name docker03 --volumes-from docker01 centos:1.0
[root@6b7b0023d7c9 /]# cd volume01
[root@6b7b0023d7c9 volume01]# ls
docker01.txt
[root@6b7b0023d7c9 volume01]# touch docker03.txt
[root@6b7b0023d7c9 volume01]# [root@VM-16-16-centos ~]# docker ps
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 ~]# docker attach 837e1ade25ff
[root@837e1ade25ff volume01]# ls
docker01.txt  docker03.txt

此时容器docker02和docker03此时都挂载到了docker01上,那么又会产生一个问题,就是当我们将docker01容器删除或停止以后,docker02和docker03容器中的数据是否仍然存在?接着进行测试

测试结果发现,删除docker01容器后依旧可以访问挂载到docker01中的文件,因此可以发现,在docker 容器挂载是双向拷贝的概念,类似于vue中的v-model双向数据绑定,可以实现两个容器的数据同步

图解

结论:容器之间配置信息的传递,数据容器的生命周期一直持续到没有容器使用为止。一旦持久化到了本地,哪怕把所有的容器删除掉,这个时候本地的数据同样是不会删除的


二、DockerFile

1. 什么是dockerfile?

dockerfile是用来构建docker镜像的文件,就是一个命令参数脚本

构建步骤

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

查看官方是如何制作镜像文件的:https://hub.docker.com/

当点击daockerfile的链接跳转到GitHub上时,可以看到官方dockerfile的源码


2. DockerFile构建过程

基础知识:

  1. 每个关键字(指令)都必须是大写字母
  2. 指令是从上到下顺序执行的
  3. “#” 表示注释
  4. 每一个指令都会创建一个新的镜像层,并提交

dockerfile是面向开发的,以后要发布项目、做镜像时就需要编写dockerfile文件

步骤:开发、部署、运维

  1. DockerFile:构建文件,定义了一切的步骤
  2. DockerImages:通过DockerFile构建生成的镜像,最终发布和运行的产品
  3. 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镜像中过来的,然后配置需要的软件和配置来进行构建

# 跳转到home目录下
[root@VM-16-16-centos ~]# cd /home
# 新建dockerfile的目录
[root@VM-16-16-centos home]# mkdir dockerfile
# 跳转到dockerfile目录中
[root@VM-16-16-centos home]# cd dockerfile
# 新建并编辑dockerfile文件
[root@VM-16-16-centos dockerfile]# vim mydockerfile

------------------- 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]# docker images
REPOSITORY     TAG       IMAGE ID       CREATED          SIZE
mycentos       1.0       b87f31e57281   13 minutes ago   340MB  # 这里就是我们通过dockerfile构建的镜像
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]# docker run -it mycentos:1.0
# 查看当前镜像的工作路径
[root@df7b4314eb48 local]# pwd
/usr/local


三、综合实战:制作Tomcat镜像

1. 准备压缩包

制作tomcat镜像需要使用到Tomcat的压缩包以及JDK的压缩包

下载链接

  1. Tomcat8.5.7https://tomcat.apache.org/download-80.cgi
  2. JDK8https://www.oracle.com/java/technologies/javase/javase8-archive-downloads.html

2. 编写Dockerfile文件

官方命名为Dockerfilebuild时就会自动寻找这个文件,就不需要 -f 来进行指定了
在dockerfile文件中,使用ADD命令时添加的是压缩包的话,会自动进行解压

[root@VM-16-16-centos tomcat-dockerfile]# touch readme.txt
[root@VM-16-16-centos tomcat-dockerfile]# vim Dockerfile
[root@VM-16-16-centos tomcat-dockerfile]# cat 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]# docker build -t diytomcat .
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
 ---查看详情  

docker学习笔记-安装(代码片段)

Docker学习笔记基础概念/名词解释准备工作安装启动Docker服务Docker常用命令卸载参考资料基础概念/名词解释名词说明image镜像docker封装好的一个模板,里面是一个可运行的服务,以及运行此服务所需要的依赖环境。container... 查看详情

十分钟了解docker(我的docker学习笔记)(代码片段)

Docker学习笔记碎碎念背景知识Docker是什么Docker有什么用Docker原理Docker实践InstallDockerEngineonUbuntu常用命令操作实践镜像相关容器相关Docker作业练习学习参考资料碎碎念最近再学云原生技术与应用,之前没接触过,所以打算... 查看详情

docker入门学习笔记(代码片段)

docker基础操作入门笔记镜像操作容器操作数据卷操作(挂载)为什么要挂载如何挂载其他docker设置开机自启时间同步问题jar包的运行文章中几乎所有的写容器Id的地方,都可以使用容器名称来写命令镜像操作列出镜像... 查看详情

小白学习docker基础篇(代码片段)

系列文章:-小白学Docker之基础篇-小白学Docker之Compose-小白学Docker之SwarmPS:以下是个人作为新手小白学习docker的笔记总结1.docker是什么百科上的解释是这样的:Docker是一个开源的应用容器引擎,让开发者可以打包他... 查看详情

docker学习笔记——镜像制作(dockerfile)(代码片段)

文章目录Docker容器镜像1.容器技术2.容器镜像介绍3.制作基础镜像4.应用镜像制作使用commit提交镜像5.使用Dockerfile创建应用镜像1)Dockerfile关键字2)Dockerfile应用案例6.容器镜像在dockerhost存储位置1)写时复制与用时分配2)Overlay及Overlay27.d... 查看详情

docker学习笔记(代码片段)

Docker概述类似集装箱隔离,jar—容器(mysql,redis)----发布到仓库-----从仓库下载Docker历史2010年dotcloud公司成立2013Docker开源2014年4月9日,Docker1.0发布在此之前都是用的虚拟机基于go语言开发Docker安装#卸载旧版本yumremo... 查看详情

docker学习笔记docker基础操作实,docker仓库数据卷,网络基础学习

Docker学习笔记【3】Docker仓库实操,创建私有仓库,实操数据卷、数据卷容器,实操网络基础 ---------高级网络配置和部分实战案例学习=============================================================Docker学习笔记【1】Docker相关概念,基本操作... 查看详情

docker学习笔记总结(代码片段)

文章目录1.卸载docker服务步骤(实用!!)2.docker私有库3.容器数据卷的使用4.容器卷和主机互通互联5.容器卷ro和rw读写规则6.卷的继承和共享7.docker安装tomcat8.docker安装mysql8.1运行mysql容器8.2dockermysql容器卷配置(非常重要)8.3docke... 查看详情

docker学习笔记总结(代码片段)

文章目录1.docker简介2.docker的三个组成3.docker的工作原理4.centos系统上安装docker5.阿里云镜像加速器6.dockerrun命令执行流程7.docker命令7.1帮助启动类命令7.2镜像命令7.3容器命令7.3.1dockerrun命令详解7.3.2dockerps命令详解7.3.3容器服务的一... 查看详情

docker学习笔记——docker管理容器(代码片段)

文章目录Docker管理容器1.容器&镜像&仓库&daemon&client之间的关系2.启动容器3.dockerdaemon管理4.docker命令行5.docker命令行实现容器管理搜索镜像(dockerhub)获取镜像(pull)打包传输镜像启动容器解决docker中的CtenOS8镜像无法使用yum... 查看详情

docker学习笔记——docker管理容器(代码片段)

文章目录Docker管理容器1.容器&镜像&仓库&daemon&client之间的关系2.启动容器3.dockerdaemon管理4.docker命令行5.docker命令行实现容器管理搜索镜像(dockerhub)获取镜像(pull)打包传输镜像启动容器解决docker中的CtenOS8镜像无法使用yum... 查看详情

docker学习笔记总结(代码片段)

文章目录1.dockernetwork简介2.dockernetwork网络模式3.docker底层容器ip和容器映射变化4.dockernetwork4.1bridge模式4.2host模式4.3none模式4.4container模式4.5自定义网络模式5.docker-compose容器编排简介6.compose的下载安装7.compose的几个核心概念8.compose... 查看详情

docker学习笔记(代码片段)

Docker1.安装Docker#1.yum包更新到最新yumupdate-y#2.安装需要的软件包,yum-util提供yun-config-manager功能,另外两个是devicemapper驱动依赖的yuminstall-yyum-utilsdevice-mapper-persistent-datalvm2#3.设置yum源yum-config-manager- 查看详情

docker学习笔记-仓库(代码片段)

Docker仓库是镜像存储、分发、部署的关键,制作好应用程序镜像后上传到仓库,使用Dockerdaemon从仓库拉取后运行,我们可以使用官方共有仓库dockerhub或者搭建私有仓库DockerHub包含众多镜像,无需登录就可以搜索和使用注册DockerHub... 查看详情

docker学习笔记总结(代码片段)

文章目录1.dockernetwork简介2.dockernetwork网络模式3.docker底层容器ip和容器映射变化4.dockernetwork4.1bridge模式4.2host模式4.3none模式4.4container模式4.5自定义网络模式5.docker-compose容器编排简介6.compose的下载安装7.compose的几个核心概念8.compose... 查看详情

docker学习笔记(代码片段)

前言在我之前的博文中用到过两次Docker,但所涉及的内容过于碎片,因此想系统地将Docker的知识整理一下。Docker基本概念docker最重要的三个概念是:镜像(image),容器(container),仓库(re... 查看详情

docker学习笔记(代码片段)

前言在我之前的博文中用到过两次Docker,但所涉及的内容过于碎片,因此想系统地将Docker的知识整理一下。Docker基本概念docker最重要的三个概念是:镜像(image),容器(container),仓库(re... 查看详情