手动制作Docker容器镜像

news2024/11/25 2:57:40

文章目录

  • 手动制作Docker容器镜像
      • 说明
      • 前期准备
      • 制作镜像
        • 1.启动一个centos系统的容器
        • 2.在centos容器中源码安装httpd服务
        • 3.基于已经安装好httpd服务的centos容器制作一个httpd镜像
        • 4.验证制作出来的镜像的功能
        • 5.上传至自己的docker镜像仓库(可选)

手动制作Docker容器镜像

说明

基于centos镜像启动一个容器,在这个容器里面源码安装一个httpd服务,并写一个简单的网页。再把这个运行了httpd服务的容器制作成一个镜像。这样以后直接把这个制作的镜像运行起来,就可以运行一个httpd服务。


前期准备

需要在主机上安装docker。如何安装docker请阅读Docker基础

还需要注册一个docker账号(上传镜像需要)docker官网


制作镜像

1.启动一个centos系统的容器
//拉取centos镜像
[root@wanf ~]# docker pull centos
[root@wanf ~]# docker images 
REPOSITORY   TAG       IMAGE ID       CREATED       SIZE
centos       latest    5d0da3dc9764   2 years ago   231MB

//基于centos镜像运行一个centos容器,并进入该容器
[root@wanf ~]# docker run --name centos -it centos
[root@7c01047df948 /]# ls
bin  etc   lib	  lost+found  mnt  proc  run   srv  tmp  var
dev  home  lib64  media       opt  root  sbin  sys  usr
[root@7c01047df948 /]# 
2.在centos容器中源码安装httpd服务

在centos容器里面的操作与在centos主机上操作一样

源码编译安装httpd

//配置国内yum源
[root@7c01047df948 ~]# rm -rf /etc/yum.repos.d/*
[root@7c01047df948 ~]# curl -o /etc/yum.repos.d/CentOS-Base.repo https://mirrors.aliyun.com/repo/Centos-vault-8.5.2111.repo
[root@7c01047df948 ~]# sed -i -e '/mirrors.cloud.aliyuncs.com/d' -e '/mirrors.aliyuncs.com/d' /etc/yum.repos.d/CentOS-Base.repo
[root@7c01047df948 ~]# yum clean all 
[root@7c01047df948 ~]# yum makecache 
[root@7c01047df948 ~]# 

//安装依赖包和工具包
[root@7c01047df948 ~]# yum -y install openssl-devel pcre-devel expat-devel libtool gcc gcc-c++ make wget

//下载源码包
[root@7c01047df948 ~]# wget https://downloads.apache.org/apr/apr-1.7.4.tar.gz -P /usr/src/
[root@7c01047df948 ~]# wget https://downloads.apache.org/apr/apr-util-1.6.3.tar.gz -P /usr/src/
[root@7c01047df948 ~]# wget http://archive.apache.org/dist/httpd/httpd-2.4.57.tar.gz -P /usr/src/

//开始编译安装
[root@7c01047df948 ~]# cd /usr/src/
[root@7c01047df948 src]# tar -xf apr-1.7.4.tar.gz 
[root@7c01047df948 src]# cd apr-1.7.4
[root@7c01047df948 apr-1.7.4]# sed -i 's/$RM "$cfgfile"/#$RM "$cfgfile"/g' configure
[root@7c01047df948 apr-1.7.4]# ./configure --prefix=/usr/local/apr
[root@7c01047df948 apr-1.7.4]# make -j4 && make install

[root@7c01047df948 apr-1.7.4]# cd ..
[root@7c01047df948 src]# tar -xf apr-util-1.6.3.tar.gz 
[root@7c01047df948 src]# cd apr-util-1.6.3
[root@7c01047df948 apr-util-1.6.3]# ./configure --prefix=/usr/local/apr-util --with-apr=/usr/local/apr
[root@7c01047df948 apr-util-1.6.3]# make -j4 && make install

[root@7c01047df948 apr-util-1.6.3]# cd ..
[root@7c01047df948 src]# groupadd -r apache
[root@7c01047df948 src]# useradd -r -M -s /sbin/nologin -g apache apache
[root@7c01047df948 src]# tar -xf httpd-2.4.57.tar.gz 
[root@7c01047df948 src]# cd httpd-2.4.57
[root@7c01047df948 httpd-2.4.57]# ./configure --prefix=/usr/local/apache \
--sysconfdir=/etc/httpd24 \
--enable-so \
--enable-ssl \
--enable-cgi \
--enable-rewrite \
--with-zlib \
--with-pcre \
--with-apr=/usr/local/apr \
--with-apr-util=/usr/local/apr-util/ \
--enable-modules=most \
--enable-mpms-shared=all \
--with-mpm=prefork
(过程省略)
[root@7c01047df948 httpd-2.4.57]# make -j4 && make install
(过程省略)

