安装docker
- 参考官方文档
https://docs.docker.com/engine/install/centos/
或者参考Linux学习笔记中软件安装
https://blog.csdn.net/zhang_peng0609/article/details/140966967
- 配置阿里云镜像加速
docker常用命令
- 使用docker官方文档: 命令说明
- 使用 docker --help 如下:
帮助命令
docker version
docker info
docker --help
镜像基本命令
- 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
- 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
- docker pull 下载镜像
docker pull mysql #不指定版本,默认下载最新版本
docker pull mysql:5.7
- 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
- 测试:在容器内创建文件,会同步到主机中
- 测试
停止容器
在主机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镜像的文件 。命令参数脚本
步骤:
- 编写dockerfile脚本文件
- docker build 构建镜像
- docker run 启动运行容器
- 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账号
- docker login -u 用户名
- docker push 镜像名:TAG
- 扩展命令: docker tag 镜像id 新的镜像名称:TAG
docker tag 312a6faa325d test/mycentos_zp01:1.0
发布到阿里云镜像仓库
- 登录阿里云,创建命名空间
- 创建镜像仓库
[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 ~]#
- 推送
docker总结
docker网络
本篇笔记通过学习视频 : 【狂神说Java】Docker最新超详细版教程通俗易懂