Docker鏡像制作案例

1、使用Docker commit制作鏡像

為ubuntu鏡像提供ssh服務

①:拉取鏡像

[root@openEuler-1 ~]# docker pull ubuntu:18.04

②:啟動鏡像

[root@openEuler-1 ~]# docker run --name c1 -it --rm ubuntu:18.04 bash

③:替換aliyun源

mv /etc/apt/sources.list{,.bak}
echo deb http://mirrors.163.com/ubuntu/ bionic main restricted universe multiverse > /etc/apt/sources.list.d/163.list
echo deb http://mirrors.163.com/ubuntu/ bionic-security main restricted universe multiverse >> /etc/apt/sources.list.d/163.list
echo deb http://mirrors.163.com/ubuntu/ bionic-updates main restricted universe multiverse >> /etc/apt/sources.list.d/163.list
echo deb http://mirrors.163.com/ubuntu/ bionic-proposed main restricted universe multiverse >> /etc/apt/sources.list.d/163.list
echo deb http://mirrors.163.com/ubuntu/ bionic-backports main restricted universe multiverse >> /etc/apt/sources.list.d/163.list
echo deb-src http://mirrors.163.com/ubuntu/ bionic main restricted universe multiverse >> /etc/apt/sources.list.d/163.list
echo deb-src http://mirrors.163.com/ubuntu/ bionic-security main restricted universe multiverse >> /etc/apt/sources.list.d/163.list
echo deb-src http://mirrors.163.com/ubuntu/ bionic-updates main restricted universe multiverse >> /etc/apt/sources.list.d/163.list
echo deb-src http://mirrors.163.com/ubuntu/ bionic-proposed main restricted universe multiverse >> /etc/apt/sources.list.d/163.list
echo deb-src http://mirrors.163.com/ubuntu/ bionic-backports main restricted universe multiverse >> /etc/apt/sources.list.d/163.list
apt update

④:安裝并配置ssh服務

root@8377a04ab754:/# apt install openssh-server -y
root@8377a04ab754:/# mkdir -p /var/run/sshd
root@8377a04ab754:/# /usr/sbin/sshd -D &
# 取消pam登錄限制
root@8377a04ab754:/# sed -ri 's/session    required     pam_loginuid.so/#session    required     pam_loginuid.so/' /etc/pam.d/sshd

⑤:配置免密登錄

# 宿主機上:創建密鑰對
[root@openEuler-1 ~]# ssh-keygen -f ~/.ssh/id_rsa -P "" -q
[root@openEuler-1 ~]# cat .ssh/id_rsa.pub# 容器內:將剛剛查詢到的公鑰追加進去
root@8377a04ab754:/# mkdir ~/.sshi
root@8377a04ab754:/# echo "ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABgQCjVp4DSSoBFnxhT/9KsMwPi8hGU9vDK+c6H/X7f0tE+4sYeAIdXtLbn6q0aDV1AOQGfVLtITEHrdxNpUjqDvaNoxJj0Ac9zPn9qGYn6OTcvFoT45UNdglcwN7xx1MrG1piHTHSoZ+aSf0AOnkNH+RPOvXM6Oln46nPGjNsV/xMt8I0SX5lomd9jptCL57DvBiJ+JcRr9POBepkfq+/vO1zdmmfoaUyhdsc2mkKzRcvPs1H26mIyH+XOmzJKfhkqTYw2BrdtGISONR4OfiMcF9JULGc3nxUFClZ+0VeLdRK8xSTYOW4JZy6Zp2YQCotFQgSWmh74q9oCCpfAVxSuDmF3RLfzNzAOPzOyvqildEBnJfeUKIjF8QdyBPbWFpvugtZlnoG/IUNPCa5Iq92w2ulAl8kRmgK3OPKPHtdm5IspkCnVQN1QVAPmmJs7JVSMatcmA3tTthi/9wFBmHufZ8iemSdvEGJIKUZEVBIyOuwgIazDQLueVtYu7X55+lKdO8= root@openEuler-1
> " > ~/.ssh/authorized_keys

⑥:編寫服務器啟動腳本

root@8377a04ab754:/# echo '#!/bin/bash' > /run.sh
root@8377a04ab754:/# echo /usr/sbin/sshd -D >> /run.sh
root@8377a04ab754:/# chmod +x /run.sh

⑦:提交鏡像

[root@openEuler-1 ~]# docker commit c1 sshd:ubuntu_v1
[root@openEuler-1 ~]# docker images
REPOSITORY   TAG         IMAGE ID       CREATED         SIZE
sshd         ubuntu_v1   eab45d3513f7   8 seconds ago   250MB
ubuntu       18.04       f9a80a55f492   2 years ago     63.2MB

