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目录下的数据依然存在

具名和匿名挂载

匿名挂载:
	格式: -v 容器内路径
[root@iZ2vcgjiopjasr9f0k3zrdZ ~]# docker run -p 80:80 -v /etc/nginx -d --name nginx01 nginx
7e772025b3c5d6a5a741301a81a4a540ee69f524b2d1ad405b48fdb20ac40aad

# 列出服务器的卷挂载信息
[root@iZ2vcgjiopjasr9f0k3zrdZ ~]# docker volume ls
DRIVER    VOLUME NAME
local     35107793516cc224154f9a9ead7ce24ffddc1e9b994ace1a224aec5a913224df
local     eafe19dc56aa67c4bd63f39a6f80c862b7ced55f0dc780b974267b14300dee2f
[root@iZ2vcgjiopjasr9f0k3zrdZ ~]# 

具名挂载:(推荐使用)
	格式:-v 卷名:容器内路径
	注意:卷名不能以 ‘/’ 开始,否则会被认为是指定主机路径挂载
[root@iZ2vcgjiopjasr9f0k3zrdZ ~]# docker run -P -v juming-nginx:/etc/nginx -d --name nginx02 nginx
0aa075cb218f2c010f06ffbf40ef0991354b5a6f4994b8a93f80782758313b1b
[root@iZ2vcgjiopjasr9f0k3zrdZ ~]# docker volume ls
DRIVER    VOLUME NAME
local     9eeed794aaaf49da2b2238cea6280832e489c4c41193087eb56ee87d9c42368a
local     35107793516cc224154f9a9ead7ce24ffddc1e9b994ace1a224aec5a913224df
local     eafe19dc56aa67c4bd63f39a6f80c862b7ced55f0dc780b974267b14300dee2f
local     juming-nginx
[root@iZ2vcgjiopjasr9f0k3zrdZ ~]# 

查看卷的详细信息
[root@iZ2vcgjiopjasr9f0k3zrdZ ~]# docker volume inspect juming-nginx
[
    {
        "CreatedAt": "2024-09-05T11:12:18+08:00",
        "Driver": "local",
        "Labels": null,
        "Mountpoint": "/mnt/software/docker/volumes/juming-nginx/_data",
        "Name": "juming-nginx",
        "Options": null,
        "Scope": "local"
    }
]
进入路径查看
[root@iZ2vcgjiopjasr9f0k3zrdZ volumes]# cd /mnt/software/docker/volumes
[root@iZ2vcgjiopjasr9f0k3zrdZ volumes]# ll
total 40
drwx-----x 3 root root   4096 Aug 27 21:22 35107793516cc224154f9a9ead7ce24ffddc1e9b994ace1a224aec5a913224df
drwx-----x 3 root root   4096 Sep  5 11:10 9eeed794aaaf49da2b2238cea6280832e489c4c41193087eb56ee87d9c42368a
brw------- 1 root root 253, 3 Aug 31 18:58 backingFsBlockDev
drwx-----x 3 root root   4096 Sep  5 11:03 eafe19dc56aa67c4bd63f39a6f80c862b7ced55f0dc780b974267b14300dee2f
drwx-----x 3 root root   4096 Sep  5 11:12 juming-nginx
-rw------- 1 root root  32768 Sep  5 11:12 metadata.db
[root@iZ2vcgjiopjasr9f0k3zrdZ volumes]# cd juming-nginx/
[root@iZ2vcgjiopjasr9f0k3zrdZ juming-nginx]# ls
_data
[root@iZ2vcgjiopjasr9f0k3zrdZ juming-nginx]# cd _data/
[root@iZ2vcgjiopjasr9f0k3zrdZ _data]# ls
conf.d  fastcgi_params  mime.types  modules  nginx.conf  scgi_params  uwsgi_params
区别:
	匿名挂载:	-v 容器内路径
	具名挂载:	-v 卷名:容器内路径
	指定挂载:	-v /主机路径:容器内路径

初识dockerfile

通过dockerfile 脚本,生成镜像

[root@iZ2vcgjiopjasr9f0k3zrdZ dockerfile-test]# vim dockerfile01
[root@iZ2vcgjiopjasr9f0k3zrdZ dockerfile-test]# cat dockerfile01 
FROM centos

VOLUME ["volume01","volume02"]

CMD ehco "----end----"
CMD /bin/bash