//配置并启动httpd
[root@7c01047df948 ~]# echo 'export PATH=/usr/local/apache/bin:$PATH' > /etc/profile.d/httpd.sh
[root@7c01047df948 ~]# bash
[root@7c01047df948 ~]# ln -s /usr/local/apache/include/ /usr/include/httpd
[root@7c01047df948 ~]# echo 'MANPATH /usr/local/apache/man' >> /etc/man.config
[root@7c01047df948 ~]# sed -i '/#ServerName/s/#//g' /etc/httpd24/httpd.conf

//准备一个简单的静态web页面
[root@7c01047df948 ~]# vi /usr/local/apache/htdocs/index.html 
[root@7c01047df948 ~]# cat /usr/local/apache/htdocs/index.html 
<html><body><h1>nice moon!</h1></body></html>
[root@7c01047df948 ~]# /usr/local/apache/bin/apachectl start

//删除安装时用到的源码包
[root@7c01047df948 ~]# cd /usr/src/
[root@7c01047df948 src]# ls
apr-1.7.4	  apr-util-1.6.3	 debug	       httpd-2.4.57.tar.gz
apr-1.7.4.tar.gz  apr-util-1.6.3.tar.gz  httpd-2.4.57  kernels
[root@7c01047df948 src]# rm -rf a* h*
[root@7c01047df948 src]# ls
debug  kernels
[root@7c01047df948 src]# 
3.基于已经安装好httpd服务的centos容器制作一个httpd镜像

建议另起一个终端进行制作镜像的操作

lcwanf/httpd:v0.1的含义:lcwanf是我的docker账号名字,httpd是镜像名字,v0.1是版本号。如果需要上传到自己的docker仓库的话就需要加上lcwanf/

//制作镜像
[root@wanf ~]# docker commit -a 'lcwanf' -c 'CMD ["/usr/local/apache/bin/httpd","-X","-D","FOREGROUND"]' -p centos lcwanf/httpd:v0.1

[root@wanf ~]# docker images 
REPOSITORY     TAG       IMAGE ID       CREATED          SIZE
lcwanf/httpd   v0.1      d078f9fc7d54   35 seconds ago   574MB
centos         latest    5d0da3dc9764   2 years ago      231MB
[root@wanf ~]# 
4.验证制作出来的镜像的功能

运行这个容器,并映射到真机的8080端口号

//查看镜像id
[root@wanf ~]# docker images
REPOSITORY     TAG       IMAGE ID       CREATED         SIZE
lcwanf/httpd   v0.1      62551f713247   4 minutes ago   574MB
centos         latest    5d0da3dc9764   2 years ago     231MB

//运行容器
[root@wanf ~]# docker run -d -p 8080:80 --name httpd -it 62551f713247
fd52d76f603c94d9d1310f6b8925b107045728f468c63eb22d9c8036831c1ba1

//容器正在运行
[root@wanf ~]# docker ps 
CONTAINER ID   IMAGE          COMMAND                  CREATED         STATUS         PORTS                                   NAMES
fd52d76f603c   62551f713247   "/usr/local/apache/b…"   8 seconds ago   Up 7 seconds   0.0.0.0:8080->80/tcp, :::8080->80/tcp   httpd

//端口映射成功
[root@wanf ~]# ss -anlt
State   Recv-Q  Send-Q    Local Address:Port     Peer Address:Port  Process  
LISTEN  0       2048            0.0.0.0:8080          0.0.0.0:*              
LISTEN  0       128             0.0.0.0:22            0.0.0.0:*              
LISTEN  0       2048               [::]:8080             [::]:*              
LISTEN  0       128                [::]:22               [::]:*              
[root@wanf ~]# 

在浏览器访问测试

在这里插入图片描述

成功访问到


5.上传至自己的docker镜像仓库(可选)
//登录docker账号
[root@wanf ~]# docker login 
Log in with your Docker ID or email address to push and pull images from Docker Hub. If you don't have a Docker ID, head over to https://hub.docker.com/ to create one.
You can log in with your password or a Personal Access Token (PAT). Using a limited-scope PAT grants better security and is required for organizations using SSO. Learn more at https://docs.docker.com/go/access-tokens/