⑧:驗證鏡像

[root@openEuler-1 ~]# docker run -d -p 9001:22 sshd:ubuntu_v1 /run.sh
[root@openEuler-1 ~]# ssh 192.168.93.10 -p 9001

2、使用dockerfile制作鏡像

2.1、基于 ubuntu:18.04 構建一個宿主機免密鑰登錄

①:編寫Dockerfile

[root@openEuler-1 ~]# docker pull ubuntu:18.04
18.04: Pulling from library/ubuntu
Digest: sha256:152dc042452c496007f07ca9127571cb9c29697f42acbfad72324b2bb2e43c98
Status: Image is up to date for ubuntu:18.04
docker.io/library/ubuntu:18.04
[root@openEuler-1 ~]# mkdir ubuntu/ && cd ubuntu/
[root@openEuler-1 ubuntu]# cat Dockerfile
FROM ubuntu:18.04
MAINTAINER "obboda <obboda@163.com>"RUN mv /etc/apt/sources.list /etc/apt/sources.list.bak
COPY aliyun.list /etc/apt/sources.list.d/aliyun.list
RUN apt update && apt install openssh-server -y && mkdir -p /var/run/sshd
RUN sed -ri 's/session    required     pam_loginuid.so/#session    required     pam_loginuid.so/' /etc/pam.d/sshd
RUN mkdir /root/.ssh
COPY authorized_keys /root/.ssh/authorized_keysEXPOSE 22/tcp
CMD ["/usr/sbin/sshd","-D"]

②:準備文件

# 制作密鑰
ssh-keygen -f ~/.ssh/id_rsa -P "" -qcat > aliyun.list << EOF
> deb http://mirrors.aliyun.com/ubuntu/ bionic main restricted universe multiverse
> deb http://mirrors.aliyun.com/ubuntu/ bionic-updates main restricted universe multiverse
> deb http://mirrors.aliyun.com/ubuntu/ bionic-backports main restricted universe multiverse
> deb http://mirrors.aliyun.com/ubuntu/ bionic-security main restricted universe multiverse
> EOFcat ~/.ssh/id_rsa.pub > authorized_keys

③:構建鏡像

[root@openEuler-1 ubuntu]# docker build -t huiliyi/myubuntu:v1 .

④:測試

[root@openEuler-1 ubuntu]# ssh localhost -p 8001
Welcome to Ubuntu 18.04.6 LTS (GNU/Linux 5.10.0-216.0.0.115.oe2203sp4.x86_64 x86_64)* Documentation:  https://help.ubuntu.com* Management:     https://landscape.canonical.com* Support:        https://ubuntu.com/advantage
This system has been minimized by removing packages and content that are
not required on a system that users do not log into.To restore this content, you can run the 'unminimize' command.
Last login: Tue Jul 15 04:54:58 2025 from 172.17.0.1
root@8f96bfbb87ac:~#

2.2、使用busybox 構建一個靜態web

①:編寫Dockerfile

[root@openEuler-1 ~]# mkdir busybox/ && cd busybox/
[root@openEuler-4 busybox]# vim Dockerfile
FROM busybox:latest
MAINTAINER "huiliyi <huiliyi@163.com>"RUN mkdir -p /data/html
COPY index.html /data/html
CMD ["/bin/httpd","-f","-h","/data/html"]
EXPOSE 80/tcp

②:準備文件

[root@openEuler-4 busybox]# echo "busybox test page!" > index.html

③:構建鏡像并上傳(這里上傳的是之前博客中做好的私人倉庫)

[root@openEuler-1 busybox]# docker build -t huiliyi/demo:busybox_web .[root@openEuler-1 busybox]# docker login -u admin -p Harbor12345 www.huiliyi.com
[root@openEuler-1 busybox]# docker tag huiliyi/demo:busybox_web www.huiliyi.com/library/huiliyi/demo:busybox_web
[root@openEuler-1 busybox]# docker images | grep "www.huiliyi.com"
www.huiliyi.com/library/huiliyi/demo   busybox_web   a87c9b692c63   42 minutes ago   4.28MB[root@openEuler-1 busybox]# docker push www.huiliyi.com/library/huiliyi/demo:busybox_web
The push refers to repository [www.huiliyi.com/library/huiliyi/demo]
1a21182f3efd: Pushed
2e50c5d69b3a: Pushed
65014c70e84b: Pushed
busybox_web: digest: sha256:e246769ebf2aca55a055f0fda3d33d74c2799298e1a471fa9b57a83ee4dd4249 size: 942

