Docker二所映象製作

mi_zy發表於2020-03-13

1、dockerfile 裡不能有互動式命令。

     FROM centos:6.9  載入映象

     RUN curl -o /etc/yum.repos.d/CentOS-Base.repo     //base源最佳化

      RUN curl -o /etc/yum.repos.d/epel.repo     

// EPEL (Extra Packages for Enterprise Linux)() 是由 Fedora 社群打造,為 RHEL 及衍生發行版如 CentOS、Scientific Linux 等提供高質量軟體包的專案.

     RUN  (類似docker run的操作)啟動一個臨時容器,產生檔案變化,提交臨時映象,保留變化,刪除臨時容器。

      RUN  基於上面的臨時映象,啟動一個臨時容器,產生檔案變化,再次 提交臨時映象,保留變化,刪除臨時容器。直到最有一個臨時映象保留下來。

     RUN echo "192.169.11.2  mirrors.aliyun.com" >>/etc/hosts    劫持host,每次啟動容器,hosts都會被自動改為容器名,要生效,這個RUN必須是 最後一條RUN,或把所有RUN透過&&  \ 連成一條命令,這樣作為最後一個臨時映象,會保留下來。

      ADD run.sh /run.sh    //這個不會啟動臨時容器,所以不會改hosts。 如果是URL或壓縮包,會自動下載或自動解壓

      RUN 775 /run.sh

      CMD ["/bin/bash","/run.sh"]

2、docker image prune   刪除沒有名字也沒有版本的映象,怎麼會產生名字和TAG為<none>的映象?<----docker image rm -f  正在執行的映象;或dockerfile構建一半的時候Ctrl+c也會產生。

3、 docker run -p 3306:3306 --name mysql -e MYSQL_ROOT_PASSWORD=123456 -d mysql:5.7

docker run -p 3306:3306 --name mysql \ -v /usr/local/docker/mysql/conf:/etc/mysql \ -v /usr/local/docker/mysql/logs:/var/log/mysql \ -v /usr/local/docker/mysql/data:/var/lib/mysql \ -e MYSQL_ROOT_PASSWORD=123456 \ -d mysql:5.7

        -v:主機和容器的目錄對映關係,":"前為主機目錄,之後為容器目錄

        透過ENV環境變數 MYSQL_ROOT_PASSWORD,來設定MySQL初始密碼,在 docker run 透過 -e MYSQL_ROOT_PASSWORD=111111可以設定該容器的執行時密碼。

4、使用ADD,tar包下載到本地,使用ADD自動解壓加到映象中,copy則不會解壓。

5、ADD yum install openssh-server -y   //在指令碼service sshd start,

     ssh root@192.168.1.1  -p 22   //因為 沒有密碼還是不能透過ssh登入,需要

     echo "123456" | passwd --stdin root   // 更新使用者密碼資訊,適用於shell指令碼,非互動式設定root密碼,或使用指令碼變數$1使用者設定密碼。失敗 問題原因之一就是出在了密碼中有"!"。繼續測試echo命令和"!",知道了"!"在echo中是有不同意義的,如果要輸出"!",就需要"\"來轉譯。

6、tail -F     等同於--follow=name  --retry,根據檔名進行追蹤,並 保持重試,即該檔案被刪除或改名後,如果再次建立相同的檔名,會繼續追蹤

7、docker run 指定的引數會當成 ENTRYPOINT的引數,而 CMD會被替換。 ENTRYPOINT:  啟動容器時執行的Shell命令,同CMD類似,只是由ENTRYPOINT啟動的程式 不會被docker run命令列指定的引數所覆蓋 ,而且, 這些命令列引數會被當作引數傳遞給ENTRYPOINT指定指定的程式

8、配置檔案插入內容:echo "$1" >>/etc/hosts    、、// $1是 docker run 引數

9、docker container top 容器ID   、//容器的TOP命令,檢視執行的程式、服務

10、利用資料卷對資料進行備份、恢復和遷移:

11、docker服務預設建立一個docker0網橋(其上有一個docker0內部介面),它在核心層連通了其它的物理或虛擬網路卡,這就將所有容器和本地主機都放到同一個物理網路。brctl show(apt-get isntall bridge-utils)檢視網橋和埠連線資訊,其中STP enabled為no,川大使用須注意網路環路問題!

12、docker容器開啟多個服務,最簡單的就是把多個命令放到一個啟動指令碼里面,另外就是使用程式管理工具,例如使用supervisor來管理容器中的多個程式,dockerfile中CMD ["/usr/bin/supervisord"],透過修改/etc/supervisor/conf.d/supervisord.conf配置檔案啟動多個服務;

13、查詢檔案並複製到一個目錄下:find /home/ -name "*.rpm"  -tpye f | xargs -i mv {} myfold   // -i 或者是-I,將xargs的每項名稱,一般是一行一行賦值給{}。

14、sz/rz 是基於ZModem傳輸協議的命令。對傳輸的資料會進行核查,並且有很好的傳輸效能。使用起來更是非常方便,但前提是window端需要有能夠支援ZModem的telnet或者SSH客戶端,例如secureCRT。

yum -y install lrzsz

15、






來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/7970627/viewspace-2680124/,如需轉載,請註明出處,否則將追究法律責任。

相關文章