docker 学习笔记

安装docker

  1. 参考官方文档

https://docs.docker.com/engine/install/centos/

或者参考Linux学习笔记中软件安装

https://blog.csdn.net/zhang_peng0609/article/details/140966967

  1. 配置阿里云镜像加速
    在这里插入图片描述
    在这里插入图片描述

docker常用命令

  1. 使用docker官方文档: 命令说明
  2. 使用 docker --help 如下:在这里插入图片描述

帮助命令

docker version		
docker info 
docker --help

镜像基本命令

  1. docker images
[root@iZ2vcgjiopjasr9f0k3zrdZ docker]# docker images 
REPOSITORY   TAG       IMAGE ID       CREATED       SIZE
redis        latest    7614ae9453d1   2 years ago   113MB
mysql        5.7       c20987f18b13   2 years ago   448MB

可选参数:
  -a, --all        # 列出所有镜像         
  -f, --filter filter  
      --format string   
  -q, --quiet      # 只显示镜像id    
  1. docker search 镜像
[root@iZ2vcgjiopjasr9f0k3zrdZ docker]# docker search mysql
NAME                  DESCRIPTION                                     STARS     OFFICIAL
mysql                 MySQL is a widely used, open-source relation…   15326     [OK]
bitnami/mysql         Bitnami container image for MySQL               117       
google/mysql          MySQL server for Google Compute Engine          25        
elestio/mysql         Mysql, verified and packaged by Elestio         0         
rapidfort/mysql       RapidFort optimized, hardened image for MySQL   25
...     

可选参数示例:
# docker search mysql --filter=STARS=200
   
  1. docker pull 下载镜像
docker pull mysql 		#不指定版本,默认下载最新版本
docker pull mysql:5.7
  1. docker rmi 删除镜像
docker rmi mysql
Options:
  -f, --force      Force removal of the image		# 强制删除
      --no-prune   Do not delete untagged parents	# 不常用

[root@iZ2vcgjiopjasr9f0k3zrdZ docker]# docker images
REPOSITORY   TAG       IMAGE ID       CREATED       SIZE
redis        latest    7614ae9453d1   2 years ago   113MB
mysql        5.7       c20987f18b13   2 years ago   448MB
示例:可以通过镜像名字或者镜像ID删除
docker rmi -f mysql
docker rmi -f c20987f18b13

高级玩法:
docker rmi -f $(docker images -aq)  #复合语法:查询所有的镜像id,递归删除

容器基本命令

docker run

[root@iZ2vcgjiopjasr9f0k3zrdZ ~]# docker images
REPOSITORY   TAG       IMAGE ID       CREATED       SIZE
redis        latest    7614ae9453d1   2 years ago   113MB
mysql        5.7       c20987f18b13   2 years ago   448MB
centos       latest    5d0da3dc9764   2 years ago   231MB
[root@iZ2vcgjiopjasr9f0k3zrdZ ~]# docker run --help
Options:	
	--name  # 给容器命名
	-it		# 以交互模式进入启动的容器,最后面通常加上  /bin/bash  表示进入容器的控制台
	-p		# 端口映射 ,常用方式:主机端口:容器端口
	-d		# 后台方式运行

docker ps

[root@iZ2vcgjiopjasr9f0k3zrdZ ~]# docker ps   #列出运行中的容器
CONTAINER ID   IMAGE       COMMAND                  CREATED        STATUS         PORTS                                                  NAMES
c03e8df91fd1   mysql:5.7   "docker-entrypoint.s…"   42 hours ago   Up 3 seconds   0.0.0.0:3306->3306/tcp, :::3306->3306/tcp, 33060/tcp   mysql
5bd4e55b2617   redis       "docker-entrypoint.s…"   43 hours ago   Up 43 hours    0.0.0.0:6379->6379/tcp, :::6379->6379/tcp              redis
Options:
	-a		# 运行和未运行的全部容器
	-n		# 示例 docker ps -n=1 显示最近的一个容器
	-p 		# 只显示容器ID
