系統製成docker映象 手動製作Docker映象

2021-10-12 15:39:21 字數 1551 閱讀 7471

手動製作 docker 映象

前言b. 環境為 centos 7.0 雲伺服器(用來用去感覺 windows 的 docker 出各種問題,比如使用 --privileged 和 /usr/sbin/init 會直接出錯暫停,因此還是使用 linxu 作業系統的雲伺服器了,不過之前的內容在 linux 下也都適用)

d. 過了n久以後突然想到,在 docker 容器裡面直接安裝資料庫的情況似乎並不多見,而是更傾向於直接使用資料庫的容器。因為整個服務平台需要的是一套資料庫而不是每個容器搞一套。本文僅作為使用容器技術的演示,作為生產環境的部署方案是極不合適的。本例中安裝 mysql 就當是自己的一些嘗試吧(還有踩坑,擦)

docker pull centos:7 # 可以檢視 docker hub 官方以取得名稱

docker run -it --name centos7 centos:7

2. 換源並安裝對應軟體

此處換為阿里雲的源(同時更換 yum 和 epel)

此處安裝 mysql 和 httpd

安裝httpd

安裝網路工具(netstat 等)

yum install net-tools

使用命令 cp /usr/share/zoneinfo/asia/shanghai /etc/localtime 修改時區為東八區

3. 將容器儲存為映象

docker commit

最後執行該映象(啟動對應服務的命令,並阻塞),如:

docker run -d -p 81:80 nginx -g 'daemon off;'

apache 為 httpd -d foreground

如果一次需要執行多個命令,可以寫成乙個指令碼並執行指令碼,如:

#!/bin/bash

mysqld --user root 此命令不阻塞

額外內容 - 原先的啟動 centos7 的 docker 映象方式(坑)

我原先的啟動命令為:

docker run -it --privileged --name centos7 centos:7 /usr/sbin/init

因為啟動時如果不加 --privileged 和 /usr/sbin/init,則無法使用 systemctl 命令來啟動和停止服務。而使用此方式後,會呼叫 /usr/sbin/init 來載入映象,當前視窗會直接無法操作,如下:

而儲存該容器為映象後,如果啟動時不加這兩個引數,則會報錯:

然而比較奇怪的是,以此種方式啟動的容器,安裝 mysql 時不需要執行其它操作,yum install mysql 安裝後就可以正常使用;且修改密碼時有密碼強度的驗證。猜測是 mysql 安裝時需要呼叫系統的命令執行一些服務,而不加 --privileged 和 /usr/sbin/init 無法正常使用系統服務。

參考:後記

原本本篇的內容裡還有如何在容器中安裝 mysql 的內容,但感覺內容太長,耦合性太高(doge),而且這篇主要的內容是怎麼把容器提交為映象,還是拆到了另一篇部落格中。這也算是有點啟發吧:呼叫棧再長,還是要回到主函式上!

系統製成docker映象 手動製作Docker映象

手動製作docker映象 docker pull centos 7 可以檢視 docker hub 官方以取得名稱 docker run it name centos7 centos 7 2.換源並安裝對應軟體 此處換為阿里雲的源 同時更換 yum 和 epel 此處安裝 mysql 和 httpd...

基於在用系統製作docker基礎映象

為了便於測試,需要建立乙個基於在用的自身系統docker基礎映象,具體操作如下 tar numeric owner exclude proc exclude sys exclude home clusteruser exclude home centos7 exclude home centos e...

Docker容器學習梳理 手動製作系統映象

以下記錄了在centos7上做docker映象的操作記錄 1 映象製作指令碼 mkimage yum.sh 提取密碼 qsss 或者直接wget 2 執行指令碼 root linux node2 chmod 755 mkimage yum.sh root linux node2 mkimage yu...