【Docker】Docker提升

狂神老师的视频地址:https://space.bilibili.com/95256449

1、容器数据卷

1.1、什么是容器数据卷?

当容器中的数据需要持久化,并且可以存储到本地,例如数据库中的数据,不能因为容器被删而丢失,卷技术主要解决的就是这个问题。

简单的来说就是目录的挂载,将容器内的目录,挂载到Linux上面!并且可以自动同步

总结一句话:容器的持久化和同步操作,容器间数据也是可以共享的

1.2、使用数据卷

方式一:直接使用命令来挂载 -v

# -v 主机路径 容器路径
[root@localhost ~]# docker run -it -v /home/test:/home centos /bin/bash

#查看容器inspect信息:
"Mounts": [
            {
                "Type": "bind",
                "Source": "/home/test",  #目标文件
                "Destination": "/home",  #源文件
                "Mode": "",
                "RW": true,
                "Propagation": "rprivate"
            }
        ],

当容器内目录挂载到主机上之后,两边文件就会同步更新,一边修改一遍对应更新,即使关闭容器后修改文件,再打开依旧是同步的。

有了这样的映射,就不用每次都进入容器内部修改文件了。

1.3、容器数据卷实战

#获取镜像
[root@localhost ~]# docker pull mysql:5.7

#运行容器,需要做数据挂载,#注意!安装启动mysql是需要配置密码

#官方测试例子:docker run ---name some-mysql -e MYSQL_ROOT_PASSWORD=123456 -d mysql:tag

#我们启动mysql
-d 后台运行
-p 端口映射
-v 卷挂载
-e 环境配置
--name 容器名字
[root@localhost ~]# docker run -d -p 3310:3306 -v /home/mysql/conf:/etc/mysql/conf.d -v /home/mysql/data:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=123456 --name mysql01 mysql:5.7
eeb23b628576391bb0707fa297e7e741bb801a3a5a5f454e7c0bfcfe0aed9cc7
[root@localhost ~]# docker ps
CONTAINER ID   IMAGE                 COMMAND                  CREATED         STATUS          PORTS                                                  NAMES
eeb23b628576   mysql:5.7             "docker-entrypoint.s…"   7 seconds ago   Up 6 seconds    33060/tcp, 0.0.0.0:3310->3306/tcp, :::3310->3306/tcp   mysql01

这个时候就相当于对mysql的数据做了备份,可以在/home/mysql/data下面看到数据库的实时数据,即使删除了容器,这个文件依旧会存在,这就实现了持久化。
然后通过/home/mysql/conf.d下面又可以对数据库参数配置

1.4、具名挂载和匿名挂载

#匿名挂载,就是没有写容器内路径
[root@localhost data]# docker run -d --name nginx01 -v /etc/nginx nginx
d5c6e885e07236396254fe7dafd9352e46667dd7d47e63bb12527fc6fe657e4

# volume ls命令查看容器映射信息
[root@localhost data]# docker volume ls
DRIVER    VOLUME NAME
local     3cf21ec8b28c95c392d9bff767af9d85810256c069c65c595d280bbf3c078ec3

# 这就是匿名挂载,没有写容器外的路径

#具名挂载,写了容器的路径(这里是没写绝对路径)
[root@localhost data]# docker run -d --name nginx02 -v juming-nginx:/etc/nginx nginx
aec8f679b02bcb4ae34d85bce640178fc0f89ad3304337d4c574d8e5b2d1c9a3
[root@localhost data]# docker volume ls
DRIVER    VOLUME NAME
local     juming-nginx

# volume inspect 文件名 查看具体挂载的信息
[root@localhost data]# docker volume inspect juming-nginx
[
    {
        "CreatedAt": "2022-06-09T11:21:12+08:00",
        "Driver": "local",
        "Labels": null,
        "Mountpoint": "/var/lib/docker/volumes/juming-nginx/_data",
        "Name": "juming-nginx",
        "Options": null,
        "Scope": "local"
    }
]

所有的容器在没有指定目录的情况默认都是在:var/lib/docker/volumes/xxxx/_data 下的。

绝大多数情况都是使用具名挂载,方便找到卷。

#如果确定是具名挂载还匿名挂载
-v 容器路径               #匿名
-v 卷名:容器内路径        #具名
-v 容器外路径:容器内路径  #具名

拓展:

ro :  只读
rw : 可读可写

#容器内部只能对容器外部文件读
docker run -d --name nginx02 -v juming-nginx:/etc/nginx:ro nginx
#容器内部能对容器外部文件读和写
docker run -d --name nginx02 -v juming-nginx:/etc/nginx:rw nginx

2、Dockerfile

Dockerfile就是用来构建docker镜像的构建文件!命令脚本!先体验一下!
通过这个脚本可以生成镜像,镜像是一层一层的,脚本一个个的命令,每个命令都是一层的!

#文件中的内容,指令(大写) 参数
#这里的每一个命令相当于镜像的一层
FROM centos
VOLUME {"VOLUME01","VOLUME02"}
CMD ECHO "---end----"
CMD /bin/bash

这里贴老师的命令截图:

启动自己的镜像生成自己的容器

通过inspect查看容器匿名挂载的具体位置:

2.1、DockerFile的指令