Username: lcwanf		//输入自己的用户名
Password: 			//输入密码
WARNING! Your password will be stored unencrypted in /root/.docker/config.json.
Configure a credential helper to remove this warning. See
https://docs.docker.com/engine/reference/commandline/login/#credentials-store

Login Succeeded		//登录成功
[root@wanf ~]# 

//上传镜像
[root@wanf ~]# docker push lcwanf/httpd:v0.1
(耐心等待...)

在docker官网登录自己的账号,在镜像仓库里面查看

在这里插入图片描述

上传完毕

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1170843.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

leetCode 322.零钱兑换 完全背包 + 动态规划 + 记忆化搜索 + 递推 + 空间优化

关于此题我的往期文章&#xff1a;LeetCode 322.零钱兑换 完全背包 动态规划_呵呵哒(&#xffe3;▽&#xffe3;)"的博客-CSDN博客https://heheda.blog.csdn.net/article/details/133386579看本期文章时&#xff0c;可以先回顾一下动态规划入门知识和完全背包理论和实战…

如何修改设置360浏览器内核模式

360安全浏览器现有两种内核模式&#xff0c;即“极速模式”和“兼容模式” 极速模式 “极速模式”是以Blink&#xff08;Webkit&#xff09;为内核的浏览模式&#xff0c;Blink内核具有更高的网页浏览速度和更好网页渲染效果。但由于少部分网银、政府、税务、办公系统等网站对B…

体验SOLIDWORKS钣金切口工具增强 硕迪科技

在工业生产制造中&#xff0c;钣金加工是一种常用的加工方式&#xff0c;在SOLIDWORKS2024新版本中&#xff0c;钣金切口工具再次增强了&#xff0c;从SOLIDWORKS 2024 开始&#xff0c; 您可以使用切口工具在空心或薄壁圆柱体和圆锥体中生成切口。 只需在现有空心或薄壁圆柱体…

Java 集合基础面试题(高频)

Java集合从分类上看&#xff0c;有 collection 和 map 两种&#xff0c;前者是存储对象的集合类&#xff0c;后者存储的是键值对&#xff08;key-value&#xff09; Collection Set 主要功能是保证存储的集合不会重复&#xff0c;至于集体是有序还是无序的&#xff0c;需要看…

【C++】内联函数一看就懂?

&#x1f490; &#x1f338; &#x1f337; &#x1f340; &#x1f339; &#x1f33b; &#x1f33a; &#x1f341; &#x1f343; &#x1f342; &#x1f33f; &#x1f344;&#x1f35d; &#x1f35b; &#x1f364; &#x1f4c3;个人主页 &#xff1a;阿然成长日记 …

spring技术体系的演进史

spring 最开始使用 spring 的时候&#xff0c;发现这个特别好用&#xff0c;最主要是把那些对象创建之前通过关键字 new 创建的方式把那些交给 spring ioc 容器来处理&#xff0c;其中 spring 还是使用了工厂模式来创建对应的对象。 然而这个时候需要自己写一堆配置&#xff…

【主题教育】民革达州市委会开展“践诺我与民革共成长“讲述活动

【主题教育】民革达州市委会开展“践诺,我与民革共成长“讲述活动 10月28日,民革达州市委会开展“践诺,我与民革共成长——我是民革‘螺丝钉’讲述活动”,有序推进民革四川省委会“重温加入民革承诺、守护民革精神家园”专项活动往心里走、往深里走、往实里走。达州市人大常委会…

Linux - 进程控制(上篇)- 进程创建 和 进程终止

进程控制 进程创建 对于进程的创建&#xff0c;你肯定知道&#xff0c;在 C/C 当中使用 fork&#xff08;&#xff09;函数&#xff0c;以当前可执行程序生成的进程为 父进程&#xff0c;创建这个父进程的 一个子进程&#xff0c;这个 子进程就是一个新的进程。 如上图所示&a…

基于8051单片机与1601LCD的计算器设计

**单片机设计介绍&#xff0c;1665基于8051单片机与1601LCD的计算器设计 文章目录 一 概要二、功能设计设计思路 三、 软件设计原理图 五、 程序六、 文章目录 一 概要 基于8051单片机和1601LCD的计算器设计是一种简单的嵌入式系统应用&#xff0c;其设计过程包括以下几个步骤…

