dockerfile、私有仓库创建

2024-08-29 03:52

本文主要是介绍dockerfile、私有仓库创建,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

一、dockerfile应用
通过dockerfile创建⼀个在启动容器时,就可以启动httpd服务的镜像

1、步骤

1.创建⼀个⽬录,⽤于存储Docker file所使⽤的⽂件
 
2.在此⽬录中创建Docker file⽂件,以及镜像制作所使⽤的⽂件
 
3.使⽤docker build创建镜像

 

4.使⽤创建的镜像启动容器(验证)

2.Docker file关键字

1.FORM 指定基础镜像为该镜像的最后修改版本 
 
2.FROM <image :tag>指定基础镜像为该镜像的⼀个tag版本 
 
3.MAINTAINER 指定镜像创建者,企业内部不⽤指定,对外发布也可以不指定 
 
3.RUN 运⾏命令,安装软件 
 
4.CMD 设置container启动时进⾏的操作,如果容器镜像中有这个命名,启动容器时,不要⼿动让容器执⾏其他命令 
 
5.ENTRYPORINT(⼊⼝点)cmd每次只能执⾏⼀个指令, entrypoint可以多⾏执⾏。
 
6.USER设置容器进程的⼀些⽤户 
 
7.EXPOSE 暴露端⼝ 指定容器需要映射到宿主机的端⼝ 
 
8.ENV 设置环境变量 -e 
 
9.ADD 从宿主机src复制⽂件到容器的dest路径 
 
10.volumn 指定挂载点 
 
11.WROKDIR 切换⽬录 
 
12.ONBUILD在⼦镜像中执⾏指令

使用Dockerfile创建httpd镜像

# 停止docker服务
[root@docker ~]# systemctl stop docker
Warning: Stopping docker.service, but it can still be activated by:
  docker.socket
 
# 删除docker文件
[root@docker ~]# rm -rf /var/lib/docker/*
 
# 启动docker服务
[root@docker ~]# systemctl start docker
 
# 拉取centos镜像
[root@docker ~]#  docker pull centos

 
# 创建001目录
[root@docker ~]# mkdir 001
 
# 进到001目录下
[root@docker ~]# cd 001/
 
# 编辑启动脚本
[root@docker 001]# vim abc.sh
 
# !/bin/bash
 