FROM       # 基础镜像,一切从这构建  
MAINTAINER # 镜像是谁写的,姓名+邮箱
RUN        # 镜像构建的时候需要运行的命令
ADD        # 步骤,tomcat镜像,这个tomcat压缩包!添加内容
WORKDIR    # 镜像的工作目录
VOLUME    # 挂载的目录
EXPOSE     # 保留端口设置
CMD        # 指定启动容器的时候运行的命令 (后面的命令会替代前面的命令只有最有一个生效)
ENTRYPOINT # 指定启动容器的时候运行的命令 (所有命令都执行,叠加)
ONBUILD    # 当构建一个被继承的DockerFIle这个时候就会运行ONBUILD的指令。触发指令
ENV        # 构建的时候设置环境变量

2.3、实战测试

Docker Hub 中99%的镜像都是从scratch这个基础镜像来的。

创建一个自己的centos

编写一个DockerFile文件

[root@localhost dockerfile]# cat mydockerfile 
FROM centos
MAINTAINER wuchengyong<2213849145@qq.com>

ENV MYPATH /usr/local
WORKDIR $MYPATH

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

EXPORT 80

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

运行这个文件

#这里yum运行报错,和centos版本有关,就没运行yum
[root@localhost dockerfile]# docker build -f mydockerfile -t mycentos:01 .
Sending build context to Docker daemon  2.048kB
Step 1/8 : FROM centos
 ---> 5d0da3dc9764
Step 2/8 : MAINTAINER wuchengyong<2213849145@qq.com>
 ---> Using cache
 ---> 68e0ad4cde57
Step 3/8 : ENV MYPATH /usr/local
 ---> Using cache
 ---> c922f1fa2a8b
Step 4/8 : WORKDIR $MYPATH
 ---> Using cache
 ---> 90691023e356
Step 5/8 : EXPOSE 80
 ---> Running in bef88f9b2c48
Removing intermediate container bef88f9b2c48
 ---> 1660be64f6bd
Step 6/8 : CMD echo $MYPATH
 ---> Running in c63b64a645e0
Removing intermediate container c63b64a645e0
 ---> da596ce69f90
Step 7/8 : CMD echo "------end-----"
 ---> Running in de5775709e4a
Removing intermediate container de5775709e4a
 ---> c9be9cea614d
Step 8/8 : CMD /bin/bash
 ---> Running in c25fd16c8123
Removing intermediate container c25fd16c8123
 ---> 05706af3a30c
Successfully built 05706af3a30c
Successfully tagged mycentos:01
[root@localhost dockerfile]# docker images
REPOSITORY            TAG       IMAGE ID       CREATED         SIZE
mycentos              01        05706af3a30c   3 seconds ago   231MB
tomcat                9.0       bce48a218e94   2 weeks ago     680MB
tomcat                latest    c795915cb678   2 weeks ago     680MB
redis                 latest    53aa81e8adfa   2 weeks ago     117MB
nginx                 latest    0e901e68141f   2 weeks ago     142MB
mysql                 5.7       2a0961b7de03   2 weeks ago     462MB
mysql                 latest    65b636d5542b   2 weeks ago     524MB
portainer/portainer   latest    12b0b8dced14   5 weeks ago     75.4MB
hello-world           latest    feb5d9fea6a5   8 months ago    13.3kB
centos                latest    5d0da3dc9764   9 months ago    231MB
[root@localhost dockerfile]# docker run -it mycentos:01
[root@e20e46f5c7b5 local]# pwd
/usr/local

查看镜像历史:

[root@localhost dockerfile]# docker history 05706af3a30c
IMAGE          CREATED          CREATED BY                                      SIZE      COMMENT
05706af3a30c   5 minutes ago    /bin/sh -c #(nop)  CMD ["/bin/sh" "-c" "/bin…   0B        
c9be9cea614d   5 minutes ago    /bin/sh -c #(nop)  CMD ["/bin/sh" "-c" "echo…   0B        
da596ce69f90   5 minutes ago    /bin/sh -c #(nop)  CMD ["/bin/sh" "-c" "echo…   0B        
1660be64f6bd   5 minutes ago    /bin/sh -c #(nop)  EXPOSE 80                    0B        
90691023e356   11 minutes ago   /bin/sh -c #(nop) WORKDIR /usr/local            0B        
c922f1fa2a8b   11 minutes ago   /bin/sh -c #(nop)  ENV MYPATH=/usr/local        0B        
68e0ad4cde57   11 minutes ago   /bin/sh -c #(nop)  MAINTAINER wuchengyong<22…   0B        
5d0da3dc9764   9 months ago     /bin/sh -c #(nop)  CMD ["/bin/bash"]            0B        
<missing>      9 months ago     /bin/sh -c #(nop)  LABEL org.label-schema.sc…   0B        
<missing>      9 months ago     /bin/sh -c #(nop) ADD file:805cb5e15fb6e0bb0…   231MB   

3、发布自己的镜像

DockerHub

1、确认https://hub.docker.com可以访问
2、确认账户可以登录
3、在我们的服务器上提交自己的镜像

[root@localhost dockerfile]# docker login --help

Usage:  docker login [OPTIONS] [SERVER]

Log in to a Docker registry.
If no server is specified, the default is defined by the daemon.

Options:
  -p, --password string   Password
      --password-stdin    Take the password from stdin
  -u, --username string   Username
[root@localhost dockerfile]# docker login -u wuchengyong
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@localhost dockerfile]# docker tag 05706af3a30c wuchengyong/mycentos:01
[root@localhost dockerfile]# docker push wuchengyong/mycentos:01
The push refers to repository [docker.io/wuchengyong/mycentos]
74ddd0ec08fa: Pushed 

阿里云镜像

1、登录阿里云
2、找到镜像服务
3、创建命名空间

4、创建个人仓库

5、浏览阿里云仓库信息

posted @ 2022-06-06 11:11  吴承勇  阅读(71)  评论(0编辑  收藏  举报