docker之镜像管理——仓库使用

仓库使用

docker官方仓库

注册

https://hub.docker.comnginx

自由注册,邮件激活便可使用docker

 

 

命令使用

Docker  pull/search/login/push/tag后端

 

tag [镜像名:版本]  [仓库]/[镜像名:版本]标记本地镜像,将其纳入某一仓库centos

Push [仓库]/[镜像名:版本]: 推送镜像到仓库  --须要登录 服务器

Search [镜像名]:在仓库中查询镜像 – 没法查询到tag版本 restful

Pull [镜像名:版本] 下载镜像到本地ui

Login:登录仓库spa

1、命令登录dockerhub3d

 

2、再使用tag命令标记一个镜像,指定本身的仓库rest

 

3、使用push命令推送此镜像到仓库里

 

4、打开查询本身仓库的镜像

 

私有仓库

搭建

下载registry镜像:docker pull registry

-----可配置加速器加速下载

 

启动

docker run -d --name reg -p 5000:5000 registry

 

而后能够经过restful接口查看仓库中的镜像(当前仓库是空的)

 

配置http传输

私服默认只能使用https,须要配置开放http

 

配置完毕重启下docker服务

systemctl daemon-reload

systemctl restart docker

私服仓库推送镜像

docker tag hello-world   192.168.244.7:5000/hello-world

 

docker push 192.168.244.7:5000/hello-world

 

查询镜像:http://192.168.244.5:5000/v2/_catalog   

 

查询hello版本:   http://192.168.244.5:5000/v2/hello/tags/list

 

commit镜像并上传仓库

建立一个centos容器:

启动后自动进入此容器

 

容器内安装nginx服务:

添加一下nginx源:

rpm -ivh http://nginx.org/packages/centos/7/noarch/RPMS/nginx-release-centos-7-0.el7.ngx.noarch.rpm

yum search nginx    ##搜索一下看看

yum install nginx -y    ## 安装

启动nginx服务

 

 ctrl +P+Q退出容器,在主机环境内校验nginx请求,正常获得欢迎页

 

 commit服务为一个nginx镜像

如今要将cent容器提交成为一个镜像,命令以下:

docker commit cent cent-ng:v1

可看到获得了新的镜像cent-ng:v1

 

 启动此nginx镜像

1、使用新建的镜像建立容器,并进入查看,发现已安装有nginx,但nginx并未启动

 

 容器内启动nginx服务,并退出容器。在主机方校验,nginx欢迎页面出现

 

 2、如今咱们但愿启动容器时,直接启动nginx服务,怎么作?

docker run -d --name ngx3 cent-ng:v1  /usr/sbin/nginx  -g  "daemon off;"

 

可看到,容器内nginx服务也已正常运行

 

ps:后面运行的命令都是容器命令,因为nginx命令没有设置到path中,因此全路径启动,

nginx -g这个参数是指能够在外面添加指令到nginx的配置文件中,

daemon off是指nginx服务不运行在后端,而是在前台运行(container中的服务必须运行在前台)

commit建立镜像方式的本质

 

 

原容器与commit后的镜像,在文件系统上并没有区别。只是把容器层原来的可写属性,置成了只读。因而变成了一个不可改的镜像

数据管理

docker容器运行,产生一些数据/文件/等等持久化的东西,不该该放在容器内部。应当以挂载的形式存在主机文件系统中。

docker的文件系统

 

 

  1. 镜像与容器读写层,经过联合文件系统,组成系统文件视角
  2. 容器服务运行中,必定会生成数据
  3. 容器只是运行态的服务器,是瞬时的,不承载数据的持久功能

volume文件挂载的探究

1volume参数建立容器数据卷

 

 

2咱们经过docker inspect data查看容器元数据,可看到挂载信息

 

 

3、在容器端添加一个文件

 

 

回主机目录查看,果真存在此文件:

 

 

4、在主机方添加一个文件

 

 

回容器里查看,果真也同步增长了此文件

 

 

5、指定主机目录方式挂载文件

格式:-v path1path2

以下命令,容器方会自动增长一个data目录

 

 

宿主机方,一样自动增长一个/opt/data目录

 

 

volumes-from引用数据卷

新启一容器,引入上一步的data容器目录

 

 

自动获得同一个目录,内容与data容器里挂载同样

 

 

 

备份/恢复数据卷   

 

