6--容器数据卷,发布镜像,Docker小结

一、容器数据卷

1.什么是容器数据卷

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

6--容器数据卷,发布镜像,Docker小结

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  #查看挂载详细信息

6--容器数据卷,发布镜像,Docker小结

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).创建命名空间

6--容器数据卷,发布镜像,Docker小结

4)创建镜像仓库(默认私有,本地仓库)

6--容器数据卷,发布镜像,Docker小结

6--容器数据卷,发布镜像,Docker小结

6--容器数据卷,发布镜像,Docker小结

6--容器数据卷,发布镜像,Docker小结

5)浏览阿里云

6--容器数据卷,发布镜像,Docker小结

#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

三、Docker小结

6--容器数据卷,发布镜像,Docker小结

6--容器数据卷,发布镜像,Docker小结

6--容器数据卷,发布镜像,Docker小结

上一篇:变量的命名规范


下一篇:1.3 变量及其操作