#构建镜像:
#	-f 指定dockerfile文件
#	-t 生成的镜像名字
#	注意:最后还有一个点
[root@iZ2vcgjiopjasr9f0k3zrdZ dockerfile-test]# docker build -f dockerfile01 -t centos_zpdiy .
[+] Building 0.2s (5/5) FINISHED                                                                                                                                                                                                  docker:default
 => [internal] load build definition from dockerfile01                                                                                                                                                                                      0.0s
 => => transferring dockerfile: 122B                                                                                                                                                                                                        0.0s
 => [internal] load metadata for docker.io/library/centos:latest                                                                                                                                                                            0.0s
 => [internal] load .dockerignore                                                                                                                                                                                                           0.0s
 => => transferring context: 2B                                                                                                                                                                                                             0.0s
 => [1/1] FROM docker.io/library/centos:latest                                                                                                                                                                                              0.0s
 => exporting to image                                                                                                                                                                                                                      0.0s
 => => exporting layers                                                                                                                                                                                                                     0.0s
 => => writing image sha256:e7fc744a96da411781279775866fac6c808f3b01a2f8ed3036f308047e149e27                                                                                                                                                0.0s
 => => naming to docker.io/library/centos_zpdiy                                                                                                                                                                                             0.0s
[root@iZ2vcgjiopjasr9f0k3zrdZ dockerfile-test]# docker images
REPOSITORY      TAG       IMAGE ID       CREATED       SIZE
tomcat_zp       1.0       b01aeb9b608f   3 days ago    684MB
nginx           latest    605c77e624dd   2 years ago   141MB
tomcat          latest    fb5657adc892   2 years ago   680MB
redis           latest    7614ae9453d1   2 years ago   113MB
mysql           5.7       c20987f18b13   2 years ago   448MB
centos_zpdiy    latest    e7fc744a96da   2 years ago   231MB
centos          latest    5d0da3dc9764   2 years ago   231MB
elasticsearch   7.6.2     f29a1ee41030   4 years ago   791MB

[root@iZ2vcgjiopjasr9f0k3zrdZ dockerfile-test]# docker run -it centos_zpdiy 
# 创建一个文件
[root@3bfa819baf18 /]# cd volume01
[root@3bfa819baf18 volume01]# ls
[root@3bfa819baf18 volume01]# touch volume01.txt
[root@3bfa819baf18 volume01]# 

另开一个终端查询:

[root@iZ2vcgjiopjasr9f0k3zrdZ ~]# docker ps
CONTAINER ID   IMAGE          COMMAND                  CREATED          STATUS          PORTS                                                  NAMES
3bfa819baf18   centos_zpdiy   "/bin/sh -c /bin/bash"   16 seconds ago   Up 14 seconds                                                          eloquent_noether
0aa075cb218f   nginx          "/docker-entrypoint.…"   3 hours ago      Up 3 hours      0.0.0.0:32769->80/tcp, :::32769->80/tcp                nginx02
7e772025b3c5   nginx          "/docker-entrypoint.…"   3 hours ago      Up 3 hours      0.0.0.0:80->80/tcp, :::80->80/tcp                      nginx01
fd3c48a216f5   mysql:5.7      "docker-entrypoint.s…"   3 days ago       Up 3 days       0.0.0.0:3306->3306/tcp, :::3306->3306/tcp, 33060/tcp   mysql01
# 查询 容器原信息
[root@iZ2vcgjiopjasr9f0k3zrdZ ~]# docker inspect 3bfa819baf18

在这里插入图片描述
发现,容器内创建的文件,在外部挂载的文件位置,数据实现了同步
在这里插入图片描述
结论:数据同步的两种方式
1、对于自己构建的镜像,可以在Dockerfile脚本中,使用VOLUME 命令,自动挂载目录到宿主机
2、对于官方镜像,或者在构建镜像时,未指定VOLUME的,可以在启动容器时通过 -v 参数 手动挂载目录。一般使用具名挂载(-v 卷名:容器内路径),或者指定路径挂载(-v /主机路径:容器内路径)

数据卷容器

让多个容器之间的数据实现同步,如让两个mysql容器之间的数据实现同步 通过 – volumes -from 命令实现


[root@iZ2vcgjiopjasr9f0k3zrdZ _data]# docker run -it --name centos01 centos_zpdiy /bin/bash
[root@65c772a15cc7 /]# 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 不停止容器退出
[root@65c772a15cc7 /]# [root@iZ2vcgjiopjasr9f0k3zrdZ _data]# 

