dockerfile

dockerfile

dockerfile:用来构建docker images的源码,docker通过读取dockerfile的指令来完成镜像文件的构建。

构建dockerfile必须要有一个专门的工作目录,此目录只存放dockerfile和dockerfile制定需要复制的文件。

使用build构建images的时候,只需指定dockerfile所在的目录即可,而dockerfile的名字也只能是dockerfile。

dockerfile的格式:

1
2
3
#Comment
INSTRUCTION arguments
第一条指令必须是FROM,

dockerfile的每一条指令都会生成一个专有的单一的镜像层。镜像层越多越精细,就越容易容器之间的共享,但是性能也会相应的变低。原则:把做同一件事的多个语句放在一条指令中。

build阶段,基于基础镜像做目标镜像的过程,此过程会隐式启动容器。

dockerfile也可以定义环境变量:使用ENV定义环境变量,使用$variable_name或${variable_name}来引用环境变量。

.dockerignorefile:docker build会忽略此文件以及此文件中包含的文件。

Dockerfile Instructions:

1
2
3
4
5
6
7
8
9
FROM 
MAINTAINER <author's detail>
COPY <src>... <dest>
ADD
VOLUME
EXPOSE
RUN
CMD
ENTRYPOINT

docker镜像的分发

在本机打包docker镜像

1
[root@node01 secimg]# docker image save setimg:v0.1 testimg:v0.1 -o myimgs.tar

将打包的镜像传到目标服务器

1
[root@node01 secimg]# scp myimgs.tar master:

在目标服务器上加载镜像

1
[root@slave-node01 ~]# docker image load -i myimgs.tar

docker registry

Registry用于保存docker镜像,包括镜像的层次结构和元数据。
用户可以自建registry,也可以使用官方的docker hub

使用docker-distribution创建私有仓库

创建私有仓库

1
2
3
4
5
6
7
8
9
10
11
12
[root@node01 build_workshop]# yum -y install docker-distribution
[root@node01 build_workshop]# rpm -ql docker-distribution
/etc/docker-distribution/registry/config.yml
/usr/bin/registry
/usr/lib/systemd/system/docker-distribution.service
/usr/share/doc/docker-distribution-2.6.2
/usr/share/doc/docker-distribution-2.6.2/AUTHORS
/usr/share/doc/docker-distribution-2.6.2/CONTRIBUTING.md
/usr/share/doc/docker-distribution-2.6.2/LICENSE
/usr/share/doc/docker-distribution-2.6.2/MAINTAINERS
/usr/share/doc/docker-distribution-2.6.2/README.md
/var/lib/registry

docker-distribution的配置文件

1
2
3
4
5
6
7
8
9
10
11
version: 0.1
log:
fields:
service: registry
storage:
cache:
layerinfo: inmemory
filesystem:
rootdirectory: /var/lib/registry
http:
addr: :5000

启动docker-distribution

1
[root@node01 build_workshop]# systemctl start docker-distribution

向私有仓库放置镜像
先给镜像打标签

1
[root@slave-node01 ~]# docker tag testimg:v0.1 node01:5000/myimg:v0.1

docker默认只允许https协议想registry推送镜像,如果要使用http协议推送镜像,需要在配置文件中加入以下内容:

1
2
3
4
[root@slave-node01 docker]# vi daemon.json
{
"insecure-registries":["node02.magedu.com:5000"]
}

推送镜像

1
[root@slave-node01 docker]# docker push node01:5000/myimg

使用docker harbor创建私有仓库

安装docker-compose

1
[root@node02 ~]# yum -y install docker-compose

下载docker harbor的离线安装包

1
2