CSP-31补题日记--梯度求解

202309-3-梯度求解 题目链接 http://118.190.20.162/view.page?gpidT173 最近刚刚在上数据结构二叉树 跟这道题真的是强相关 然后在就是涉及到了数学求导 这基本上是我复学两个月做的最久的题了 感觉做完这道题对栈和二叉树理解比以前清晰了很多 不摆了 上代码 ** 题目思路&am…

动态规划算法学习——解码方法

一&#xff0c;题目 一条包含字母 A-Z 的消息通过以下映射进行了 编码 &#xff1a; A -> "1" B -> "2" ... Z -> "26" 要 解码 已编码的消息&#xff0c;所有数字必须基于上述映射的方法&#xff0c;反向映射回字母&#xff08;可能有…

【C++】:类和对象(中):const成员 || 取地址及const取地址操作符重载

&#x1f4ea;1.const成员 &#x1f4ea;将const修饰的“成员函数”称之为const成员函数&#xff0c;const修饰类成员函数&#xff0c;实际修饰该成员函数隐含的this指针&#xff0c;表明在该成员函数中不能对类的任何成员进行修改 &#x1f388;首先我们来想一想为什么在C中…

421. 数组中两个数的最大异或值 (中等,位运算)

题目越短越难啊 关键在于要明白如果我们已经知道有一些组合进行异或运算能得到最高位为1的结果&#xff0c;那么最终答案必定在这些组合之中其次异或运算有个性质&#xff0c;ab XOR c 等价于 ba XOR c&#xff0c;因此对于第 k 位能否取到 1 的情况&#xff0c;我们只需要用 …

349.两个数组的交集+350.两个数组的交集II(set/multiset)

目录 一、349.两个数组的交集 二、350.两个数组的交集II 一、349.两个数组的交集 349. 两个数组的交集 - 力扣&#xff08;LeetCode&#xff09; class Solution { public:vector<int> intersection(vector<int>& nums1, vector<int>& nums2) {//…

Redis中Hash类型的命令

目录 哈希类型的命令 hset hget hexists hdel hkeys hvals hgetall hmget hlen hsetnx hincrby hincrbyfloat 内部编码 Hash类型的应用场景 作为缓存 哈希类型和关系型数据库的两点不同之处 缓存方式对比 Redis自身已经是键值对的结构了,Redis自身的键值对就…

【论文笔记】Point Cloud Forecasting as a Proxy for 4D Occupancy Forecasting

原文链接&#xff1a;https://arxiv.org/abs/2302.13130 1. 引言 运动规划需要预测其余物体的运动&#xff0c;但相应的感知模块如建图、目标检测、跟踪和轨迹预测通常都需要大量人力标注HD地图、语义标签、边界框或物体的轨迹&#xff0c;难以扩展到大型无标签数据集上。3D点…

Linux文本编辑器vim使用和配置详解

vim介绍 ​ vim是Linux的一款文本编辑器&#xff0c;可以用来编辑代码&#xff0c;而且支持语法高亮&#xff0c;还可以进行一系列配置使vim更多样化。也可以运行于windows&#xff0c;mac os上。 ​ vim有多种模式&#xff0c;但目前我们只介绍绝大多数场景用的到的模式&…

CCF CSP认证 历年题目自练Day43

题目一 试题编号&#xff1a; 201604-3 试题名称&#xff1a; 路径解析 时间限制&#xff1a; 1.0s 内存限制&#xff1a; 256.0MB 问题描述&#xff1a; 问题描述   在操作系统中&#xff0c;数据通常以文件的形式存储在文件系统中。文件系统一般采用层次化的组织形式&…

NLP之Bert多分类实现案例(数据获取与处理)

文章目录 1. 代码解读1.1 代码展示1.2 流程介绍1.3 debug的方式逐行介绍 3. 知识点 1. 代码解读 1.1 代码展示 import json import numpy as np from tqdm import tqdmbert_model "bert-base-chinese"from transformers import AutoTokenizertokenizer AutoToken…

深入解析Spring Boot自动配置原理:让你的应用无痛集成

1.前言 1.1springboot的优势 Spring Boot是一个用于构建独立、生产级的Spring应用程序的开发框架&#xff0c;它在简化配置、提高开发效率、增强功能丰富性等方面具有以下优势&#xff1a; 简化配置&#xff1a;Spring Boot采用了约定优于配置的原则&#xff0c;通过自动配置和…