docker===》commit镜像、部署nginx、tomcat、容器数据卷挂载、实战MySQL同步数据

一、commit镜像

#1.docker commit 提交容器成为一个新的副本

#命令和get原理类似
docker commit -m="提交的描述信息" -a="作者" [容器ID]  目标镜像名:[TAG]

#实战测试
 - 启动一个默认的tomcat
 - 发现这个默认的tomcat,是没有webapps应用,镜像的原因,官方的镜像默认web apps下面是没有文件的
 - 我自己拷贝进去了进本的文件
 - 将我们操作过的容器通过commit提交为一个镜像,我们以后就使用我们修改过的镜像即可,这就是我们自己的一个修改的镜像。

在这里插入图片描述

二、用docker部署nginx

#1.搜索镜像
[root@docker ~]# docker search nginx
NAME                               DESCRIPTION                                     STARS     OFFICIAL   AUTOMATED
nginx                              Official build of Nginx.                        14607     [OK]       
jwilder/nginx-proxy                Automated Nginx reverse proxy for docker con…   1988                 [OK]
richarvey/nginx-php-fpm            Container running Nginx + PHP-FPM capable of…   811                  [OK]
jc21/nginx-proxy-manager           Docker container for managing Nginx proxy ho…   163                  
linuxserver/nginx                  An Nginx container, brought to you by LinuxS…   142                  
tiangolo/nginx-rtmp                Docker image with Nginx using the nginx-rtmp…   119                  [OK]
jlesage/nginx-proxy-manager        Docker container for Nginx Proxy Manager        97                   [OK]
bitnami/nginx                      Bitnami nginx Docker Image 
........

#2.下载镜像
[root@docker ~]# docker pull nginx
Using default tag: latest
latest: Pulling from library/nginx
a076a628af6f: Already exists 
0732ab25fa22: Already exists 
d7f36f6fe38f: Already exists 
f72584a26f32: Already exists 
7125e4df9063: Already exists 
Digest: sha256:10b8cc432d56da8b61b070f4c7d2543a9ed17c2b23010b43af434fd40e2ca4aa
Status: Downloaded newer image for nginx:latest
docker.io/library/nginx:latest

#3.查看镜像
[root@docker ~]# docker images
REPOSITORY   TAG       IMAGE ID       CREATED        SIZE
redis        latest    621ceef7494a   2 months ago   104MB
nginx        latest    f6d0b4767a6c   2 months ago   133MB
centos       latest    300e315adb2f   3 months ago   209MB


#4.运行镜像
[root@docker ~]# docker run -d --name nginx01 -p 3344:80 nginx
WARNING: IPv4 forwarding is disabled. Networking will not work.
517fcb76337275dbd6a2e0a5ddfcca4ca821a288d9b5c05fa9be82835f78ee9d
注:-d:后台运行  -name:给容器命名  -p:宿主机端口,容器内部端口

#5.查看运行的容器
[root@docker ~]# docker ps
CONTAINER ID   IMAGE     COMMAND                  CREATED         STATUS         PORTS                  NAMES
517fcb763372   nginx     "/docker-entrypoint.…"   2 minutes ago   Up 2 minutes   0.0.0.0:3344->80/tcp   nginx01

#6.本地主机测试端口(网页已经可以打开查看)
[root@docker ~]# curl localhost:3344
<!DOCTYPE html>
<html>
<head>
<title>Welcome to nginx!</title>
<style>
    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>

#7.外网测试:10.0.0.30:3344

三、使用docker部署tomact

#1.下载镜像
[root@docker ~]# docker pull tomact
Using default tag: latest
Error response from daemon: Get https://registry-1.docker.io/v2/library/tomact/manifests/latest: dial tcp: lookup registry-1.docker.io on 223.5.5.5:53: server misbehaving