[root@iZ2vcgjiopjasr9f0k3zrdZ ~]# docker run -it centos /bin/bash	# 以交互模式进入容器
[root@f1430dd80c45 /]# ls
bin  dev  etc  home  lib  lib64  lost+found  media  mnt  opt  proc  root  run  sbin  srv  sys  tmp  usr  var
[root@f1430dd80c45 /]# exit 	# 停止容器并退出
exit
[root@iZ2vcgjiopjasr9f0k3zrdZ ~]# docker ps
CONTAINER ID   IMAGE       COMMAND                  CREATED        STATUS          PORTS                                                  NAMES
c03e8df91fd1   mysql:5.7   "docker-entrypoint.s…"   42 hours ago   Up 33 seconds   0.0.0.0:3306->3306/tcp, :::3306->3306/tcp, 33060/tcp   mysql
5bd4e55b2617   redis       "docker-entrypoint.s…"   43 hours ago   Up 43 hours     0.0.0.0:6379->6379/tcp, :::6379->6379/tcp              redis
[root@iZ2vcgjiopjasr9f0k3zrdZ ~]# 

以交互模式进入容器后,不停止容器退出
使用快捷键:ctrl +P + Q

docker rm 容器id 删除容器
docker rm -f $(docker ps -aq) 递归删除全部容器; -f : # 强制删除

[root@iZ2vcgjiopjasr9f0k3zrdZ ~]# docker ps -a
CONTAINER ID   IMAGE       COMMAND                  CREATED          STATUS                      PORTS                                                  NAMES
f1430dd80c45   centos      "/bin/bash"              21 minutes ago   Exited (0) 21 minutes ago                                                          infallible_jones
c03e8df91fd1   mysql:5.7   "docker-entrypoint.s…"   42 hours ago     Up 22 minutes               0.0.0.0:3306->3306/tcp, :::3306->3306/tcp, 33060/tcp   mysql
5bd4e55b2617   redis       "docker-entrypoint.s…"   43 hours ago     Up 43 hours                 0.0.0.0:6379->6379/tcp, :::6379->6379/tcp              redis
[root@iZ2vcgjiopjasr9f0k3zrdZ ~]# docker rm f1430dd80c45	# 对于运行中的容器无法删除,可以加上  -f  强制删除
f1430dd80c45
[root@iZ2vcgjiopjasr9f0k3zrdZ ~]# docker ps -a
CONTAINER ID   IMAGE       COMMAND                  CREATED        STATUS          PORTS                                                  NAMES
c03e8df91fd1   mysql:5.7   "docker-entrypoint.s…"   42 hours ago   Up 22 minutes   0.0.0.0:3306->3306/tcp, :::3306->3306/tcp, 33060/tcp   mysql
5bd4e55b2617   redis       "docker-entrypoint.s…"   43 hours ago   Up 43 hours     0.0.0.0:6379->6379/tcp, :::6379->6379/tcp              redis
[root@iZ2vcgjiopjasr9f0k3zrdZ ~]# 

容器的启动与停止

docker start 容器id			# 启动已停止的容器
docker restart 容器id		# 重启容器
docker stop 容器id			# 停止容器
docker kill 容器id			# 暴力停止

其他常用命令

查看容器日志信息

docker logs 容器id
[root@iZ2vcgjiopjasr9f0k3zrdZ data]# docker logs --help		# 查看容器日志
Options:
  -f, --follow         Follow log output	# 日志输出
  -n, --tail string    Number of lines to show from the end of the logs (default "all") 	# 日志条数
  -t, --timestamps     Show timestamps		# 显示时间戳

查看容器中进程信息

docker top 容器id
[root@iZ2vcgjiopjasr9f0k3zrdZ data]# docker top 5bd4e55b2617
UID                 PID                 PPID                C                   STIME               TTY                 TIME                CMD
systemd+            78090               78069               0                   Aug27               ?                   00:05:04            redis-server *:6379

