一、容器数据卷
1.什么是容器数据卷
docker的理念回顾
将应用和环境打包成一个镜像
数据?如果数据都在容器中,那么我们容器删除,数据会丢失!(需求:数据持久化)
MySQL,容器删除了,删库跑路!(需求:MySQL数据可以存储在本地)
容器之间可以有一个数据共享技术!docker容器中产生的数据,同步到本地!
这就是卷技术,目录的挂载,将我们容器内的目录挂载到linux上面!
总结:容器的持久化和同步操作!容器间也是可以数据共享的!
2.使用数据卷
1.方法一:直接使用命令来挂载 -v 方式二:dockerfile
[root@docker ~]# docker run -it -v /home/ceshi:/home centos /bin/bash
指定主机目录:容器挂载目录
[root@docker ~]# cd /home #切换到主机家目录查看挂载目录
[root@docker home]# ll
总用量 0
drwxr-xr-x 2 root root 6 3月 20 06:11 ceshi
[root@docker ~]# docker inspect #查看挂载详细信息
2.测试挂载
目录同步测试:容器到主机
#1.容器内部
[root@92109883794f /]# cd /home
[root@92109883794f home]# ls
[root@92109883794f home]# touch test.java
[root@92109883794f home]# ls
test.java
#2.主机上查看
[root@docker ~]# cd /home/ceshi/
[root@docker ceshi]# ll
总用量 0
[root@docker ceshi]# ls
test.java
#1.主机上修改内容测试:主机到容器
[root@92109883794f home]# exit #要先停掉容器
exit
[root@docker ~]# cd /home/ceshi/
[root@docker ceshi]# ll
总用量 0
[root@docker ceshi]# ls
test.java
[root@docker ceshi]# vim test.java
hello world 123
#2.在容器内文件查看内容
[root@docker ~]# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
92109883794f centos "/bin/bash" 32 minutes ago Exited (0) 2 minutes ago quizzical_grothendieck
[root@docker ~]# docker start 92109883794f
92109883794f
[root@docker ~]# docker attach 92109883794f
[root@92109883794f /]# cd /home/
[root@92109883794f home]# ls
test.java
[root@92109883794f home]# cat test.java
hello world 123
3.具名和匿名挂载
#1.匿名挂载
-v 容器内路径
docker run -d -p --name nginx01 -v /etc/nginx #不指定主机路径直接是容器内部目录
#实例:
[root@docker ~]# docker run -d -P --name=nginx01 -v /etc/nginx nginx
70935dcb3f6965868c01ac8c0e6f064d852369e40014a8e77dddaef306bf7474
[root@docker ~]# docker volume ls #查看所有卷的情况(匿名卷)
DRIVER VOLUME NAME
local 407aab886d4ab09134f036628a7eac69604f204bd2facbae5b01c1ef3aa33a00
#这种就是匿名挂载,我们在-v只写了容器内部的路径,没有写容器外的路径
#2.具名挂载
[root@docker ~]# docker run -d -P --name nginx02 -v juming-nginx:/etc/nginx nginx
8ac7b6cf216f26d58f46c8af45754abcf08134460d2be802863b43516c08538f
# 通过 -v 卷名:容器内路径
[root@docker ~]# docker volume ls
DRIVER VOLUME NAME
local juming-nginx
[root@docker ~]# docker volume inspect juming-nginx #查看具名挂载的具体信息
[
{
"CreatedAt": "2021-03-20T08:16:05+08:00",
"Driver": "local",
"Labels": null,
"Mountpoint": "/var/lib/docker/volumes/juming-nginx/_data",
"Name": "juming-nginx",
"Options": null,
"Scope": "local"
}
]
### 所有的docker容器内的卷,没有指定目录的情况下都是在 /var/lib/docker/volumes/xxx/_data
#我们通过具名挂载可以方便的找到我们的一个卷,大多数情况使用的具名挂载
3.如何确定具名挂载还是匿名挂载,还是指定路径挂载?
-v 容器内路径 #匿名挂载
-v 卷名:容器内部路径 #具名挂载
-v /宿主机路径:容器内部路径 #指定路径挂载
扩展:
docker run -d -P --name=nginx02 -v juming-nginx:/ etc/nginx:ro nginx
或
docker run -d -P --name=nginx02 -v juming-nginx :/etc/nginx:rw nginx
# 通过-v 容器内部路径:ro/rw改变读写权限
#ro 只要看到ro就说明这个路径只能通过宿主机来操作,容器内部无法操作!
二、发布镜像
1.发布镜像到DockerHub
DockerHub:
- 1.地址:https://hub.docker.com/ 注册自己的账号!
2.确定这个账号可以登录
3.在服务器上提交自己的镜像:要先登录(docker login)
4.登录完毕后就可以提交镜像了(docker push +作者名字/镜像名字:版本号)
#1.为上传镜像打标签
[root@docker nginx]# docker tag lnmp-nginx:latest elaina0808/lnmp-nginx:v1
#2.登录docker
[root@docker nginx]# docker login -u 名字
Login Succeeded
#3.上传镜像
[root@docker nginx]# docker push elaina0808/lnmp-nginx:v1
The push refers to repository [docker.io/elaina0808/lnmp-nginx]
fe61ffbfead8: Pushed
90d6f5ce54c2: Pushed
21ef22ee2206: Pushed
20be8177ecd4: Pushed
a7d7ec415fe7: Pushed
85fcec7ef3ef: Pushed
3e5288f7a70f: Pushed
56bc37de0858: Pushed
1c91bf69a08b: Pushed
cb42413394c4: Pushed
v1: digest: sha256:218a463a25c8e438913029d6d71935775382e9d93c9362d0a23498cd6c594ca2 size: 2398
2.发布镜像到阿里云容器服务
阿里云容器服务上:
1).登录阿里云
2).找到容器镜像服务
3).创建命名空间
4)创建镜像仓库(默认私有,本地仓库)
5)浏览阿里云
#1.为上传镜像打标签
[root@docker nginx]# docker tag lnmp-nginx:latest registry.cn-shanghai.aliyuncs.com/elaina/lnmp-nginx:v1
[root@docker nginx]# docker images #查看镜像
REPOSITORY TAG IMAGE ID CREATED SIZE
registry.cn-shanghai.aliyuncs.com/elaina/lnmp-nginx v1 5362b04ad066 About an hour ago 133MB
#2.登录阿里云
[root@docker nginx]# sudo docker login --username=fxsyiyebaofu registry.cn-shanghai.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
#3.上传镜像
[root@docker nginx]# docker push registry.cn-shanghai.aliyuncs.com/elaina/lnmp-nginx:v1
The push refers to repository [registry.cn-shanghai.aliyuncs.com/elaina/lnmp-nginx]
fe61ffbfead8: Pushed
90d6f5ce54c2: Pushed
21ef22ee2206: Pushed
20be8177ecd4: Pushed
a7d7ec415fe7: Pushed
85fcec7ef3ef: Pushed
3e5288f7a70f: Pushed
56bc37de0858: Pushed
1c91bf69a08b: Pushed
cb42413394c4: Pushed
v1: digest: sha256:218a463a25c8e438913029d6d71935775382e9d93c9362d0a23498cd6c594ca2 size: 2398