④:測試

[root@openEuler-1 busybox]# docker pull www.huiliyi.com/library/huiliyi/demo:busybox_web[root@openEuler-1 busybox]# docker run -d -p 8080:80 --name web www.huiliyi.com/library/huiliyi/demo:busybox_web
c0c166f79432eb374371e3aba274386e519cffa19756fbf8c3ecbb34921b0876[root@openEuler-1 busybox]# curl localhost:8080
busybox test page!

2.3、制作tomcat服務鏡像

①:準備文件

[root@openEuler-1 tomcat]# ls
apache-tomcat-9.0.102.tar.gz  jdk-8u261-linux-x64.rpm

②:編寫Dockerfile

[root@openEuler-1 tomcat]# cat Dockerfile
FROM rockylinux:8
MAINTAINER huiliyi <huiliyi@163.com>COPY jdk-8u261-linux-x64.rpm /opt/jdk-8u261-linux-x64.rpm
ADD apache-tomcat-9.0.102.tar.gz /usr/local
RUN yum install -y /opt/jdk-8u261-linux-x64.rpm && ln -s /usr/local/apache-tomcat-9.0.102 /usr/local/tomcatEXPOSE 8080
CMD ["/usr/local/tomcat/bin/catalina.sh","run"]

③:構建鏡像并上傳

[root@openEuler-1 tomcat]# docker build -t tomcat:v2 .
[root@openEuler-1 tomcat]# docker tag tomcat:v2 www.huiliyi.com/library/tomcat:v2
[root@openEuler-1 tomcat]# docker images | grep "www.huiliyi.com"
[root@openEuler-1 tomcat]# docker push www.huiliyi.com/library/tomcat:v2
The push refers to repository [www.huiliyi.com/library/tomcat]
abebdb312e25: Pushed
6151c32f59a4: Pushed
f758d6584564: Pushed
c1827ee010db: Pushed
v2: digest: sha256:4dd9682c390fc7c3e61eefe5488d9579b7970b1a43d2eafb11f0ed83c12f1c6d size: 1167

④:測試

[root@openEuler-1 tomcat]# docker pull  www.huiliyi.com/library/tomcat:v2
v2: Pulling from library/tomcat
Digest: sha256:4dd9682c390fc7c3e61eefe5488d9579b7970b1a43d2eafb11f0ed83c12f1c6d
Status: Image is up to date for www.huiliyi.com/library/tomcat:v2
www.huiliyi.com/library/tomcat:v2
[root@openEuler-1 tomcat]# docker ps -a
CONTAINER ID   IMAGE                                              COMMAND                  CREATED          STATUS                        PORTS                                   NAMES
64362a92fe3a   tomcat:v1                                          "/usr/local/tomcat/b…"   43 minutes ago   Exited (127) 43 minutes ago  [root@openEuler-1 tomcat]# docker run -d -p 8088:8080 tomcat:v2
b24c6341733f08396f2a9aea3ece3e404ad79ff87762dc38d11354bb7607a86b
[root@openEuler-1 tomcat]# docker ps -a
CONTAINER ID   IMAGE                                              COMMAND                  CREATED          STATUS                        PORTS                                   NAMES
b24c6341733f   tomcat:v2                                          "/usr/local/tomcat/b…"   5 seconds ago    Exited (127) 5 seconds ago                                            modest_almeida

?這里看見狀態是退出的,查看日志:

[root@openEuler-1 tomcat]# docker logs b24c6341733f
#
# A fatal error has been detected by the Java Runtime Environment:
#
#  SIGSEGV (0xb) at pc=0x00007f3023d39f81, pid=1, tid=0x00007f3024940700
#
# JRE version: Java(TM) SE Runtime Environment (8.0_261-b12) (build 1.8.0_261-b12)
# Java VM: Java HotSpot(TM) 64-Bit Server VM (25.261-b12 mixed mode linux-amd64 compressed oops)
# Problematic frame:
# C  [libc.so.6+0x21f81]  abort+0x203
#
# Core dump written. Default location: //core or core.1
#
# An error report file with more information is saved as:
# //hs_err_pid1.log
#
# If you would like to submit a bug report, please visit:
#   http://bugreport.java.com/bugreport/crash.jsp
# The crash happened outside the Java Virtual Machine in native code.
# See problematic frame for where to report the bug.
#
library initialization failed - unable to allocate file descriptor table - out of memory[root@openEuler-1 tomcat]#

