docker自定义镜像与仓库

自定义镜像

一般使用的镜像都存储在私有仓库当中(如常用红帽官方提供的公共镜像仓库)。
我们可以对原有的镜像文件进行修改,再生成新的镜像的操作,叫做自定义镜像。

两种定义方式:

一种是docker commit,一种是docker bulid

docker commit

docker commit 是交互式的,需要先行运行一个镜像进入到容器内做修改,然后再对已经更改过的容器ID进行生成新镜像。
注意:此方式只能生层一层容器ID

命令格式

docker ps //查看运行容器ID

docker commit 容器ID 新镜像名:标签

(只要有容器ID无论是否启动都能创建新镜像)

docker build

docker build 涉及到一个Dockerfile(注意大写D)文件,它是一个非交互式的命令,可以先在Docker文件中编写镜像文件中需要进行的操作和其他变量的修改,再运行docker build 即可。

注意:

  • 此方式会依据Dockerfile中的命令生成多层容器ID;
  • 此方式在运行docker时必须要保证当前目录下要有Dockerfile文件。

Dockerfile 语法格式:

  • FROM:基础镜像
  • MAINTAINER:镜像创建者信息(说明)
  • EXPOSE:开放的端口
  • ENV:设置环境变量(启动命令后生效)
  • ADD:复制文件到镜像
  • RUN:制作镜像时执行的命令,可以有多个
  • WORKDIR:定义容器默认工作目录(进去就在此目录中,相当于cd)
  • CMD:容器启动时执行的命令,仅可以有一条CMD

每个镜像在启动的时候都有一个默认的启动命令,这个启动命令也可以设置;
凡是CMD提供的命令都是上帝级的;
当我们需要在容器开启时运行执行多个命令时,可自定义CMD所执行的命令成一个脚本,此脚本包含多个启动命令:

   [root@docker1 ~]#  vim  a.sh
    #! /bin/bash
    /usr/sbin/httpd  -D  &   (必须要放置后台防止阻塞)
    /usr/sbin/sshd  -D  &
    ... ...
   [root@docker1 ~]# chmod +x a.sh

命令格式:

[root@docker1 bulid]# vi Dockerfile
FROM  docker.io/myos:latest
RUN yum -y install httpd
ENV EnvironmentFile=/etc/sysconfig/httpd
WORKDIR /var/www/html/            //定义容器默认工作目录
ADD index.html index.html
EXPOSE 80                //设置开放端口号
EXPOST 443
CMD ["/usr/sbin/httpd", "-DFOREGROUND"]

[root@docker1 bulid]# docker build -t docker.io/myos:http .

可在真机的系统文件程序下寻找相关参数:

systemctl status httpd ->
vim /usr/lib/systemd/system/httpd.service

自定义仓库

原理图将一台主机作为共享镜像的服务器,如上图中的私有仓库30

搭建私有仓库

yum install docker-distribution
systemctl start docker-distribution
systemctl enable docker-distribution

生成相关文件:

/etc/docker-distribution/registry/config.yml #仓库配置文件

/var/lib/registry #数据存储路径

原理:

1.当搭建好私有仓库后,在客户机(31,32)修改配置文件,指定镜像仓库的所在地

    [root@docker1 ~]# vim /etc/sysconfig/docker
   ... ...
    INSECURE_REGISTRY='--insecure-registry 192.168.1.30:5000' //允许非加密方式访问仓库
    ADD_REGISTRY='--add-registry 192.168.1.30:5000'  //仓库地址,registry默认端口5000
    ... ...
    [root@docker1 ~]# systemctl restart docker

复制配置文件到docker2, 两种方法:
scp /etc/sysconfig/docker 192.168.1.32:/etc/sysconfig
rsync -av 192.168.1.31:/etc/sysconfig/docker /etc/sysconfig

2.为所要上传的镜像打上标签,方便查询:

docker tag 镜像:标签 IP:5000/镜像:标签

3.使用docker1为仓库上传镜像:

  [root@docker1 ~]# docker push 192.168.1.31:5000/docker.io/busybox:latest

4.此时docker2可以直接从私有仓库中下载镜像文件

 [root@docker2 ~]# docker search   192.168.1.31:5000/docker.io/busybox:latest
 [root@docker2 ~]# docker pull 192.168.1.31:5000/docker.io/busybox:latest

在拥有docker情况下的自定义仓库的另一种方式

启动一个registry容器

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

执行命令查看仓库里的镜像:

curl -X GET http://127.0.0.1:5000/v2/_catalog

其中repositories对应的值是空的json数组,表示目前仓库里还没有镜像:

{"repositories":[]}

将私有镜像推送至私有仓库:

docker push 192.168.1.31:5000/tomcat
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值