#2.运行镜像
[root@docker ~]# docker run -d -p 3355:8080 --name tomcat01 tomcat
Unable to find image 'tomcat:latest' locally
latest: Pulling from library/tomcat
b9a857cbf04d: Pull complete 
d557ee20540b: Pull complete 
3b9ca4f00c2e: Pull complete 
667fd949ed93: Pull complete 
661d3b55f657: Pull complete 
511ef4338a0b: Pull complete 
a56db448fefe: Pull complete 
00612a99c7dc: Pull complete 
326f9601c512: Pull complete 
c547db74f1e1: Pull complete 
Digest: sha256:94cc18203335e400dbafcd0633f33c53663b1c1012a13bcad58cced9cd9d1305
Status: Downloaded newer image for tomcat:latest
WARNING: IPv4 forwarding is disabled. Networking will not work.
59e723b71f788628c3b778531900ccd2c65f3a7febfe209c7892bb26bf221834

#3.查看运行镜像
[root@docker ~]# docker ps
CONTAINER ID   IMAGE     COMMAND                  CREATED          STATUS          PORTS                    NAMES
59e723b71f78   tomcat    "catalina.sh run"        2 minutes ago    Up 2 minutes    0.0.0.0:3355->8080/tcp   tomcat01
517fcb763372   nginx     "/docker-entrypoint.…"   20 minutes ago   Up 20 minutes   0.0.0.0:3344->80/tcp     nginx01

#4.测试访问
curl localhost:3355
10.0.0.30:3355

四、容器数据卷

1.什么是容器数据卷

在这里插入图片描述
docker的理念回顾
将应用和环境打包成一个镜像
数据?如果数据都在容器中,那么我们容器删除,数据会丢失!(需求:数据持久化)
MySQL,容器删除了,删库跑路!(需求:MySQL数据可以存储在本地)
容器之间可以有一个数据共享技术!docker容器中产生的数据,同步到本地!
这就是卷技术,目录的挂载,将我们容器内的目录挂载到linux上面!
总结:容器的持久化和同步操作!容器间也是可以数据共享的!

2.使用数据卷

1.方法一:直接使用命令来挂载 -v 【方式二:dockerfile】

[root@docker ~]# docker run -it -v /home/ceshi:/home centos /bin/bash
                                  指定主机目录:容器挂载目录
[root@docker ~]# cd /home  #切换到主机家目录查看挂载目录
[root@docker home]# ll
总用量 0
drwxr-xr-x 2 root root 6 3月  20 06:11 ceshi
[root@docker ~]# docker inspect  #查看挂载详细信息

在这里插入图片描述
测试挂载:

目录同步测试:容器到主机
#1.容器内部
[root@92109883794f /]# cd /home
[root@92109883794f home]# ls
[root@92109883794f home]# touch test.java
[root@92109883794f home]# ls
test.java
#2.主机上查看
[root@docker ~]# cd /home/ceshi/
[root@docker ceshi]# ll
总用量 0
[root@docker ceshi]# ls
test.java

#1.主机上修改内容测试:主机到容器
[root@92109883794f home]# exit  #要先停掉容器
exit
[root@docker ~]# cd /home/ceshi/
[root@docker ceshi]# ll
总用量 0
[root@docker ceshi]# ls
test.java
[root@docker ceshi]# vim test.java 
hello world 123

#2.在容器内文件查看内容
[root@docker ~]# docker ps -a
CONTAINER ID   IMAGE     COMMAND                  CREATED          STATUS                     PORTS                    NAMES
92109883794f   centos    "/bin/bash"              32 minutes ago   Exited (0) 2 minutes ago                            quizzical_grothendieck
[root@docker ~]# docker start 92109883794f
92109883794f
[root@docker ~]# docker attach 92109883794f
[root@92109883794f /]# cd /home/
[root@92109883794f home]# ls
test.java
[root@92109883794f home]# cat test.java 
hello world 123

总结:挂载是双向的                

2.具名和匿名挂载

#1.匿名挂载
-v 容器内路径
docker run -d -p --name nginx01 -v /etc/nginx  #不指定主机路径直接是容器内部目录