# 使用 --volumes-from 同步两个容器间的数据
[root@iZ2vcgjiopjasr9f0k3zrdZ _data]# docker run -it --name centos02 --volumes-from centos01 centos_zpdiy
[root@4de9080ae985 /]# 

# 在 centos01 容器中创建一个文件
[root@iZ2vcgjiopjasr9f0k3zrdZ _data]# docker attach centos01
[root@65c772a15cc7 /]# ls
bin  dev  etc  home  lib  lib64  lost+found  media  mnt  opt  proc  root  run  sbin  srv  sys  tmp  usr  var  volume01	volume02
[root@65c772a15cc7 /]# cd volume01
[root@65c772a15cc7 volume01]# ls
[root@65c772a15cc7 volume01]# touch centos01.txt
[root@65c772a15cc7 volume01]# 

# 进入 centos02 容器查看数据,已实现同步
[root@iZ2vcgjiopjasr9f0k3zrdZ _data]# docker attach centos02
[root@4de9080ae985 /]# ls
bin  dev  etc  home  lib  lib64  lost+found  media  mnt  opt  proc  root  run  sbin  srv  sys  tmp  usr  var  volume01	volume02
[root@4de9080ae985 /]# cd volume01
[root@4de9080ae985 volume01]# ls
centos01.txt
[root@4de9080ae985 volume01]# 

docker run -it --name centos02 --volumes-from centos01 centos_zpdiy
– volumes -from 类似与java 中的继承关系
其中,centos01,就是数据卷容器
同理,可以通过这种方式,再次创建新容器,让多个容器之间实现数据同步。
并且,容易理解的是,这些容器都是挂载到宿主机中的,所以,删除容器,数据不会丢失。

两个容器的在宿主机中的挂载路径是完全相同的,删除容器,并不会删除宿主机种的数据。
在这里插入图片描述

DockerFile

dockerfile是用来构建docker镜像的文件 。命令参数脚本
步骤:

  1. 编写dockerfile脚本文件
  2. docker build 构建镜像
  3. docker run 启动运行容器
  4. docker push 发布镜像(可以发布到dockerHub,或者阿里云镜像仓库)

Dockerfile基础命令

FROM 			# 基础镜像
MAINTAINER		# 镜像作者信息,姓名+邮箱
RUN				# 构建镜像时,需要运行的命令
ADD 			# 需要添加的镜像,通常是一个压缩包 如,tomcat的压缩文件
WORKDIR			# 镜像的工作目录
VOLUME	    	# 挂载的目录
EXPOSE			# 暴露端口
CMD				# 指定容器启动的时候,要运行的命令,只有最后一个生效,可被替代
ENTRYPOINT		# 指定容器启动的时候,要运行的命令,可以追加命令
COPY			# 类似ADD,将文件拷贝到镜像中
ENV				# 构建镜像时,设置环境变量

制作centos

# 编写 dockerfile 脚本文件
[root@iZ2vcgjiopjasr9f0k3zrdZ centos_dockerfile]# vim dockerfile 
[root@iZ2vcgjiopjasr9f0k3zrdZ centos_dockerfile]# cat dockerfile 
FROM centos

MAINTAINER zp<807185542@qq.com>

ENV MYPATH /usr/local
WORKDIR $MYPATH

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

EXPOSE 80

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

# 构建镜像---失败
[root@iZ2vcgjiopjasr9f0k3zrdZ centos_dockerfile]# docker build -f dockerfile -t mycentos_zp .
[+] Building 0.5s (6/7)                                                                                                                                                                                                           docker:default
 => [internal] load build definition from dockerfile                                                                                                                                                                                        0.0s
 => => transferring dockerfile: 233B                                                                                                                                                                                                        0.0s
 => [internal] load metadata for docker.io/library/centos:latest                                                                                                                                                                            0.0s
 => [internal] load .dockerignore                                                                                                                                                                                                           0.0s
 => => transferring context: 2B                                                                                                                                                                                                             0.0s
 => [1/4] FROM docker.io/library/centos:latest                                                                                                                                                                                              0.0s
 => CACHED [2/4] WORKDIR /usr/local                                                                                                                                                                                                         0.0s
 => ERROR [3/4] RUN yum -y install vim                                                                                                                                                                                                      0.4s
------                                                                                                                                                                                                                                           
 > [3/4] RUN yum -y install vim:
0.387 CentOS Linux 8 - AppStream                      0.0  B/s |   0  B     00:00    
0.394 Errors during downloading metadata for repository 'appstream':
0.394   - Curl error (6): Couldn't resolve host name for http://mirrorlist.centos.org/?release=8&arch=x86_64&repo=AppStream&infra=container [Could not resolve host: mirrorlist.centos.org]
0.394 Error: Failed to download metadata for repo 'appstream': Cannot prepare internal mirrorlist: Curl error (6): Couldn't resolve host name for http://mirrorlist.centos.org/?release=8&arch=x86_64&repo=AppStream&infra=container [Could not resolve host: mirrorlist.centos.org]
------
dockerfile:8
--------------------
   6 |     WORKDIR $MYPATH
   7 |     
   8 | >>> RUN yum -y install vim
   9 |     RUN yun -y install net-tools
  10 |     
--------------------
ERROR: failed to solve: process "/bin/sh -c yum -y install vim" did not complete successfully: exit code: 1

# 修改dockerfile后,重新构建
[root@iZ2vcgjiopjasr9f0k3zrdZ centos_dockerfile]# docker build -f dockerfile -t mycentos_zp .
[+] Building 18.9s (9/9) FINISHED                                                                                                                                                                                                 docker:default
 => [internal] load build definition from dockerfile                                                                                                                                                                                        0.0s
 => => transferring dockerfile: 319B                                                                                                                                                                                                        0.0s
 => [internal] load metadata for docker.io/library/centos:7                                                                                                                                                                                15.4s
 => [internal] load .dockerignore                                                                                                                                                                                                           0.0s
 => => transferring context: 2B                                                                                                                                                                                                             0.0s
 => [1/5] FROM docker.io/library/centos:7@sha256:9d4bcbbb213dfd745b58be38b13b996ebb5ac315fe75711bd618426a630e0987                                                                                                                           0.0s
 => CACHED [2/5] WORKDIR /usr/local                                                                                                                                                                                                         0.0s
 => CACHED [3/5] RUN curl -o /etc/yum.repos.d/CentOS-Base.repo https://mirrors.aliyun.com/repo/Centos-7.repo                                                                                                                                0.0s
 => CACHED [4/5] RUN yum makecache                                                                                                                                                                                                          0.0s
 => CACHED [5/5] RUN yum -y install vim                                                                                                                                                                                                     0.0s
 => exporting to image                                                                                                                                                                                                                      3.4s
 => => exporting layers                                                                                                                                                                                                                     3.4s
 => => writing image sha256:628a7d87744a1d4d98813430a22b02891bca741839caa97dba6e33e09e334e6b                                                                                                                                                0.0s
 => => naming to docker.io/library/mycentos_zp                                                                                                                                                                                              0.0s
[root@iZ2vcgjiopjasr9f0k3zrdZ centos_dockerfile]# docker images
REPOSITORY      TAG       IMAGE ID       CREATED         SIZE
mycentos_zp     latest    628a7d87744a   5 minutes ago   794MB
nginx           latest    605c77e624dd   2 years ago     141MB
tomcat          latest    fb5657adc892   2 years ago     680MB
redis           latest    7614ae9453d1   2 years ago     113MB
mysql           5.7       c20987f18b13   2 years ago     448MB
centos          latest    5d0da3dc9764   2 years ago     231MB
elasticsearch   7.6.2     f29a1ee41030   4 years ago     791MB
[root@iZ2vcgjiopjasr9f0k3zrdZ centos_dockerfile]# 


构建centos镜像失败:原因与解决办法

docker history 镜像id : 查看镜像的构建历史过程