?發現是系統資源不足,特別是文件描述符的數量不足,因此我們在運行時需要設置一個較高的

件描述符數量:

[root@openEuler-1 tomcat]# docker run  -d -p 8088:8080  --ulimit nofile=65535:65535 --ulimit nproc=65535:65535 tomcat:v2
ecac09dea15f834acbea03b51c1ad161827a231570e667a012e13854efcdab09
[root@openEuler-1 tomcat]# docker ps -a
CONTAINER ID   IMAGE                                              COMMAND                  CREATED              STATUS                            PORTS                                       NAMES
ecac09dea15f   tomcat:v2                                          "/usr/local/tomcat/b…"   9 seconds ago        Up 8 seconds                      0.0.0.0:8088->8080/tcp, :::8088->8080/tcp   strange_shirley

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/bicheng/89062.shtml
繁體地址,請注明出處:http://hk.pswp.cn/bicheng/89062.shtml
英文地址,請注明出處:http://en.pswp.cn/bicheng/89062.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

KeilMDK5如何生成.bin文件

1&#xff1a;主要是要找到fromelf.exe的路徑2&#xff1a;接下來要做的要視情況而定&#xff1a;選完fromelf.exe后在輸入框中加個空格然后加一串字 : --bin -o ./Obj/L.bin ./Obj/L.axf&#xff0c;如下我設置的L最終會替換成項目名 3&#xff1a;去構建生成編譯一下&#…

Ajax接收java后端傳遞的json對象包含長整型被截斷導致丟失精度的解決方案