#实例:
[root@docker ~]# docker run -d -P --name=nginx01 -v /etc/nginx nginx
70935dcb3f6965868c01ac8c0e6f064d852369e40014a8e77dddaef306bf7474
[root@docker ~]# docker volume ls  #查看所有卷的情况(匿名卷)
DRIVER    VOLUME NAME
local     407aab886d4ab09134f036628a7eac69604f204bd2facbae5b01c1ef3aa33a00 
#这种就是匿名挂载,我们在-v只写了容器内部的路径,没有写容器外的路径

#2.具名挂载
[root@docker ~]# docker run -d -P --name nginx02 -v juming-nginx:/etc/nginx nginx  
8ac7b6cf216f26d58f46c8af45754abcf08134460d2be802863b43516c08538f
注:-v 卷名:容器路径
[root@docker ~]# docker volume ls
DRIVER    VOLUME NAME
local     juming-nginx
[root@docker ~]# docker volume inspect juming-nginx  #查看具名挂载的具体信息
[
    {
    
    
        "CreatedAt": "2021-03-20T08:16:05+08:00",
        "Driver": "local",
        "Labels": null,
        "Mountpoint": "/var/lib/docker/volumes/juming-nginx/_data",
        "Name": "juming-nginx",
        "Options": null,
        "Scope": "local"
    }
]
注:所有的docker容器内的卷,没有指定目录的情况下都在/var/lib/docker/volumes/xxxx/_data
我们通过具名挂载可以方便的找到我们一个卷,大多数情况在使用具名挂载。

3.如何确定具名挂载还是匿名挂载,还是指定路径挂载?

 -v  容器内路径       #匿名挂载
 -v  卷名:容器内部路径   #具名挂载
 -v  /宿主机路径:容器内部路径   #指定路径挂载

扩展:
docker run -d -P --name=nginx02 -v juming-nginx:/etc/nginx:ro nginx
或
docker run -d -P --name=nginx02 -v juming-nginx:/etc/nginx:rw nginx
# 通过-v 容器内部路径:ro/rw改变读写权限
#ro 只要看到ro就说明这个路径只能通过宿主机来操作,容器内部无法操作!

五、实战MySQL同步数据

#1.下载镜像
[root@docker ~]# docker pull mysql
Using default tag: latest
latest: Pulling from library/mysql
a076a628af6f: Already exists 
f6c208f3f991: Pull complete 
88a9455a9165: Pull complete 
406c9b8427c6: Pull complete 
7c88599c0b25: Pull complete 
25b5c6debdaf: Pull complete 
43a5816f1617: Pull complete 
1a8c919e89bf: Pull complete 
9f3cf4bd1a07: Pull complete 
80539cea118d: Pull complete 
201b3cad54ce: Pull complete 
944ba37e1c06: Pull complete 
Digest: sha256:feada149cb8ff54eade1336da7c1d080c4a1c7ed82b5e320efb5beebed85ae8c
Status: Downloaded newer image for mysql:latest
docker.io/library/mysql:latest

#2.运行容器,需要数据挂载(安装MySQL需要设置密码)
[root@docker ~]# 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=123 --name mysql01 mysql
c9518317aa16b5110e49681474470bb0912b6d048f9258f63fa814c3a8a1f56f

#3.在主机查看映射路径
[root@docker ~]# cd /home
[root@docker home]# ll
总用量 0
drwxr-xr-x 2 root root 23 3月  20 06:46 ceshi
drwxr-xr-x 4 root root 30 3月  20 07:37 mysql
[root@docker home]# cd mysql/
[root@docker mysql]# ll
总用量 4
drwxr-xr-x 2 root    root    6 3月  20 07:37 conf
drwxr-xr-x 6 polkitd root 4096 3月  20 07:37 data

#如果我们将容器删除,发现挂载到本地的数据卷依旧没有消失,这就实现了容器数据持久化功能!

猜你喜欢

转载自blog.csdn.net/weixin_52492280/article/details/115105065
今日推荐