具有中國特色的docker折騰記(下)

2021-06-26 13:24:51 字數 3044 閱讀 7451

原文:

弄明白docker是怎麼回事以後,當然是要來做幾個自己的image。而要自建image,有兩個方法:

另乙個方法則是用dockerfile。

但本質上兩個方法是一樣的——因為dockerfile的內容不過是一堆的run命令而已……

dockerfile的檔名一般就叫做dockerfile,這樣比較方便,因為可以直接用來生成image:

docker build -t yourname/imagename:yourtagname .
如果不是用這個檔名的話,就需要用這樣的命令了:

docker build -t yourname/imagename:yourtagname - < yourdockerfilename
其中yourtagname是可以省略的,預設是latest。build完成以後會按dockerfile的內容生成乙個新的image,image的名字就是:yourname/imagename。

dockerfile最基本的內容主要有兩個:乙個是from指令,乙個是run指令。

from用於指定用哪個image作為基礎,run則是在基礎image上新建乙個container並執行命令。乙個簡單的例子如下:

from ubuntu

run echo "deb precise main" > /etc/apt/sources.list

run apt-get update

run apt-get install -y vim

其它可選和高階的指令有:maintainer, entrypoint, user, expose等。簡單說明如下:

maintainer:維護者說明

entrypoint:作為container執行時的啟動程式

user:作為container執行時,啟動程式使用的使用者身份

expose:作為container執行時需要監聽的埠號

更具體的說明請參見官方文件。

需要注意的是,使用docker build建立image時會依次執行dockerfile裡的每一句run,而每執行一句就會生成乙個單獨的container。

自建的image可以上傳到官方倉庫與大家分享,也方便以後自己重用。

但在上傳之前,需要先到官方倉庫註冊乙個使用者。注意:註冊完要先去收一下郵件,通過郵箱驗證以後才可以從docker登入。

然後從本地docker登入官方倉庫:

docker login
之後就可以上傳自己建立的image了:

docker push yourname/imagename
老是穿牆用官方倉庫也不方便,而且總會有一些東西是不方便放到官方倉庫去公開的,所以自建倉庫很有必要。

我的倉庫是建在一台freebsd伺服器上的,以下步驟供參考:

第一步當然是裝乙個git。說實話,我是非常不喜歡git的,遠沒有hg用起來簡單方便,而且剛才在freebsd上用ports安裝完成以後居然還執行出錯,clone的時候core dump了。最後還是公升級了openssl和curl才解決。

第二步就是clone docker-registry的**:

git clone
第三步是準備docker-registry的執行環境,因為它是用python寫的,所以我還是專門給它開了乙個virtualenv。不過因為它用到了gevent,而在freebsd的virtualenv裡安裝gevent會有點小麻煩,詳見我以前的文章。所以要先裝gevent,而要裝這個,又要先裝乙個libevent。

cd /usr/ports/devel/libevent

# 注意,這裡不要clean,因為編譯gevent還要用到

make install

workon your_virtualenv

pip install --no-install gevent==0.13.8

cdvirtualenv build/gevent

# libevent參見你的實際環境

python setup.py install --libevent /usr/ports/devel/libevent/work/libevent-1.4.14b-stable

pip install gevent

# 回到docker-registry位置

cd path_to/docker-registry

pip install -r requirements.txt

不過以上都是針對freebsd而言,如果是ubuntu之類的就要簡單很多,apt安裝一下就完了,詳見官方文件。

第三步是配置,最簡單的做法就是用預設配置,更詳細的說明則見官方文件。預設配置的方法如下:

cd config

cp config_sample.yml config.yml

第四步就可以執行了:

注意:以上預設配置和執行命令都是以測試/除錯模式工作的,實際應用請自己修改配置和命令。

如果需要,還可以再加上一層apache/nginx做**發布到外網跟你的小夥伴們分享,這個就不再贅述了。

自建的docker-registry如何使用呢?

最先要做的一件事情就是:

停掉那個加了**的docker daemon,重啟預設的服務:

ps aux | grep "sudo docker"

sudo kill [docker-daemon-pid]

sudo service docker start

因為自建的registry顯然不再需要**,加了**反而會連不通。

然後看看本地image的id,準備挑乙個拿來上傳:

docker images | grep ubuntu | grep latest
接著設定其repository名:

docker tag [image_id] [your-registry-host]:5000/ubuntu
ok,現在可以push了:

docker push [your-registry-host]:5000/ubuntu
docker pull [your-registry-host]:5000/ubuntu
就是這樣。

具有中國特色的docker折騰記(上)

在剛剛過去的2013年裡,docker無疑是運維工作的一項革命性創新,然而在有中國特色的網際網路環境裡,要折騰這玩意兒還真是不方便。且不說docker.io的官網在牆外,包括它的apt源和image index都在牆外,導致使用者增加了很多不必要折騰成本,真是中國程式設計師的一大悲哀啊。真不知道do...

中國特色的軟體

中國特色的軟體 我們出身在具有5000年歷史的泱泱大國,先人創造出悠久的文明,可卻在最近的200年間快速的衰落,我們在最近的50年的時間裡,開啟國門快速吸收著西方的文明與科技,接受著西方實用技術的錘煉,尋求著中華民族的偉大復興。認清自己,反省自己是乙個刻不容緩的問題。我希望通過我的思考,能讓我們找到...

談談具有中國特色的全能性程式設計師

從嚴格意義上來說,程式設計師是軟體製作中乙個環節,程式設計師有其職能的範圍,他的上層是設計人員所編寫的設計方案,他的下層是測試人員。但是,中國的程式設計師應該來說是很特別的,尤其是中國軟體業發展的初期,許多程式設計師是全能型的,這個程式設計師身兼數職,既是軟體設計人員,又是程式設計師 測試人員。有的...