查看进程的元数据

docker inspect 容器id
[root@iZ2vcgjiopjasr9f0k3zrdZ data]# docker inspect 5bd4e55b2617
[
    {
        "Id": "5bd4e55b2617448cdb9dedff020cf9ee9b26675c024e23eb3cfe2f2575e422d7",
        "Created": "2024-08-27T13:55:07.223024702Z",
        "Path": "docker-entrypoint.sh",
        "Args": [
            "redis-server",
            "/etc/redis/redis.conf"
        ],
        "State": {
            "Status": "running",
            "Running": true,
            "Paused": false,
            "Restarting": false,
            "OOMKilled": false,
            "Dead": false,
            "Pid": 78090,
            "ExitCode": 0,
            "Error": "",
            "StartedAt": "2024-08-27T14:02:01.985656124Z",
            "FinishedAt": "2024-08-27T14:02:01.665321141Z"
        },
     	...

进入当前正在运行的容器

方式一:docker exec -it 容器id 控制台 # 示例: docker exec -it 5bd4e55b2617 /bin/bash
[root@iZ2vcgjiopjasr9f0k3zrdZ data]# docker exec -it 5bd4e55b2617 /bin/bash
root@5bd4e55b2617:/data# ls
appendonly.aof	backup.db  dump.rdb  root
root@5bd4e55b2617:/data# 

方式二: docker attach 容器id
[root@iZ2vcgjiopjasr9f0k3zrdZ data]# docker attach mysql
正在执行当前容器运行的逻辑...

区别:
docker exec 	# 进入容器,开启一个新的终端,可以在里面操作(常用)
docker attach	# 进入容器,正在运行的终端

把容器内的文件拷贝到主机上

docker cp 容器id:容器内文件路径 /主机路径
[root@iZ2vcgjiopjasr9f0k3zrdZ home]# ls
mysql  redis  zp
[root@iZ2vcgjiopjasr9f0k3zrdZ home]# docker cp c03e8df91fd1:/home/test.java  /home
Successfully copied 1.54kB to /home
[root@iZ2vcgjiopjasr9f0k3zrdZ home]# ls
mysql  redis  test.java  zp
[root@iZ2vcgjiopjasr9f0k3zrdZ home]# 
注意点: 需要在主机路径下才能正常拷贝出来,如果在容器中则无法拷贝

练习

docker安装Nginx

1. docker search nginx	# 搜索镜像
2. docker pull	nginx	# 下载镜像
3. docker run -d --name nginx01 -p 80:80 nginx # 运行
-d		#后台启动
-name	#容器命名
-p		#端口映射	主机端口:容器端口
nginx	#以nginx镜像启动
4. curl localhost:80 	# 测试

[root@iZ2vcgjiopjasr9f0k3zrdZ /]# docker pull nginx
Using default tag: latest
latest: Pulling from library/nginx
a2abf6c4d29d: Already exists 
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
[root@iZ2vcgjiopjasr9f0k3zrdZ /]# docker images
REPOSITORY   TAG       IMAGE ID       CREATED       SIZE
nginx        latest    605c77e624dd   2 years ago   141MB
redis        latest    7614ae9453d1   2 years ago   113MB
mysql        5.7       c20987f18b13   2 years ago   448MB
centos       latest    5d0da3dc9764   2 years ago   231MB
[root@iZ2vcgjiopjasr9f0k3zrdZ /]# docker run -d --name nginx01 -p 80:80 nginx
9d30ab055a7cf150eb20fb5544dbdfceddd8824d0a25fd8e40680ea302d1385d
[root@iZ2vcgjiopjasr9f0k3zrdZ /]# docker ps
CONTAINER ID   IMAGE       COMMAND                  CREATED          STATUS          PORTS                                                  NAMES
9d30ab055a7c   nginx       "/docker-entrypoint.…"   22 seconds ago   Up 22 seconds   0.0.0.0:80->80/tcp, :::80->80/tcp                      nginx01
c03e8df91fd1   mysql:5.7   "docker-entrypoint.s…"   2 days ago       Up 17 hours     0.0.0.0:3306->3306/tcp, :::3306->3306/tcp, 33060/tcp   mysql
5bd4e55b2617   redis       "docker-entrypoint.s…"   2 days ago       Up 2 days       0.0.0.0:6379->6379/tcp, :::6379->6379/tcp              redis
[root@iZ2vcgjiopjasr9f0k3zrdZ /]# curl localhost:80
<!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>

安装tomcat

[root@iZ2vcgjiopjasr9f0k3zrdZ conf]# docker images
REPOSITORY   TAG       IMAGE ID       CREATED       SIZE
nginx        latest    605c77e624dd   2 years ago   141MB
tomcat       latest    fb5657adc892   2 years ago   680MB
redis        latest    7614ae9453d1   2 years ago   113MB
centos       latest    5d0da3dc9764   2 years ago   231MB
[root@iZ2vcgjiopjasr9f0k3zrdZ conf]# docker run -d -p 8080:8080 --name tomcat01 tomcat	# 运行
4bb27aed90e887b46e77397862aa4fe384c73142754872d4278dcf4197dab588
[root@iZ2vcgjiopjasr9f0k3zrdZ conf]# curl localhost:8080	# 测试连接,发现页面404
<!doctype html><html lang="en"><head><title>HTTP Status 404 – Not Found</title><style type="text/css">body {font-family:Tahoma,Arial,sans-serif;} h1, h2, h3, b {color:white;background-color:#525D76;} h1 {font-size:22px;} h2 {font-size:16px;} h3 {font-size:14px;} p {font-size:12px;} a {color:black;} .line {height:1px;background-color:#525D76;border:none;}</style></head><body><h1>HTTP Status 404 – Not Found</h1><hr class="line" /><p><b>Type</b> Status Report</p><p><b>Description</b> The origin server did not find a current representation for the target resource or is not willing to disclose that one exists.</p><hr class="line" /><h3>Apache Tomcat/10.0.14</h3></body></html>[root@iZ2vcgjiopjasr9f0k3zrdZ conf]# 

# 进入容器,发现官方的镜像是缩减版
[root@iZ2vcgjiopjasr9f0k3zrdZ conf]# docker exec -it tomcat01 /bin/bash		
root@4bb27aed90e8:/usr/local/tomcat# ls
BUILDING.txt  CONTRIBUTING.md  LICENSE	NOTICE	README.md  RELEASE-NOTES  RUNNING.txt  bin  conf  lib  logs  native-jni-lib  temp  webapps  webapps.dist  work
root@4bb27aed90e8:/usr/local/tomcat# cd webapps
root@4bb27aed90e8:/usr/local/tomcat/webapps# ls
root@4bb27aed90e8:/usr/local/tomcat/webapps# 

#解决办法-从webapps.dist目录 拷贝所有文件到webapps下
BUILDING.txt  CONTRIBUTING.md  LICENSE	NOTICE	README.md  RELEASE-NOTES  RUNNING.txt  bin  conf  lib  logs  native-jni-lib  temp  webapps  webapps.dist  work
root@4bb27aed90e8:/usr/local/tomcat# cd webapps.dist/
root@4bb27aed90e8:/usr/local/tomcat/webapps.dist# ls
ROOT  docs  examples  host-manager  manager
root@4bb27aed90e8:/usr/local/tomcat/webapps.dist# cd ..
root@4bb27aed90e8:/usr/local/tomcat# cp -r webapps.dist/* webapps
root@4bb27aed90e8:/usr/local/tomcat# ls
BUILDING.txt  CONTRIBUTING.md  LICENSE	NOTICE	README.md  RELEASE-NOTES  RUNNING.txt  bin  conf  lib  logs  native-jni-lib  temp  webapps  webapps.dist  work
root@4bb27aed90e8:/usr/local/tomcat# cd webapps
root@4bb27aed90e8:/usr/local/tomcat/webapps# ls
ROOT  docs  examples  host-manager  manager
root@4bb27aed90e8:/usr/local/tomcat/webapps# 

# 重启tomcat容器
root@4bb27aed90e8:/usr/local/tomcat/webapps# exit
exit
[root@iZ2vcgjiopjasr9f0k3zrdZ conf]# docker restart tomcat01
tomcat01
[root@iZ2vcgjiopjasr9f0k3zrdZ conf]# curl localhost:8080
<!DOCTYPE html>
<html lang="en">
    <head>
        <meta charset="UTF-8" />
        <title>Apache Tomcat/10.0.14</title>
        <link href="favicon.ico" rel="icon" type="image/x-icon" />
        <link href="tomcat.css" rel="stylesheet" type="text/css" />
    </head>

部署ES+Kibana

# 注意
1. ES 需要暴露很多端口
2. ES 很消耗内存
3. ES 数据需要放置到安全目录

# 下载启动 ES
docker run -d --name elasticsearch01  -p 9200:9200 -p 9300:9300 -e "discovery.type=single-node" -e ES_JAVA_OPTS="-Xms64m -Xmx512m" elasticsearch:7.6.2
参数说明:
-e ES_JAVA_OPTS="-Xms64m -Xmx512m"   # 限制es内存

# 很慢...通过添加docker镜像地址,重新加载镜像配置文件,重启docker
[root@iZ2vcgjiopjasr9f0k3zrdZ docker]# cat daemon.json 
{
  "registry-mirrors": [
"https://s6g9dwc9.mirror.aliyuncs.com",
"http://hub-mirror.c.163.com",
"https://docker.m.daocloud.io", 
"https://noohub.ru", 
"https://huecker.io", 
"https://dockerhub.timeweb.cloud"
],
  "data-root": "/mnt/software/docker"
}
[root@iZ2vcgjiopjasr9f0k3zrdZ docker]# vim daemon.json 
[root@iZ2vcgjiopjasr9f0k3zrdZ docker]# systemctl daemon-reload
[root@iZ2vcgjiopjasr9f0k3zrdZ docker]# systemctl restart docker

# 重新下载es镜像
[root@iZ2vcgjiopjasr9f0k3zrdZ ~]# docker run -d --name elasticsearch01  -p 9200:9200 -p 9300:9300 -e "discovery.type=single-node" -e ES_JAVA_OPTS="-Xms64m -Xmx512m" elasticsearch:7.6.2
Unable to find image 'elasticsearch:7.6.2' locally
7.6.2: Pulling from library/elasticsearch
ab5ef0e58194: Pull complete 
c4d1ca5c8a25: Pull complete 
941a3cc8e7b8: Pull complete 
43ec483d9618: Pull complete 
c486fd200684: Pull complete 
1b960df074b2: Pull complete 
1719d48d6823: Pull complete 
Digest: sha256:1b09dbd93085a1e7bca34830e77d2981521a7210e11f11eda997add1c12711fa
Status: Downloaded newer image for elasticsearch:7.6.2
6459228f59d1098f47ca700982989cccc05eeed6603930e5c7f824c7cfb79cfd
[root@iZ2vcgjiopjasr9f0k3zrdZ ~]# docker ps
CONTAINER ID   IMAGE                 COMMAND                  CREATED         STATUS         PORTS                                                                                  NAMES
6459228f59d1   elasticsearch:7.6.2   "/usr/local/bin/dock…"   6 seconds ago   Up 6 seconds   0.0.0.0:9200->9200/tcp, :::9200->9200/tcp, 0.0.0.0:9300->9300/tcp, :::9300->9300/tcp   elasticsearch01
[root@iZ2vcgjiopjasr9f0k3zrdZ ~]# 

[root@iZ2vcgjiopjasr9f0k3zrdZ ~]# docker stats 容器id   # 查看内存使用情况
CONTAINER ID   NAME              CPU %     MEM USAGE / LIMIT     MEM %     NET I/O       BLOCK I/O        PIDS
6459228f59d1   elasticsearch01   0.23%     357.6MiB / 1.828GiB   19.11%    2.77kB / 0B   5.89MB / 729kB   43

[root@iZ2vcgjiopjasr9f0k3zrdZ ~]# curl localhost:9200
{
  "name" : "6459228f59d1",
  "cluster_name" : "docker-cluster",
  "cluster_uuid" : "7GMgH-XRTzWp5gNhQ9qCbw",
  "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"
}

镜像理解

联合文件系统

Union文件系统(UnionFs)是一种分层、轻量级并且高性能的文件系统,它支持对文件系统的修改作为一次提交来一层层的叠加,同时可以将不同目录挂载到同一个虚拟文件系统下(unite several directories into asingle virtualfilesystem)。Union 文件系统是 Docker 镜像的基础。镜像可以通过分层来进行继承,基于基础镜像(没有父镜像),可以制作各种具体的应用镜像。
特性:一次同时加载多个文件系统,但从外面看起来,只能看到一个文件系统,联合加载会把各层文件系统善加起来,这样最终的文件系统会包含所有底层的文件和目录

镜像加载原理

docker的镜像实际上由一层一层的文件系统组成,这种层级的文件系统UnionFS。
bootfs(boot file system)主要包含bootloader和kernel, bootloader主要是引导加载kernel, Linux刚启动时会加载bootfs文件系统,在Docker镜像的最底层是bootfs。这一层与我们典型的Linux/Unix系统是一样的,包含boot加载器和内核。当boot加载完成之后整个内核就都在内存中了,此时内存的使用权已由bootfs转交给内核,此时系统也会卸载bootfs。
rootfs (root file system),在bootfs之上。包含的就是典型 Linux 系统中的 /dev,/proc, /bin,/etc 等标准目录和文件。rootfs就是各种不同的操作系统发行版,比如Ubuntu,Centos等等。

commit 镜像

docker commit -m=“提交的描述信息” -a=“作者” 容器id 目标镜像名[TAG]

[root@iZ2vcgjiopjasr9f0k3zrdZ mysql]# docker ps -a		# 查看所有容器
CONTAINER ID   IMAGE                 COMMAND                  CREATED        STATUS                      PORTS     NAMES
6459228f59d1   elasticsearch:7.6.2   "/usr/local/bin/dock…"   25 hours ago   Exited (143) 25 hours ago             elasticsearch01
4bb27aed90e8   tomcat                "catalina.sh run"        26 hours ago   Exited (143) 26 hours ago             tomcat01
[root@iZ2vcgjiopjasr9f0k3zrdZ mysql]# docker start tomcat01  # 启动 容器tomcat01
tomcat01
[root@iZ2vcgjiopjasr9f0k3zrdZ mysql]# docker exec -it tomcat01 /bin/bash # 以交互模式进入容器
root@4bb27aed90e8:/usr/local/tomcat# ls
BUILDING.txt  CONTRIBUTING.md  LICENSE	NOTICE	README.md  RELEASE-NOTES  RUNNING.txt  bin  conf  lib  logs  native-jni-lib  temp  webapps  webapps.dist  work
root@4bb27aed90e8:/usr/local/tomcat# cd webapps
root@4bb27aed90e8:/usr/local/tomcat/webapps# ls		# 之前拷贝过文件 从webapps.dist/* 到webapps
ROOT  docs  examples  host-manager  manager
root@4bb27aed90e8:/usr/local/tomcat/webapps# exit
exit
[root@iZ2vcgjiopjasr9f0k3zrdZ mysql]# docker ps
CONTAINER ID   IMAGE     COMMAND             CREATED        STATUS              PORTS                                       NAMES
4bb27aed90e8   tomcat    "catalina.sh run"   26 hours ago   Up About a minute   0.0.0.0:8080->8080/tcp, :::8080->8080/tcp   tomcat01
[root@iZ2vcgjiopjasr9f0k3zrdZ mysql]# docker commit -a="zp" -m="add webapps app" 4bb27aed90e8 tomcat_zp:1.0 	# 提交容器为新镜像
sha256:b01aeb9b608fd6e5b24ff80c7eac8382a2799f609f3d7eb7493d35243a8226c5
[root@iZ2vcgjiopjasr9f0k3zrdZ mysql]# docker images
REPOSITORY      TAG       IMAGE ID       CREATED         SIZE
tomcat_zp       1.0       b01aeb9b608f   3 minutes ago   684MB		# 新的镜像
nginx           latest    605c77e624dd   2 years ago     141MB
tomcat          latest    fb5657adc892   2 years ago     680MB
redis           latest    7614ae9453d1   2 years ago     113MB
centos          latest    5d0da3dc9764   2 years ago     231MB
elasticsearch   7.6.2     f29a1ee41030   4 years ago     791MB
[root@iZ2vcgjiopjasr9f0k3zrdZ mysql]# 

容器数据卷

什么是容器数据卷

容器卷技术,就是目录挂载,将容器内的文件目录,挂载到Linux服务器目录上,使容器内产生的数据,可以同步到服务器主机上。防止容器删除时,导致数据丢失。
容器数据的持久化和同步,容器之间也是可以数据共享

使用数据卷

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

[root@iZ2vcgjiopjasr9f0k3zrdZ mysql]# docker images
REPOSITORY      TAG       IMAGE ID       CREATED          SIZE
tomcat_zp       1.0       b01aeb9b608f   28 minutes ago   684MB
nginx           latest    605c77e624dd   2 years ago      141MB
tomcat          latest    fb5657adc892   2 years ago      680MB
redis           latest    7614ae9453d1   2 years ago      113MB
centos          latest    5d0da3dc9764   2 years ago      231MB
elasticsearch   7.6.2     f29a1ee41030   4 years ago      791MB
# 挂载目录启动容器 centos
[root@iZ2vcgjiopjasr9f0k3zrdZ mysql]# docker run -it -v /home/centos_image:/home centos
[root@6d53f6e6e952 /]# cd /home 
[root@6d53f6e6e952 home]# touch test.java
[root@6d53f6e6e952 home]# ls
test.java
  1. 测试:在容器内创建文件,会同步到主机中
    在这里插入图片描述
  2. 测试
    停止容器
    在主机linux中编辑文件
    重新启动容器,发现文件还是同步
    在这里插入图片描述

安装mysql

[root@iZ2vcgjiopjasr9f0k3zrdZ home]# docker run -d -p 3306:3306 -v /home/mysql01_image/conf:/etc/mysql/conf.d -v /home/mysql01_image/data:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=123456 --name mysql01 mysql:5.7
fd3c48a216f509c3af7737c2429f051552fab4d64e37f6263c10f3982b4b0dd1
[root@iZ2vcgjiopjasr9f0k3zrdZ home]# 

参数说明:
	-d		# 后台运行
	-p		# 端口映射	主机端口:容器端口
	-v  	# 目录挂载	主机目录:容器目录
	-e		# mysql 设置连接密码
	--name  # 容器命名
	mysql:5.7 以此镜像启动容器

测试连接容器数据库,并新建一个测试数据库 test001
在这里插入图片描述
发现 服务器中数据是同步的
在这里插入图片描述
此时,就算将容器彻底删除,服务器中挂载的文件/home/mysql01_image/data目录下的数据依然存在

具名和匿名挂载

初识dockerfile

数据卷容器

DockerFile

docker网络

本篇笔记通过学习视频 : 【狂神说Java】Docker最新超详细版教程通俗易懂

  • 11
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值