Docker鏡像制作詳解介紹
最近由于工作原因,需要對(duì)Docker鏡像進(jìn)行制作,這里記錄下,也許對(duì)大家也有一定幫助!
寫在前面:本文docker鏡像制作方法更適用于基于已有docker鏡像一次性修改。
推薦用Docker File制作docker鏡像。
原理是一樣的,但是用docker file制作docker鏡像能夠記錄下操作步驟,方便以后更改或者鏡像丟失后重新創(chuàng)建。
本文以Ubuntu為基礎(chǔ)鏡像,預(yù)啟動(dòng)一個(gè)django項(xiàng)目和ssh服務(wù),制作一個(gè)新的鏡像。
1、基礎(chǔ)鏡像
我選用的是從Docker官網(wǎng)下載的ubuntu鏡像。
docker run ubuntu
或者
docker pull ubuntu
2、安裝ssh服務(wù)
docker run -i -t ubuntu /bin/bash #創(chuàng)建一個(gè)容器,-t是臨時(shí)終端。
進(jìn)入ubuntu后,安裝openssh
apt-get install openssh-server #安裝ssh
#需要修改/etc/sshd/sshd_config文件中內(nèi)容
PermitRootLogin yes
UsePAM no
修改ubuntu的root用戶密碼,以便以后ssh登陸:
sudo passwd root
3、制作新的鏡像
到此,我們需要把這個(gè)帶有ssh服務(wù)的容器提交成一個(gè)鏡像,方便以后在這個(gè)基礎(chǔ)上各種改造:
docker commit <container id> <image name>
4、基于現(xiàn)有ssh服務(wù)的Ubuntu鏡像,加入django項(xiàng)目,并設(shè)置隨容器自啟動(dòng)
ok,經(jīng)過以上步驟,doker images可以查看,新提交的doker鏡像已經(jīng)在里面了,例如image name為ssh-ubuntu的新鏡像。
最基礎(chǔ)的Ubuntu容器已經(jīng)沒有作用了
利用
doker stop <container id>
doker rm <Container id>
清楚剛剛啟動(dòng)的最基礎(chǔ)的Ubuntu容器
下面,要基于我們新的ssh-ubuntu進(jìn)行個(gè)性化定制,首先,要將這個(gè)鏡像運(yùn)行起來
docker run -d -p 5001:22 ssh-ubuntu /usr/sbin/sshd -D
(-p為端口映射 容器中22端口應(yīng)射程主機(jī)5001端口 || /usr/sbin/sshd -D是指定容器啟動(dòng)后要運(yùn)行的command,本處是啟動(dòng)ssh服務(wù))
容器啟動(dòng)后,我們可以通過ssh的方式,登陸到容器中
ssh root@doker0_ip -p 5001(22映射端口)
進(jìn)入到容器后,就可以進(jìn)行下一步個(gè)性化定制了。例如我要把我的django項(xiàng)目放到鏡像中,并隨著容器啟動(dòng)而啟動(dòng)。
(1)把django項(xiàng)目拷貝到容器中,用scp命令即可。
(2)比較通用的開機(jī)啟動(dòng)進(jìn)程方法:
安裝supervisor!
apt-get update && apt-get install supervisor
(如果apt-get install找不到包,先update一下)
然后編輯配置文件,vi /etc/supervisord.conf
[supervisord] nodaemon=true [program:sshd] command=/usr/sbin/sshd -D [program:tomcat] command=python ~/manager.py runserver 0.0.0.0:9999
然后保存退出即可。
用3小節(jié)方法重新制作新的鏡像,清除當(dāng)前容器即可。
5、運(yùn)行新鏡像
docker run -d -p 5001:22 -p 5000:9999 <image-name> /etc/supervisord
此時(shí),可以訪問主機(jī)5000端口,看看能不能訪問到容器里面的django項(xiàng)目。
鏡像制作大體過程至此完成。
*****************************************************************************************************************************************************
docker 本身是有push 來上傳的 index.docker.io 的,使用是用pull拉取。但是沒有條件搭建本地docker倉庫或者需要將應(yīng)用導(dǎo)出到另外一個(gè)Docker環(huán)境中,我們可以將docker鏡像導(dǎo)出到一個(gè)文件,具體做法如下:
sudo docker export <容器id> > docker_app.tar
完成后我們剛才制作的容器就導(dǎo)出成了 docker_app.tar 文件, 以后在其他機(jī)器部署的時(shí)候執(zhí)行導(dǎo)入
cat docker_app.tar | sudo docker import - docker_app
管道后面的 docker_app 為導(dǎo)入后image命名,自己指定
感謝閱讀,希望能幫助到大家,謝謝大家對(duì)本站的支持!
相關(guān)文章
Harbor搭建Docker私有倉庫的實(shí)現(xiàn)方法
Harbor是一個(gè)由CNCF托管的開源的Docker鏡像倉庫管理工具,我們可以通過它快速的建立起自己的私有倉庫,本文就詳細(xì)的介紹了Harbor搭建Docker私有倉庫的實(shí)現(xiàn)方法,感興趣的可以了解一下2021-06-06docker實(shí)現(xiàn)搭建emqx服務(wù)
這篇文章主要介紹了docker實(shí)現(xiàn)搭建emqx服務(wù)方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2024-06-06如何解決IDEA無法連接docker中的數(shù)據(jù)庫的問題
這篇文章主要介紹了如何解決IDEA無法連接docker中的數(shù)據(jù)庫的問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2024-06-06docker容器運(yùn)行后退出(怎么才能一直運(yùn)行)
這篇文章主要介紹了docker容器運(yùn)行后退出(怎么才能一直運(yùn)行),本文詳細(xì)的介紹了解決方法,非常具有實(shí)用價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2019-01-01