安装Docker
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
|
# 1. 卸载旧的版本
yum remove docker \
docker-client \
docker-client-latest \
docker-common \
docker-latest \
docker-latest-logrotate \
docker-logrotate \
docker-engine
# 2. 需要的安装包
yum install -y yum-utils
# 3. 设置镜像的仓库
yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
# 4. 更新yum软件包索引
yum makecache fast
# 5. 安装docker相关的依赖
yum install docker-ce docker-ce-cli containerd.io docker-compose-plugin
# 6. 启动docker
systemctl start docker
# 7. 使用docker version查看是否安装成功
# 8. Hello world
docker run hello-world
# 9. 查看一下下载的这个hello-world镜像
docker images
|
卸载Docker
1
2
3
4
5
6
|
# 1. 卸载依赖
yum remove docker-ce docker-ce-cli containerd.io docker-compose-plugin
# 2. 删除资源
rm -rf /var/lib/docker # docker的默认工作路径
rm -rf /var/lib/containerd
|
阿里云镜像加速
登录阿里云找到容器服务
![](/p/docker%E5%85%A5%E9%97%A8/aliyun.png)
找到镜像加速地址
![](/p/docker%E5%85%A5%E9%97%A8/address.png)
Docker为什么比vm快
Run流程
![](/p/docker%E5%85%A5%E9%97%A8/process.png)
Docker – 帮助命令
1
2
3
|
docker version # 显示docker的版本信息
docker info # 显示docker的系统信息,包括镜像和容器的数量
docker 命令 --help # 万能命令 帮助命令
|
docker命令文档
Docker – 镜像命令
查看镜像
docker images #查看所有本地的主机上的镜像
1
2
3
4
5
6
7
8
9
10
|
[root@docker ~]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
hello-world latest feb5d9fea6a5 15 months ago 13.3kB
# 解释
REPOSITORY 镜像的仓库源
TAG 镜像的标签
IMAGE ID 镜像的id
CREATED 镜像的创建时间
SIZE 镜像的大小
|
搜索镜像
docker search 镜像名称
1
2
3
4
5
6
7
|
[root@docker ~]# docker search mysql
NAME DESCRIPTION STARS OFFICIAL AUTOMATED
mysql MySQL is a widely used 13681 [OK]
mariadb MariaDB Server is a high 5225 [OK]
# 可选项 过滤条件
--filter=STARS=3000 # 搜索出来的镜像的STARS大于3000的
|
下载镜像
docker pull 镜像名称
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
|
[root@docker ~]# docker pull mysql[:tag] 可选项 tag 指定版本
Using default tag: latest
latest: Pulling from library/mysql
72a69066d2fe: Pull complete # 分层下载,docker镜像的核心
93619dbc5b36: Pull complete
99da31dd6142: Pull complete
626033c43d70: Pull complete
37d5d7efb64e: Pull complete
ac563158d721: Pull complete
d2ba16033dad: Pull complete
688ba7d5c01a: Pull complete
00e060b6d11d: Pull complete
1c04857f594f: Pull complete
4d7cfa90e6ea: Pull complete
e0431212d27d: Pull complete
Digest: sha256:e9027fe4d91c0153429607251656806cc784e914937271037f7738bd5b8e7709
Status: Downloaded newer image for mysql:latest
docker.io/library/mysql:latest
|
删除镜像
docker rmi 镜像ID #删除指定镜像
1
2
3
4
5
6
7
8
9
10
11
12
13
14
|
[root@docker ~]# docker rmi -f c20987f18b13
Untagged: mysql:5.7
Untagged: mysql@sha256:f2ad209efe9c67104167fc609cca6973c8422939491c9345270175a300419f94
Deleted: sha256:c20987f18b130f9d144c9828df630417e2a9523148930dc3963e9d0dab302a76
Deleted: sha256:6567396b065ee734fb2dbb80c8923324a778426dfd01969f091f1ab2d52c7989
Deleted: sha256:0910f12649d514b471f1583a16f672ab67e3d29d9833a15dc2df50dd5536e40f
Deleted: sha256:6682af2fb40555c448b84711c7302d0f86fc716bbe9c7dc7dbd739ef9d757150
Deleted: sha256:5c062c3ac20f576d24454e74781511a5f96739f289edaadf2de934d06e910b92
# 删除多个镜像
docker rmi -f 镜像id 镜像id 镜像id 镜像id
# 删除所有镜像
docker rmi -f $(docker images -aq)
|
Docker – 容器命令
说明: 有了镜像才可以创建容器,所以先下载一个centos镜像来测试学习
创建容器
docker run [可选参数] image 启动容器
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
|
# 新建容器并启动
docker run [可选参数] image
# 可选参数说明
--name='Name' 容器名字 tomcat01/tomcat02 用来区分容器
-d 后台方式运行
-it 使用交互方式运行,进入容器查看内容
-p 指定容器的端口 -p
-p ip:主机端口:容器端口
-p 主机端口:容器端口
-p 容器端口
-P 随机指定端口
# 测试,启动并进入容器
[root@docker ~]# docker run -it centos /bin/bash
[root@2913f3a8c3b9 /]# ls 查看容器内的centos
bin etc lib lost+found mnt proc run srv tmp var
dev home lib64 media opt root sbin sys usr
|
查看容器
docker ps # 查看当前正在运行中的容器
1
2
3
4
5
6
7
|
[root@docker /]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
# 可选参数说明
-a # 查看所有的容器,包括未运行的容器
-n=? # 显示最近创建的容器,?为显示个数
-q # 只显示容器的编号
|
退出容器
1
2
3
4
5
|
# 直接停止容器并退出
[root@2913f3a8c3b9 /]# exit
# 容器不停止退出
Ctrl + P + Q
|
删除容器
docker rm 容器ID # 删除指定容器,不能删除正在运行的容器
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
|
[root@docker /]# docker ps -aq
8f6cded1de29
2913f3a8c3b9
1e9519071c11
38e22de26669
[root@docker /]# docker rm 8f6cded1de29
8f6cded1de29
[root@docker /]# docker ps -aq
2913f3a8c3b9
1e9519071c11
38e22de26669
# 删除所有容器
docker rm -f $(docker ps -aq)
docker ps -a -q|xargs docker rm
|
启动容器
docker start 容器id
1
2
3
4
|
# 补充
docker restart 容器id # 重启容器
docker stop 容器id # 停止当前正在运行的容器
docker kill 容器id # 强制停止当前容器
|
常用的其他命令
后台启动容器
docker run -d 镜像名
1
2
3
4
5
6
7
8
|
[root@docker /]# docker run -d centos
eddc149d6e24582c1d8fe356f2d9559215f683ee10108fbeb4e4db435f7a3355
[root@docker /]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
# 问题 docker ps 发现 centos 停止了
# 常见的坑: docker 容器使用后台运行 就必须有一个前台进程,docker发现没有应用,就会自动停止
|
查看日志
docker logs
1
2
3
4
|
# 显示日志
-tf # 显示日志
--tail number # 要显示的日志条数
[root@docker /]# docker logs -tf --tail 10 容器id
|
查看容器中进程信息
docker top 容器id
1
2
3
|
[root@docker /]# docker top e4a8c1e80579
UID PID PPID C STIME TTY TIME CMD
root 2942 2923 0 16:02 pts/0 00:00:00 /bin/bash
|
查看镜像的元数据
docker inspect 容器id
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
|
[root@d6e2d66837c2 /]# [root@docker /]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
d6e2d66837c2 centos "/bin/bash" 12 seconds ago Up 11 seconds thirsty_rhodes
[root@docker /]# docker inspect d6e2d66837c2
[
{
"Id": "d6e2d66837c219ba3250c0f45ed984cdc6dd21c8cd23372f36dac3d65dd2e981",
"Created": "2023-01-12T08:38:21.597122836Z",
"Path": "/bin/bash",
"Args": [],
"State": {
"Status": "running",
"Running": true,
"Paused": false,
"Restarting": false,
"OOMKilled": false,
"Dead": false,
"Pid": 3243,
"ExitCode": 0,
"Error": "",
"StartedAt": "2023-01-12T08:38:21.896883638Z",
"FinishedAt": "0001-01-01T00:00:00Z"
},
]
|
进入当前正在运行的容器
我们通常容器都是使用后台方式运行的,需要进入容器,修改一些配置
1
2
3
4
5
6
7
8
9
10
|
# 我们通常容器都是使用后台方式运行的,需要进入容器,修改一些配置
# 进入容器方式一
docker exec -it 容器id bashShell
# 进入容器方式二
docker attach 容器id
# docker exec # 进入容器后开启一个新的终端,可以在里面操作
# docker attach # 进入容器正在执行的终端
|
从容器内拷贝文件到主机上
docker cp 容器id:容器内路径 目标的主机路径
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
|
# 查看home目录下,此时home目录下只有admin
[root@docker ~]# cd /home
[root@docker home]# ls
admin
# 启动docker
[root@docker home]# systemctl start docker
# 当前的镜像
[root@docker home]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
centos latest 5d0da3dc9764 16 months ago 231MB
# 新建一个容器并启动
[root@docker home]# docker run -it centos /bin/bash
# 进入docker容器内部
[root@47b3a0402593 /]# [root@docker home]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
47b3a0402593 centos "/bin/bash" 48 seconds ago Up 47 seconds dreamy_cerf
[root@docker home]# docker attach 47b3a0402593
[root@47b3a0402593 /]# ls
bin dev etc home lib lib64 lost+found media mnt opt proc root run sbin srv sys tmp usr var
[root@47b3a0402593 /]# cd /home
[root@47b3a0402593 home]# ls
# 在容器的home目录内新建一个文件
[root@47b3a0402593 home]# touch test.java
[root@47b3a0402593 home]# ls
test.java
[root@47b3a0402593 home]# exit
exit
[root@docker home]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
[root@docker home]# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
47b3a0402593 centos "/bin/bash" 2 hours ago Exited (0) 32 seconds ago dreamy_cerf
# 将文件拷贝到虚拟机上的home目录
[root@docker home]# docker cp 47b3a0402593:/home/test.java /home
[root@docker home]# ls
admin test.java
|
部署Nginx
搜索镜像
docker search nginx 或者 在 docker Hub上搜索,可以看到帮助文档
![](/p/docker%E5%85%A5%E9%97%A8/nginx.png)
下载镜像
docker pull nginx
1
2
3
4
5
6
7
8
9
10
11
12
|
[root@docker ~]# docker pull nginx
Using default tag: latest
latest: Pulling from library/nginx
a2abf6c4d29d: Pull complete
a9edb18cadd1: Pull complete
589b7251471a: Pull complete
186b1aaa4aa6: Pull complete
b4df32aa5a72: Pull complete
a0bcbecc962e: Pull complete
Digest: sha256:0d17b565c37bcbd895e9d92315a05c1c3c9a29f762b011a10c54a66cd53c9b31
Status: Downloaded newer image for nginx:latest
docker.io/library/nginx:latest
|
运行测试
docker run -d –name nginx -p 3344:80 nginx
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
|
[root@docker ~]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
nginx latest 605c77e624dd 12 months ago 141MB
centos latest 5d0da3dc9764 16 months ago 231MB
# 参数说明
# -d 后台运行
# --name 给容器命名
# -p 端口暴露 宿主机端口:容器内端口
[root@docker ~]# docker run -d --name nginx -p 3344:80 nginx
e25907b771ccef91c5e34472a1865c007eba33606a0acb4d738efad0ca72dc61
[root@docker ~]# curl localhost:3344
<!DOCTYPE html>
<html>
<head>
<title>Welcome to nginx!</title>
<style>
html { color-scheme: light dark; }
body { width: 35em; margin: 0 auto;
font-family: Tahoma, Verdana, Arial, sans-serif; }
</style>
</head>
<body>
<h1>Welcome to nginx!</h1>
<p>If you see this page, the nginx web server is successfully installed and
working. Further configuration is required.</p>
<p>For online documentation and support please refer to
<a href="http://nginx.org/">nginx.org</a>.<br/>
Commercial support is available at
<a href="http://nginx.com/">nginx.com</a>.</p>
<p><em>Thank you for using nginx.</em></p>
</body>
</html>
|
进入容器
1
2
3
4
5
6
|
[root@docker ~]# docker exec -it nginx /bin/bash
root@e25907b771cc:/# whereis nginx
nginx: /usr/sbin/nginx /usr/lib/nginx /etc/nginx /usr/share/nginx
root@e25907b771cc:/# cd /etc/nginx
root@e25907b771cc:/etc/nginx# ls
conf.d fastcgi_params mime.types modules nginx.conf scgi_params uwsgi_params
|
部署tomcat
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
|
# 官方的使用
docker run -it --rm tomcat:9.0
# 我们之前的启动都是后台,停止了容器之后,容器还是可以查到
# docker run -it --rm一般用来测试,用完即删
# 1.下载镜像
# docker pull tomcat:9.0
# 2.启动运行
# docker run -d --name tomcat -p 3355:8080 tomcat:9.0
# 3.测试访问没有问题,但是报404错误,进入容器,一探究竟
# docker exec -it tomcat /bin/bash
# 4.发现问题
root@bc6aaf2c5773:/usr/local/tomcat# ll # linux命令缺失
bash: ll: command not found
root@bc6aaf2c5773:/usr/local/tomcat# cd webapps/
root@bc6aaf2c5773:/usr/local/tomcat/webapps# ls
root@bc6aaf2c5773:/usr/local/tomcat/webapps# # webapps目录下为空
# 5.原因:阿里云镜像,默认是最小的镜像,所有不必要都剔除掉,保证最小可运行环境
# 6.解决方式 webapps目录下的文件可以从webapps.dist文件下拷贝
root@bc6aaf2c5773:/usr/local/tomcat# cp -r webapps.dist/* webapps
root@bc6aaf2c5773:/usr/local/tomcat# cd webapps
root@bc6aaf2c5773:/usr/local/tomcat/webapps# ls
ROOT docs examples host-manager manager
# 7.ip+端口访问,发现能正常看到页面了
|
部署ES+Kibana
1
2
|
# 启动 Elasticsearch,若没有这个镜像则会下载下来
docker run -d --name elasticsearch --net somenetwork -p 9200:9200 -p 9300:9300 -e "discovery.type=single-node" elasticsearch:7.6.2
|
问题,ES比较占内存,所以一核2G的配置很卡,CPU占用大,所以在测试通过后,尽快关闭,解决这个问题
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
|
# 说明ES安装成功
[root@docker ~]# curl localhost:9200
{
"name" : "08145df3cc6e",
"cluster_name" : "docker-cluster",
"cluster_uuid" : "td15eI9XTp-yIObP-XKP4w",
"version" : {
"number" : "7.6.2",
"build_flavor" : "default",
"build_type" : "docker",
"build_hash" : "ef48eb35cf30adf4db14086e8aabd07ef6fb113f",
"build_date" : "2020-03-26T06:34:37.794943Z",
"build_snapshot" : false,
"lucene_version" : "8.4.0",
"minimum_wire_compatibility_version" : "6.8.0",
"minimum_index_compatibility_version" : "6.0.0-beta1"
},
"tagline" : "You Know, for Search"
}
# 使用docker stats查看CPU的状态,此时占用较大
[root@docker ~]# docker stats
CONTAINER ID NAME CPU % MEM USAGE / LIMIT MEM % NET I/O BLOCK I/O PIDS
ab215f92c5d1 elasticsearch 173.32% 606.9MiB / 972.3MiB 62.42% 656B / 0B 2.56GB / 73.8MB 19
|
解决方式 增加内存的限制,修改配置文件 -e 环境配置修改
1
2
|
# 参数说明 设定最小是64M,最大是512M
docker run -d --name elasticsearch --net somenetwork -p 9200:9200 -p 9300:9300 -e "discovery.type=single-node" -e ES_JAVA_OPTS="-Xms64m -Xmx512m" elasticsearch:7.6.2
|
1
2
3
4
|
# 查看CPU的状态 --- 发现占用率下降很多了
[root@docker ~]# docker stats
CONTAINER ID NAME CPU % MEM USAGE / LIMIT MEM % NET I/O BLOCK I/O PIDS
1ac5d28a7744 elasticsearch 0.15% 394.7MiB / 972.3MiB 40.59% 1.25kB / 996B 214MB / 1.66MB 43
|
可视化工具
Portainer
Docker 图形化界面管理工具,提供一个后台面板供我们操作
1
2
3
|
# 启动Portainer
docker run -d -p 8088:9000 --name portainer \
--restart=always -v /var/run/docker.sock:/var/run/docker.sock --privileged=true portainer/portainer
|
浏览器访问http://ip+端口,获取如下页面,首次登录,需要创建用户名密码
![](/p/docker%E5%85%A5%E9%97%A8/portainer.png)
下一步,选择本地
![](/p/docker%E5%85%A5%E9%97%A8/local.png)
进入面板,即可看到详细信息,例如镜像数量,容器情况等
![](/p/docker%E5%85%A5%E9%97%A8/panel.png)
Docker镜像详解
镜像是什么
- 是一种轻量化,可执行的独立软件包
- 用来打包软件运行环境和基于运行环境开发的软件
- 包括代码,运行时,库,环境变量和配置文件
所有的应用,直接打包docker镜像,就可以直接运行
Docker镜像加载原理
UnionFS(联合文件系统)
- 是一种分层,轻量级并且高性能的文件系统
- 一次同时加载多个文件系统,在外面看来,只能看到一个文件系统,联合加载会把各层文件系统叠加起来,这样最终的文件系统会包含所有底层的文件和目录
Docker镜像加载原理
docker的镜像实际上由一层一层的文件系统组成,这种层次的文件系统就是UnionFS
bootfs主要包含bootloader和kernel,bootloader主要是引导加载Kernel,Linux刚启动会加载boofs文件系统,Docker容器的最底层就是bootfs,这一层与我们典型的Linux/Unix系统是一样的,包含boot加载器和内核。当boot加载完成之后整个内核就都在内存中了,此时内存的使用权已由bootfs转交给内核,此时系统也会卸载bootfs
rootfs,在bootfs之上,包含的就是典型Linux系统中的/dev,/proc,/bin,/etc等标准目录和文件,rootfs就是各种不同的操作系统发行版,比如Ubuntu,CentOs等等
![](/p/docker%E5%85%A5%E9%97%A8/principle.png)
平时我们安装进虚拟机的CentOs通常要几个G,为什么Docker这里的才200M
1
2
3
|
[root@docker ~]# docker images centos
REPOSITORY TAG IMAGE ID CREATED SIZE
centos latest 5d0da3dc9764 16 months ago 231MB
|
对于一个精简的OS,rootfs可以很小,只需要包含最基本的命令,工具和程序库就可以了,因为底层直接用Host的kernel,自己只需要提供rootfs就可以了。由此可见,对于不同的linux发行版,bootfs基本是一致的,只有rootfs有差别,所以它们可以公用bootfs
分层理解
分层的镜像
我们可以去下载一个镜像,注意观察下载的日志输出,可以看到是一层一层的在下载
1
2
3
4
5
6
7
8
9
10
11
12
|
[root@docker ~]# docker pull redis
Using default tag: latest
latest: Pulling from library/redis
a2abf6c4d29d: Already exists
c7a4e4382001: Pull complete
4044b9ba67c9: Pull complete
c8388a79482f: Pull complete
413c8bb60be2: Pull complete
1abfd3011519: Pull complete
Digest: sha256:db485f2e245b5b3329fdc7eff4eb00f913e09d8feb9ca720788059fdc2ed8339
Status: Downloaded newer image for redis:latest
docker.io/library/redis:latest
|
思考!为什么 Docker镜像要采用这种分层的结构呢?
最大的好处,莫过于是资源共享了,比如有多个镜像都从相同的base镜像构建而来,那么宿主机只需在磁盘上保留一份base镜像,同时内存中也只需要加载一份base镜像,这样就可以为所有的容器服务了,而且镜像的每一层都可以被共享
使用 docker image inspect redis:latest 查看镜像的分层方式
1
2
3
4
5
6
7
8
9
10
11
|
"RootFS": {
"Type": "layers",
"Layers": [
"sha256:2edcec3590a4ec7f40cf0743c15d78fb39d8326bc029073b41ef9727da6c851f",
"sha256:9b24afeb7c2f21e50a686ead025823cd2c6e9730c013ca77ad5f115c079b57cb",
"sha256:4b8e2801e0f956a4220c32e2c8b0a590e6f9bd2420ec65453685246b82766ea1",
"sha256:529cdb636f61e95ab91a62a51526a84fd7314d6aab0d414040796150b4522372",
"sha256:9975392591f2777d6bf4d9919ad1b2c9afa12f9a9b4d260f45025ec3cc9b18ed",
"sha256:8e5669d8329116b8444b9bbb1663dda568ede12d3dbcce950199b582f6e94952"
]
},
|
特点
Docker镜像都是只读的,当容器启动时,一个新的可写层被加载到镜像的顶部!
这一层就是我们通常说的容器层,容器之下都叫镜像层!
commit镜像
1
2
|
docker commit # 提交容器成为一个新的副本
docker commit -m="提交的描述信息" -a="作者" 容器id 目标镜像名:[TAG]
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
|
# 启动一个默认的tomcat
[root@docker ~]# docker run -it -p 8080:8080 tomcat:9.0
Using CATALINA_BASE: /usr/local/tomcat
Using CATALINA_HOME: /usr/local/tomcat
Using CATALINA_TMPDIR: /usr/local/tomcat/temp
Using JRE_HOME: /usr/local/openjdk-11
Using CLASSPATH: /usr/local/tomcat/bin/bootstrap.jar:/usr/local/tomcat/bin/tomcat-juli.jar
Using CATALINA_OPTS:
NOTE: Picked up JDK_JAVA_OPTIONS: --add-opens=java.base/java.lang=ALL-UNNAMED --add-opens=java.base/java.io=ALL-UNNAMED --add-opens=java.base/java.util=ALL-UNNAMED --add-opens=java.base/java.util.concurrent=ALL-UNNAMED --add-opens=java.rmi/sun.rmi.transport=ALL-UNNAMED
INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Server version name: Apache Tomcat/9.0.56
# 发现这个默认的tomcat 是没有webapps应用的 官方的镜像webapps目录下默认没有文件
[root@docker ~]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
0a2f11347ef5 tomcat:9.0 "catalina.sh run" 11 minutes ago Up 10 minutes 0.0.0.0:8080->8080/tcp, :::8080->8080/tcp loving_nightingale
[root@docker ~]# docker exec -it 0a2f11347ef5 /bin/bash
root@0a2f11347ef5:/usr/local/tomcat# cd webapps
root@0a2f11347ef5:/usr/local/tomcat/webapps# ls
root@0a2f11347ef5:/usr/local/tomcat/webapps#
# 将webapps.dist目录下的文件拷贝到webapps目录下
root@0a2f11347ef5:/usr/local/tomcat# cp -r webapps.dist/* webapps
root@0a2f11347ef5:/usr/local/tomcat# cd webapps
root@0a2f11347ef5:/usr/local/tomcat/webapps# ls
ROOT docs examples host-manager manager
# 将我们操作过的这个容器通过commit提交为一个新的镜像,我们以后就使用这个镜像即可
[root@docker ~]# docker commit -a="satan" -m="add webapps app" 0a2f11347ef5 tomcat2:2.0
sha256:6ae624cd277319840b93a7208edb4f32cfb56dc03fd3e40db8b11f2af1e414d4
[root@docker ~]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
tomcat2 2.0 6ae624cd2773 14 minutes ago 685MB
nginx latest 605c77e624dd 12 months ago 141MB
tomcat 9.0 b8e65a4d736d 13 months ago 680MB
redis latest 7614ae9453d1 13 months ago 113MB
centos latest 5d0da3dc9764 16 months ago 231MB
portainer/portainer latest 580c0e4e98b0 22 months ago 79.1MB
elasticsearch 7.6.2 f29a1ee41030 2 years ago 791MB
|
容器数据卷
什么是容器数据卷
回顾之前的不足
- 我们的数据都在容器中,如果我们容器删除,数据就会丢失
- mysql数据库中的数据,如果容器删掉了,重要数据无备份
因此,有了新的需求
解决方案
- 容器之间有一个数据共享的技术,Docker容器中产生的数据,同步到本地
这就是卷技术!目录的挂载,将我们容器内的目录,挂载到Linux上面!