問題描述 在使用java編寫代碼的時候,后端返回前端的JSON對象中包含了Long長整型,前端接受的時候丟失了精度問題。 比如: 后端傳遞的json {"code": "200","msg": "操作成功","data":

MybatisPlus由淺入深

MyBatis-Plus&#xff08;簡稱 MP&#xff09;是一個 MyBatis 的增強工具&#xff0c;旨在簡化開發過程。基本使用步驟1.依賴引入<!-- mysql依賴 --> <dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId>…

藍牙信號強度(RSSI)與鏈路質量(LQI)的測量與應用:面試高頻考點與真題解析

在藍牙通信領域&#xff0c;信號強度&#xff08;RSSI&#xff09;和鏈路質量&#xff08;LQI&#xff09;是評估無線鏈路性能的核心指標。無論是智能家居設備的連接優化&#xff0c;還是工業物聯網中的抗干擾設計&#xff0c;這兩個指標都扮演著關鍵角色。本文將結合面試高頻考…

PyTorch的計算圖是什么?為什么繪圖前要detach?

在PyTorch中&#xff0c;計算圖&#xff08;Computational Graph&#xff09; 是自動求導&#xff08;Autograd&#xff09;的核心機制。理解計算圖有助于解釋為什么在繪圖前需要使用 .detach() 方法分離張量。一、什么是計算圖&#xff1f; 計算圖是一種有向無環圖&#xff08…

深度學習入門代碼詳細注釋-ResNet18分類螞蟻蜜蜂

本項目將基于PyTorch平臺遷移ResNet18模型。該模型原采用ImageNet數據集&#xff08;含1000個圖像類別&#xff09;進行訓練。我們將嘗試運用該模型對螞蟻和蜜蜂進行分類&#xff08;這兩個類別未包含在原訓練數據集中&#xff09;。 本文的原始代碼參考于博客深度學習入門項目…

北京飲馬河科技公司 Java 實習面經

北京飲馬河科技公司 Java 實習面經 本文作者&#xff1a;程序員小白條 本站地址&#xff1a;https://xbt.xiaobaitiao.top 1&#xff09; 面試官&#xff1a;我看你這塊是有一個開源的項目&#xff0c;這個項目主要是做什么的&#xff1f; 我&#xff1a;主要兩點是亮點&…

java基礎(day07)

目錄 OOP編程 方法 方法的調用&#xff1a; 在main入口函數中調用&#xff1a; 動態參數&#xff1a; 方法重載 OOP編程 方法 概念&#xff1a;指為獲得某種東西或達到某種目的而采取的手段與行為方式。有時候被稱作“方法”&#xff0c;有時候被稱作“函數”。例如UUID.…

使用EasyExcel動態合并單元格(模板方法)

1、導入EasyExcel依賴<dependency><groupId>com.alibaba</groupId><artifactId>easyexcel</artifactId><version>4.0.3</version> </dependency>2、編寫實體類Data publci class Student{ ExcelProperty("姓名")pri…

jenkins 流水線比較簡單直觀的

//全篇沒用自定義變量pipeline {agent any// 使用工具自動配置Node.js環境tools {nodejs nodejs22 // 需在Jenkins全局工具中預配置該名稱的Node.js安裝}//下面拉取代碼通過的是流水線片段生成的stages {stage(Checkout Code) {steps {git branch: release-v1.2.6,credentials…

CV目標檢測中的LetterBox操作

LetterBox類比理解&#xff1a;想象你要把一張任意形狀的照片放進一個正方形的相框里&#xff0c;照片不能變形拉伸&#xff0c;所以你先等比例縮小照片&#xff0c;然后在空余的地方填上灰色背景。第1章 數學原理當我們有一個原始圖像的尺寸為 19201080&#xff08;寬高&#…

Leetcode 3614. Process String with Special Operations II

Leetcode 3614. Process String with Special Operations II 1. 解題思路2. 代碼實現 題目鏈接&#xff1a;3614. Process String with Special Operations II 1. 解題思路 這一題思路上是一個逆推的思路。 首先&#xff0c;我們順序走一輪不難得到最終我們能夠獲得的字符串…

.NET ExpandoObject 技術原理解析

&#x1f31f; .NET ExpandoObject 技術原理解析 引用&#xff1a; .NET 剖析4.0上ExpandoObject動態擴展對象原理風瀟瀟人渺渺快意刀山中草 #mermaid-svg-RtpHctpdchPPN1Xo {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mer…

放蘋果(信息學奧賽一本通-T1192)

【題目描述】把M個同樣的蘋果放在N個同樣的盤子里&#xff0c;允許有的盤子空著不放&#xff0c;問共有多少種不同的分法&#xff1f;&#xff08;用K表示&#xff09;5&#xff0c;1&#xff0c;1和1&#xff0c;5&#xff0c;1 是同一種分法。【輸入】第一行是測試數據的數目…

(懶人救星版)CNN_Kriging_NSGA2_Topsis(多模型融合典范)深度學習+SCI熱點模型+多目標+熵權法 全網首例,完全原創,早用早發SCI

全網首例&#xff0c;完全原創&#xff0c;早用早發SCI&#xff08;多模型融合典范&#xff09;機器學習SCI熱點模型多目標熵權法(懶人救星版)BP_Kriging_NSGA2_Topsis 改進克里金工作量大&#xff1a;多模型融合創新性&#xff1a;首次結合BP神經網絡和克里金多目標利用 BP神…

LeetCode熱題100【第一天】

第一題 兩數之和 給定一個整數數組 nums 和一個整數目標值 target&#xff0c;請你在該數組中找出 和為目標值 target 的那 兩個 整數&#xff0c;并返回它們的數組下標。 你可以假設每種輸入只會對應一個答案&#xff0c;并且你不能使用兩次相同的元素。 你可以按任意順序返回…

AI Linux 運維筆記

運維基本概念 IT運維是指通過專業技術手段&#xff0c;確保企業的IT系統和網絡持續、安全、穩定運行&#xff0c;保障業務的連續性。運維涵蓋計算機網絡、應用系統、硬件環境和服務流程的綜合管理。主要分為: 系統運維、數據庫運維、自動化運維、容器運維、云計算運維、信創運維…

Redis性能基準測試

基準環境 機器&#xff1a;AWS EC2 c4.8xlarge&#xff08;同機部署 Redis Server 與 ReJSONBenchmark 工具&#xff0c;通過網絡棧連接&#xff09;測試工具&#xff1a;ReJSONBenchmark&#xff08;Go 實現、可配置并發&#xff09;模式&#xff1a;非管線&#xff08;non-pi…

XML外部實體注入與修復方案

XML外部實體注入&#xff08;XXE&#xff09;是一種嚴重的安全漏洞&#xff0c;攻擊者利用XML解析器處理外部實體的功能來讀取服務器內部文件、執行遠程請求&#xff08;SSRF&#xff09;、掃描內網端口或發起拒絕服務攻擊。以下是詳細解釋和修復方案&#xff1a;XXE 攻擊原理外…

解決高并發場景中的連接延遲:TCP 優化與隊頭阻塞問題剖析

你是否在高并發場景下遇到過這種情況&#xff1a;系統性能本來不錯&#xff0c;但在請求量大增的時刻&#xff0c;連接延遲暴漲&#xff0c;響應時間直線飆升&#xff0c;甚至整個服務都變得不可用&#xff1f;當你打開監控時&#xff0c;CPU、內存、帶寬都在正常范圍內&#x…