备份:docker run --rm --volumes-from data -v $(pwd):/backup centos tar cvf /backup/data.tar /opt/data

恢复:docker run --rm --volumes-from data -v $(pwd):/backup centos tar xvf /backup/data.tar -C /

 

释义:

docker  run --rm ----- 启动一个新的容器,执行完毕删除

--volumes-from data ------- data容器中挂载卷

-v $(pwd):/backup   --------挂载当前目录到容器中为backup

cvf /backup/data.tar /opt/data --------- 备份/opt/data目录(即卷中全部的数据data.tar

 

xvf /backup/data.tar -C /  ---------- 解压data.tar 到根目录/ ,因tar归档中已包含了/opt/data路径

 

删除数据卷:

docker rm -v data

 

Dockerfile使用

dockerfile方式建立容器

最简单的dockerfile

 

 

建立镜像

 

 

使用此镜像运行一个容器

 

 

dockerfile基本要素

 

 

dockerfile指令

FROM

  FROM {base镜像}

  必须放在DOckerfile的第一行,表示从哪一个baseimage开始构建 

MAINTAINER

可选的,用来标识image做者的地方

RUN 

RUN都是启动一个容器、执行命令、而后提交存储层文件变动。

第一层 RUN command1 的执行仅仅是当前进程,一个内存上的变化而已,其结果不会形成任何文件。

而到第二层的时候,启动的是一个全新的容器,跟第一层的容器更彻底不要紧,天然不可能继承前一层构建过程当中的内存变化。

而若是须要将两条命令或者多条命令联合起来执行须要加上&&

如:cd /usr/local/src && wget xxxxxxx

CMD

  CMD的做用是做为执行container时候的默认行为(容器默认的启动命令)

  当运行container的时候声明了command,则再也不用image中的CMD默认所定义的命令

一个Dockerfile中只能有一个有效的CMD,当定义多个CMD的时候,只有最后一个才会起做用

EXPOSE

EXPOSE 指令是声明运行时容器提供服务端口,这只是一个声明,在运行时并不会由于这个声明应用就会开启这个端口的服务。在 Dockerfile 中写入这样的声明有两个好处,一个是帮助镜像使用者理解这个镜像服务的守护端口,以方便配置映射;另外一个用处则是在运行时使用随机端口映射时,也就是 docker run -P 时,会自动随机映射 EXPOSE 的端口。

entrypoint

entrypoint的做用是,把整个container变成可执行的文件,且不可以经过替换CMD的方法来改变建立container的方式。可是能够经过参数传递的方法影响到container内部

每一个Dockerfile只可以包含一个entrypoint,多个entrypoint只有最后一个有效

当定义了entrypoint之后,CMD只可以做为参数进行传递

ADD & COPY

  host上的文件或者目录复制到image中(可以进行自动解压压缩包)  

ENV

  用来设置环境变量,后续的RUN可使用它所建立的环境变量 

WORKDIR

  用来指定当前工做目录(或者称为当前目录) 

USER

  运行RUN指令的用户 

VOLUME

  用来建立一个在image以外的mount point

nginx镜像制做实战

编译/安装nginx

mkdir一个目录,在此目录内下载nginx源码包

wget  http://nginx.org/download/nginx-1.13.2.tar.gz

 

并建立一个Dockerfile文件,文件内制做一系列nginx的编译安装流程,内容如文件:

 

 

 

其中,每个RUN就是增长一个镜像层文件,一层层的RUN命令最终造成一系列镜像层

 

运行build指令(注意最后的.表明当前路径),制做镜像

docker build -t cent-ngx2  .

 

 

咱们查看一下这个镜像的层次历史

 

 

可看到,此镜像层基本与dockerfile文件的RUN是一一对应的

 

使用制做的nginx镜像,建立一个容器。

所以镜像无前台命令,由于必须指定启动命令 /usr/local/nginx/sbin/nginx -g "daemon off;"

 

 

为镜像指定环境变量,挂载目录,默认启动命令

在上一版镜像的基础上,咱们新加配置

 

 

执行:docker build -t cent-ngx3  .

 

 

查看镜像的历史,可看到比ngx2的镜像多了几个层

 

 

ngx3的镜像建立容器,已经不须要再指定cmd命令了

可执行命令自行校验:docker run -d --name ng2 cent-ngx3

相关文章
相关标签/搜索