Docker 镜像创建和私有仓库建立

本文详细介绍了Docker镜像的创建方法,包括基于Dockerfile、已有镜像容器和本地模板创建,并讲解了Dockerfile的结构和常用指令。此外,还阐述了如何建立Docker私有仓库,包括下载registry镜像、配置客户端、上传和下载镜像等步骤。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、镜像创建方法

1.1、Docker 镜像概述

  • Docker镜像是什么

在 Docker 的术语里,一个只读层被称为镜像,一个镜像是永久不会变的。
由于 Docker 使用一个统一文件系统,Docker 进程认为整个文件系统是以读写方式挂载的。 但是所有的变更都发生顶层的可写层,而下层的原始的只读镜像文件并未变化,所以Docker镜像是分层的

  • 构建镜像一般有三种方法

    • 基于Dockerfile(最常用)创建
    • 基于已有的镜像容器进行创建镜像
    • 基于本地模板进行构建
  • Docker镜像的分层

在这里插入图片描述

1.2、基于已有镜像容器创建

创建容器并创建镜像

[root@localhost ~]# docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
nginx               latest              c39a868aad02        10 days ago         133MB
centos              latest              0d120b6ccaa8        3 months ago        215MB
[root@localhost ~]# docker create -it nginx:latest /bin/bash
676077b1c9e6351939e007bcbeb899b8da0fd768ab4ec61824f122fefcf75d0a
[root@localhost ~]# docker ps -a
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS               NAMES
676077b1c9e6        nginx:latest        "/docker-entrypoint.…"   7 seconds ago       Created                                 magical_grothendieck
[root@localhost ~]# docker commit -m "lu" -a "lu" 676077b1c9e6 lu:test
sha256:6601cabced83ac2c43aa65f9fb44827d691c794752298aba912229d1730ae45a
[root@localhost ~]# docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
lu                  test                6601cabced83        14 seconds ago      133MB
nginx               latest              c39a868aad02        10 days ago         133MB
centos              latest              0d120b6ccaa8        3 months ago        215MB

1.3、基于本地模板创建

下载本地模板

通过导入系统模板文件可以生成镜像,模板可以从OPENVZ开源项目下载

地址为:https://wiki.openvz.org/Download/template/precreated

或者使用wget下载:wget http://download.openvz.org/template/precreated/debian-7.0-x86-minimal.tar.gz

创建镜像

[root@localhost ~]# ls
anaconda-ks.cfg                docker.sh
debian-7.0-x86-minimal.tar.gz  initial-setup-ks.cfg
[root@localhost ~]# cat debian-7.0-x86-minimal.tar.gz | docker import - lu:new
sha256:6cfb538b32a202cbc2c2122f3c4a952cd5bdd98e6f0fc9a19ffd9cca44e3c43d
[root@localhost ~]# docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
lu                  new                 6cfb538b32a2        7 seconds ago       215MB
lu                  test                6601cabced83        6 minutes ago       133MB

1.4、基于Dockerfile 创建镜像

1.4.1、Dockerfile 概述

Dockerfile是由一组指令组成的文件

Dockerfile结构分成四个部分:

1、基础镜像信息

2、维护者信息

3、镜像操作指令

4、容器启动时指定指令

1.4.2、Dockerfile 常用操作指令

指令含义
FROM 镜像指定新镜像所基于的镜像,第一条指令必须为FROM指令,每创建一个镜像就需要一条FROM指令
MAINTAINER 名字说明新镜像的维护人信息
RUN 命令在所基于的镜像执行命令,并提交到新的镜像中
HEALTHCHECK健康检查
ONBUILD 命令指定所生成的镜像作为一个基础镜像时所要运行的命令
WORKDIR 路径为后续的RUN、CMD、ENTRYPOINT指定工作目录
ADD 源文件/目录 目标文件/目录将源文件复制到目标文件,源文件要与Dockerfile位于相同目录中,或者是一个URL,也有直接解压缩包功能
COPY 源文件/目录 目标文件/目录将本地主机上的文件/目录复制到目标地点,源文件/目录要与Dockerfile在相同的目录中
EXPOSE 端口号指定新镜像加载到Docker时要开启的端口
VOLUME [“目录”]在容器中创建一个挂载点
USER 用户名/UID指定运行容器时的用户
ENV 环境变量 变量值设置一个环境变量的值,会被后面的RUN使用
CMD [ “要运行的程序”,“参数1”,“参数2”]指令启动容器时要运行的命令或者脚本,Dockerfile只能有一条CMD命令,如果指定多条则只能执行最后一条

1.4.3、创建镜像

以创建apache镜像为例

编写Dockerfile文件

mkdir apache
cd apache

vim Dockerfile

FROM centos:7
MAINTAINER lu
RUN yum -y  update
RUN yum -y install httpd
EXPOSE 80
ADD index.html /var/www/html/index.html
ADD run.sh /run.sh
RUN chmod 755 /run.sh
CMD ["./run.sh"]

vim run.sh

#!/bin/bash
rm -rf /run/httpd/*
exec /usr/sbin/apachectl -D FOREGROUND

echo "123" > index.html

docker build -t httpd:centos .
docker run -d -p 1111:80 http:centos

真机浏览器访问20.0.0.21:1111 可以发现创建成功

二、Docker 私有仓库建立

  • 私有仓库设置步骤

1、下载registry镜像

2、客户端设置daemon.json文件,指定私有仓库位置

3、生成registry容器,开放5000端口

4、镜像打标签

5、上传镜像,docker push

6、下载镜像,docker pull

  • 建立私有仓库
docker pull nginx 作为要上传的镜像

docker pull registry

vim /etc/docker/daemon.json

{
  "insecure-registries":["20.0.0.21:5000"],        ##添加这一行
  "registry-mirrors": ["https://fm8gnp3.mirror.aliyuncs.com"]    #为阿里云镜像加速地址之前有介绍
}     


systemctl restart docker


docker create -it registry /bin/bash

docker run -d -p 5000:5000 -v /data/registry:/tmp/registry registry

docker tag nginx:latest 20.0.0.21:5000/nginx

docker push 20.0.0.21:5000/nginx

[root@docker ~]# curl -XGET http://20.0.0.21:5000/v2/_catalog
{"repositories":["nginx"]}


docker rmi -f  c39a868aad02



docker pull 20.0.0.21:5000/nginx


[root@docker ~]# docker images
20.0.0.21:5000/nginx   latest              c39a868aad02        5 days ago          133MB
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值