[root@iZ2vcgjiopjasr9f0k3zrdZ centos_dockerfile]# docker history 628a7d87744a
IMAGE          CREATED          CREATED BY                                      SIZE      COMMENT
628a7d87744a   11 minutes ago   CMD ["/bin/sh" "-c" "/bin/bash"]                0B        buildkit.dockerfile.v0
<missing>      11 minutes ago   CMD ["/bin/sh" "-c" "echo \"---end----------…   0B        buildkit.dockerfile.v0
<missing>      11 minutes ago   EXPOSE map[80/tcp:{}]                           0B        buildkit.dockerfile.v0
<missing>      11 minutes ago   RUN /bin/sh -c yum -y install vim # buildkit    79.9MB    buildkit.dockerfile.v0
<missing>      11 minutes ago   RUN /bin/sh -c yum makecache # buildkit         510MB     buildkit.dockerfile.v0
<missing>      12 minutes ago   RUN /bin/sh -c curl -o /etc/yum.repos.d/Cent…   23kB      buildkit.dockerfile.v0
<missing>      16 minutes ago   WORKDIR /usr/local                              0B        buildkit.dockerfile.v0
<missing>      16 minutes ago   ENV MYPATH=/usr/local                           0B        buildkit.dockerfile.v0
<missing>      16 minutes ago   MAINTAINER zp<807185542@qq.com>                 0B        buildkit.dockerfile.v0
<missing>      2 years ago      /bin/sh -c #(nop)  CMD ["/bin/bash"]            0B        
<missing>      2 years ago      /bin/sh -c #(nop)  LABEL org.label-schema.sc…   0B        
<missing>      2 years ago      /bin/sh -c #(nop) ADD file:b3ebbe8bd304723d4…   204MB     
[root@iZ2vcgjiopjasr9f0k3zrdZ centos_dockerfile]# 

制作tomcat

# 1. 准备要用的压缩包
[root@iZ2vcgjiopjasr9f0k3zrdZ tomcat_dockerfile]# ls
apache-tomcat-9.0.93.tar.gz  Dockerfile  jdk-8u421-linux-x64.tar.gz  readme.txt
# 2. 编写Dockerfile脚本,文件名称使用 Dockerfile,官方名称
[root@iZ2vcgjiopjasr9f0k3zrdZ tomcat_dockerfile]# cat Dockerfile                                                                                                                                                                                 
FROM centos:7
MAINTAINER zp<807185542@qq.com>

COPY readme.txt /usr/local/readme.txt

ADD jdk-8u421-linux-x64.tar.gz /usr/local/
ADD apache-tomcat-9.0.93.tar.gz /usr/local/

RUN curl -o /etc/yum.repos.d/CentOS-Base.repo https://mirrors.aliyun.com/repo/Centos-7.repo
RUN yum makecache

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

ENV MYPATH /usr/local
ENV JAVA_HOME /usr/local/jdk1.8.0_421
ENV CLASSPATH $JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
ENV CATALINA_HOME /usr/local/apache-tomcat-9.0.93
ENV CATALINA_BASH /usr/local/apache-tomcat-9.0.93
ENV PATH $PATH:$JAVA_HOME/bin:$CATALINA_HOME/Lib:$CATALINA_HOME/bin

WORKDIR $MYPATH

EXPOSE 8080

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

# 3. 构建镜像,不需要 -f 指定文件,官方会自动找 Dockerfile 文件
[root@iZ2vcgjiopjasr9f0k3zrdZ tomcat_dockerfile]# docker build -t mytomcat_zp .
[+] Building 79.0s (13/13) FINISHED                                                                                                                                                                                               docker:default
 => [internal] load build definition from Dockerfile                                                                                                                                                                                        0.0s
 => => transferring dockerfile: 786B                                                                                                                                                                                                        0.0s
 => [internal] load metadata for docker.io/library/centos:7                                                                                                                                                                                15.4s
 => [internal] load .dockerignore                                                                                                                                                                                                           0.0s
 => => transferring context: 2B                                                                                                                                                                                                             0.0s
 => [1/8] FROM docker.io/library/centos:7@sha256:9d4bcbbb213dfd745b58be38b13b996ebb5ac315fe75711bd618426a630e0987                                                                                                                           0.0s
 => [internal] load build context                                                                                                                                                                                                           0.0s
 => => transferring context: 128B                                                                                                                                                                                                           0.0s
 => CACHED [2/8] COPY readme.txt /usr/local/readme.txt                                                                                                                                                                                      0.0s
 => CACHED [3/8] ADD jdk-8u421-linux-x64.tar.gz /usr/local/                                                                                                                                                                                 0.0s
 => CACHED [4/8] ADD apache-tomcat-9.0.93.tar.gz /usr/local/                                                                                                                                                                                0.0s
 => [5/8] RUN curl -o /etc/yum.repos.d/CentOS-Base.repo https://mirrors.aliyun.com/repo/Centos-7.repo                                                                                                                                       0.6s
 => [6/8] RUN yum makecache                                                                                                                                                                                                                47.4s
 => [7/8] RUN yum -y install vim                                                                                                                                                                                                            9.5s 
 => [8/8] WORKDIR /usr/local                                                                                                                                                                                                                0.0s 
 => exporting to image                                                                                                                                                                                                                      6.0s 
 => => exporting layers                                                                                                                                                                                                                     6.0s 
 => => writing image sha256:ffa81973fbee61cdeaab6b5cdfcf0e77958510f4005df12a104f20cd59300318                                                                                                                                                0.0s 
 => => naming to docker.io/library/mytomcat_zp                                                                                                                                                                                              0.0s 

# 4.启动查看
[root@iZ2vcgjiopjasr9f0k3zrdZ tomcat_dockerfile]# docker run -it -p 8080:8080 --name mytomcat01 mytomcat_zp /bin/bash
[root@7bd144add399 local]# pwd
/usr/local
[root@7bd144add399 local]# ls -l
total 52
drwxr-xr-x 9 root root 4096 Sep  5 14:33 apache-tomcat-9.0.93
drwxr-xr-x 2 root root 4096 Apr 11  2018 bin
drwxr-xr-x 2 root root 4096 Apr 11  2018 etc
drwxr-xr-x 2 root root 4096 Apr 11  2018 games
drwxr-xr-x 2 root root 4096 Apr 11  2018 include
drwxr-xr-x 8 root root 4096 Sep  5 14:33 jdk1.8.0_421
drwxr-xr-x 2 root root 4096 Apr 11  2018 lib
drwxr-xr-x 2 root root 4096 Apr 11  2018 lib64
drwxr-xr-x 2 root root 4096 Apr 11  2018 libexec
-rw-r--r-- 1 root root   13 Sep  5 14:17 readme.txt
drwxr-xr-x 2 root root 4096 Apr 11  2018 sbin
drwxr-xr-x 5 root root 4096 Nov 13  2020 share
drwxr-xr-x 2 root root 4096 Apr 11  2018 src
[root@7bd144add399 local]# 

# 4.测试连接
# 测试连接失败
# 问题1.在容器中 java -version 查看jdk环境变量安装是否正确
# 问题2.ifconfig 测试网络是否正常
# 问题3.手动启动 tomcat的 startup.sh ,确认tomcat 启动成功

[root@iZ2vcgjiopjasr9f0k3zrdZ ~]# curl localhost:8080
curl: (56) Recv failure: Connection reset by peer
[root@iZ2vcgjiopjasr9f0k3zrdZ ~]# curl localhost:8080

<!DOCTYPE html>
<html lang="en">
    <head>
        <meta charset="UTF-8" />
        <title>Apache Tomcat/9.0.93</title>
        <link href="favicon.ico" rel="icon" type="image/x-icon" />
        <link href="tomcat.css" rel="stylesheet" type="text/css" />
    </head>

    <body>
        <div id="wrapper">
            <div id="navigation" class="curved container">
                <span id="nav-home"><a href="https://tomcat.apache.org/">Home</a></span>
                <span id="nav-hosts"><a href="/docs/">Documentation</a></span>
                <span id="nav-config"><a href="/docs/config/">Configuration</a></span>
                <span id="nav-examples"><a href="/examples/">Examples</a></span>
                <span id="nav-wiki"><a href="https://cwiki.apache.org/confluence/display/TOMCAT/">Wiki</a></span>
                <span id="nav-lists"><a href="https://tomcat.apache.org/lists.html">Mailing Lists</a></span>
                <span id="nav-help"><a href="https://tomcat.apache.org/findhelp.html">Find Help</a></span>
                <br class="separator" />
            </div>
            <div id="asf-box">
                <h1>Apache Tomcat/9.0.93</h1>

镜像发布

发布到DockerHub。前置条件:需要注册dockerhub账号

  1. docker login -u 用户名
  2. docker push 镜像名:TAG
  3. 扩展命令: docker tag 镜像id 新的镜像名称:TAG
    docker tag 312a6faa325d test/mycentos_zp01:1.0

发布到阿里云镜像仓库

  1. 登录阿里云,创建命名空间
    在这里插入图片描述
  2. 创建镜像仓库
    在这里插入图片描述
[root@iZ2vcgjiopjasr9f0k3zrdZ ~]# docker login --username=code_pz registry.cn-chengdu.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@iZ2vcgjiopjasr9f0k3zrdZ ~]# 
  1. 推送
    在这里插入图片描述

docker总结

在这里插入图片描述

docker网络

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值