rm -rf /run/httpd/*
 
exec /sbin/httpd -D FOREGROUND
 
# 查看创建的脚本
[root@docker 001]# ls
abc.sh
 
# 编辑index.html文件
[root@docker 001]# echo "httpd server is running" > index.html
[root@docker 001]# ls
abc.sh  index.html
 
# 编辑Dockerfile文件
[root@docker 001]# vim Dockerfile
FROM    centos:latest
 
MAINTAINER      "centos httpd server"
 
RUN     rm -rf /etc/yum.repos.d/*  
 
RUN     curl -o /etc/yum.repos.d/CentOS-Base.repo https://mirrors.aliyun.com/repo/Centos-vault-8.5.2111.repo
 
RUN     yum clean all && yum makecache
 
RUN     yum -y install epel-release
 
RUN     yum -y install httpd
 
ADD     abc.sh /abc.sh
 
ADD     index.html /var/www/html/index.html
 
RUN     chmod -v +x /abc.sh
 
CMD     ["/bin/bash","/abc.sh"]
 
# 初看当前的路径
[root@docker 001]# pwd
/root/httpd0
 
# 查看创建的文件
[root@docker 001]# ls
abc.sh  Dockerfile  index.html
 
# 创建镜像
[root@docker 001]# docker build -t centos:httpd .
 
# 查看镜像
[root@docker 001]# docker images
 
# 查看docker文件的变化
[root@docker 001]# ls /var/lib/docker/overlay2/

 
# 创建容器测试
[root@docker 001]# docker run -d --name c0 centos:httpd 
d398df1d2b235ad09068fa3b84b9ad2e0c31c03815982a92882609055a04d9ae
 
# 查看容器
[root@docker 001]# docker ps --all
 
# 访问测试
[root@docker 001]# curl 172.17.0.2
httpd server is running
 
# 容器挂载
[root@docker 001]# docker run -d -v /opt/:/var/www/html/ -p80 --name c1 centos:httpd
cb8c1626ce9a6ea8986c40f0efa4f657192ff7babf9aecd4acbfcc115f7e5d83
[root@docker 001]# ls /opt/
assets  containerd  favicon.ico  index.html
 
# 写测试内容
[root@docker 001]# echo "adsfadfafwqrdfqdsafdgdfsgda" > /opt/index.html
 
# 访问测试
[root@docker 001]# curl 172.17.0.2
adsfadfafwqrdfqdsafdgdfsgda
 
# 查看容器
[root@docker 001]# docker ps -all

#浏览器访问

使用Dockerfile创建yum镜像

# 修改Dockerfile文件
[root@docker 001]# vim Dockerfile 
FROM    centos:latest
 
MAINTAINER      "centos httpd server"
 
RUN     rm -rf /etc/yum.repos.d/*
 
RUN     curl -o /etc/yum.repos.d/CentOS-Base.repo https://mirrors.aliyun.com/repo/Centos-vault-8.5.2111.repo
 
RUN     yum clean all && yum makecache
 
RUN     yum -y install epel-release
 
# 运行文件创建镜像
[root@docker 001]# docker build -t centos:yum .
 
# 查看镜像
[root@docker 001]# docker images
REPOSITORY   TAG       IMAGE ID       CREATED         SIZE
centos       httpd     ebbf109944f1   5 minutes ago   338MB
centos       yum       ee9375ac855c   5 minutes ago   272MB
centos       latest    5d0da3dc9764   2 years ago     231MB
 
# 查看docker磁盘使用情况
[root@docker 002]# du -sh /var/lib/docker/overlay2/
1.1G    /var/lib/docker/overlay2/

使用Dockerfile创建nginx镜像

# 创建目录
[root@docker ~]# mkdir 002
 
# 进到002目录下
[root@docker ~]# cd 002/
 
# 编辑Dockerfile文件
[root@docker 002]# vim Dockerfile
 
# 这里使用之前创建的yum镜像
FROM    centos:yum 
 
MAINTAINER      维护世界和平
 
RUN     yum -y install nginx
 
RUN     yum -y install epel-release
 
RUN     echo "daemon off;" >> /etc/nginx/nginx.conf
EXPOSE  80
 
CMD     /usr/sbin/nginx
 
# 运行Dockerfile文件-创建nginx镜像
[root@docker 002]# docker build -t centos:nginx .
 
# 查看镜像
[root@docker 002]# docker images

# 使用nginx镜像创建容器c1
[root@docker 002]# docker run -d --name nc centos:nginx 
34bf6e6f1ecfcb0e1f717385a3553fe058bab65caa4603280951d98976efebe6
 
# 查看创建的容器
[root@docker 002]# docker ps --all

二、私有仓库

1.安装registry

# 查看安装的镜像
[root@docker ~]# docker images

2.创建容器,映射端⼝,挂载⽂件

# 创建挂载目录
[root@docker ~]# mkdir /regist
 
# 查看容器--全部删掉
[root@docker ~]# docker ps --all
CONTAINER ID   IMAGE     COMMAND   CREATED   STATUS    PORTS     NAMES
 
# 创建容器,映射端⼝,挂载⽂件
[root@docker ~]# docker run -d --name r1 -v /regist/:/var/lib/registry -p5000:5000 registry:latest
 
# 查看创建的容器
[root@docker ~]# docker ps --all
 
# 访问目录页
[root@docker ~]# curl localhost:5000/v2/_catalog
{"repositories":[]}

3.浏览器访问

4.配置pull和push,修改daemon.json文件

[root@docker ~]# vim /etc/docker/daemon.json
 
{
    "registry-mirrors": [
        "https://do.nark.eu.org",
        "https://dc.j8.work",
        "https://docker.m.daocloud.io",
        "https://dockerproxy.com",
        "https://docker.mirrors.ustc.edu.cn",
        "https://docker.nju.edu.cn"
    ],
        "hosts":  [
                  "tcp://0.0.0.0:2375",
                  "unix:///var/run/docker.sock"
        ],
        "insecure-registries":[
                "http://192.168.2.30:5000"
 
        ]
}

5.修改daemon.json文件,重启服务

[root@docker ~]# systemctl restart docker.service

6.启动registry容器

# 查看容器
[root@docker ~]# docker ps --all
 
# 启动r1容器
[root@docker ~]# docker start r1
r1
 
# 访问⽬录⻚
[root@docker ~]# curl localhost:5000/v2/_catalog
{"repositories":[]}

7.给yum镜像打标签

# 为要上传的镜像添加标记
[root@docker ~]# docker tag centos:yum 192.168.2.30:5000/centos:yum
 
# 查看打标签的镜像
[root@docker ~]# docker images

8.将打标签的镜像上传到registry上

[root@docker ~]# docker push 192.168.2.30:5000/centos:yum
The push refers to repository [192.168.2.30:5000/centos]
8c519ad003b5: Pushed 
acbca50d3a83: Pushed 
75cdf155cf76: Pushed 
07d4b334a739: Pushed 
74ddd0ec08fa: Pushed 
yum: digest: sha256:fa3b19efa5dd7e95f2ea17a3d3ffd2b22ffedc3ddef9af6a69e60239db568a6c size: 1366

9、在主机上进行访问

[root@docker ~]# curl localhost:5000/v2/_catalog
{"repositories":["centos"]}

10.浏览器访问

11、查看regist文件

[root@docker ~]# ls /regist/
docker
[root@docker ~]# cd /regist/docker/
[root@docker docker]# ls
registry
[root@docker docker]# cd registry/
[root@docker registry]# ls
v2
[root@docker registry]# cd v2
[root@docker v2]# ls
blobs  repositories
[root@docker v2]# cd repositories/
[root@docker repositories]# ls
centos
[root@docker repositories]# cd centos/
[root@docker centos]# ls
_layers  _manifests  _uploads
[root@docker centos]# cd _layers/
[root@docker _layers]# ls
sha256
[root@docker _layers]# cd sha256/
[root@docker sha256]# ls
30902bbca4a1d948703fd88d834ddf4dc8db69bb7e787ff18a762b6b4761fe37
46aacd2dd64664a37b01ee3a9f37561ed9b34c5af6661b880ee07a15d5fe8fd6
5a3d9ba04912ac6b1353410a0f18cc206b4920888e3187443abacefe3c9086ab
a1d0c75327776413fa0db9ed3adcdbadedc95a662eb1d360dad82bb913f8a1d1
ca847d29e1079f24cfc92b68cf37d5866060814df67cbdcd83edb16f1dc4fe54
ee9375ac855c3a1f8ec3eb03cee9317c3127e4be47cb3d6f519d9e6921a6a044

这篇关于dockerfile、私有仓库创建的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1116768

相关文章

idea中创建新类时自动添加注释的实现

《idea中创建新类时自动添加注释的实现》在每次使用idea创建一个新类时,过了一段时间发现看不懂这个类是用来干嘛的,为了解决这个问题,我们可以设置在创建一个新类时自动添加注释,帮助我们理解这个类的用... 目录前言:详细操作:步骤一:点击上方的 文件(File),点击&nbmyHIgsp;设置(Setti

Spring 中使用反射创建 Bean 实例的几种方式

《Spring中使用反射创建Bean实例的几种方式》文章介绍了在Spring框架中如何使用反射来创建Bean实例,包括使用Class.newInstance()、Constructor.newI... 目录1. 使用 Class.newInstance() (仅限无参构造函数):2. 使用 Construc

C#原型模式之如何通过克隆对象来优化创建过程

《C#原型模式之如何通过克隆对象来优化创建过程》原型模式是一种创建型设计模式,通过克隆现有对象来创建新对象,避免重复的创建成本和复杂的初始化过程,它适用于对象创建过程复杂、需要大量相似对象或避免重复初... 目录什么是原型模式?原型模式的工作原理C#中如何实现原型模式?1. 定义原型接口2. 实现原型接口3

国内环境搭建私有知识问答库踩坑记录(ollama+deepseek+ragflow)

《国内环境搭建私有知识问答库踩坑记录(ollama+deepseek+ragflow)》本文给大家利用deepseek模型搭建私有知识问答库的详细步骤和遇到的问题及解决办法,感兴趣的朋友一起看看吧... 目录1. 第1步大家在安装完ollama后,需要到系统环境变量中添加两个变量2. 第3步 “在cmd中

在Dockerfile中copy和add的区别及说明

《在Dockerfile中copy和add的区别及说明》COPY和ADD都是Dockerfile中用于文件复制的命令,但COPY仅用于本地文件或目录的复制,不支持自动解压缩;而ADD除了复制本地文件或... 目录在dockerfile中,copy 和 add有什么区别?COPY 命令ADD 命令总结在Doc

Python中conda虚拟环境创建及使用小结

《Python中conda虚拟环境创建及使用小结》本文主要介绍了Python中conda虚拟环境创建及使用小结,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们... 目录0.前言1.Miniconda安装2.conda本地基本操作3.创建conda虚拟环境4.激活c

使用Python创建一个能够筛选文件的PDF合并工具

《使用Python创建一个能够筛选文件的PDF合并工具》这篇文章主要为大家详细介绍了如何使用Python创建一个能够筛选文件的PDF合并工具,文中的示例代码讲解详细,感兴趣的小伙伴可以了解下... 目录背景主要功能全部代码代码解析1. 初始化 wx.Frame 窗口2. 创建工具栏3. 创建布局和界面控件4

Java中对象的创建和销毁过程详析

《Java中对象的创建和销毁过程详析》:本文主要介绍Java中对象的创建和销毁过程,对象的创建过程包括类加载检查、内存分配、初始化零值内存、设置对象头和执行init方法,对象的销毁过程由垃圾回收机... 目录前言对象的创建过程1. 类加载检查2China编程. 分配内存3. 初始化零值4. 设置对象头5. 执行

Android 悬浮窗开发示例((动态权限请求 | 前台服务和通知 | 悬浮窗创建 )

《Android悬浮窗开发示例((动态权限请求|前台服务和通知|悬浮窗创建)》本文介绍了Android悬浮窗的实现效果,包括动态权限请求、前台服务和通知的使用,悬浮窗权限需要动态申请并引导... 目录一、悬浮窗 动态权限请求1、动态请求权限2、悬浮窗权限说明3、检查动态权限4、申请动态权限5、权限设置完毕后

Python创建Excel的4种方式小结

《Python创建Excel的4种方式小结》这篇文章主要为大家详细介绍了Python中创建Excel的4种常见方式,文中的示例代码简洁易懂,具有一定的参考价值,感兴趣的小伙伴可以学习一下... 目录库的安装代码1——pandas代码2——openpyxl代码3——xlsxwriterwww.cppcns.c