跳到主要內容

How to use docker compose build a ruby on rails container?

在推Ruby on rails協同開發架構時,發現每個人的電腦都不同,有的是windows、有的是linux、有的則是mac,單單為了要讓大家能一起開始,就傷透腦筋,為了解決開發環境一致性的問題,我們採用了docker,想法是:如果有一個能跨越自身的電腦作業系統版本,大家都能共用的環境,如同VM,我們不就可以解決這個問題了;所以有了這個專案。
Github網址:
https://github.com/tyRoRteam/dev_docker

如何使用
  • 安裝docker
請先到Docker官網 安裝適合電腦的版本,使用windows的朋友需注意必須windows 10 professional版本才裝得起來。
  • Download git repo
$ git clone https://github.com/tyRoRteam/dev_docker.git 
  • Build and Run RoR development docker container
$ cd dev_docker
$ docker-compose up -d 

  • Login to container 
$ ssh -X -p 10022 user@localhost
(default username/password: user/user)


  • docker-compose.yml 設定檔

version: '3'
 services:
 ror_dev:
  build: ror_dev/
  ports:
   - "10022:22"
   - "10080:3000"
  volumes:
   - ./user_home:/home/user
   - ./configs/sshd_config:/etc/ssh/sshd_config

在設定檔中,我們開通了本機與container兩個port對接,本機的10022連接container的22 port,讓ssh可以連得進去,另一個就是本機的10080連接container的3000 port,因為rails s預設為3000 port,這樣當container內執行$ rails s 時,就可以用本機瀏覽器http://localhost:10080連到container內的rails server。

另外,我們希望在container中編輯的資料例如程式碼,能夠連通本機,這樣container image重build或因故消失後,開發過程的資料也不至於消失,所以將本機的./user_home連接container的/home/user。
  • Dockerfile
FROM ruby:2.5.3
...
# Create 'user' account to the image
RUN useradd -m -d /home/user -s /bin/bash user -G sudo &&\
echo "user:user" | chpasswd
RUN echo '%sudo ALL=(ALL) NOPASSWD:ALL' >> /etc/sudoers
...


在Dockerfile中就是將所有需要用到的套件寫進來,讓build image時能夠進行安裝,上述所列出來的程式碼最主要是設定使用user帳號且無需密碼就可以登入,並可以使用sudo指令。

docker-compose相關指令說明
  • 查看 Docker Container 的執行狀態
$ docker-compose ps
  • 啟動所有的 Docker Container 指令
$ docker-compose up -d 
  • 使用down刪除所有container
# 不過docker-compose down之後,所有的container都會被刪除,如果不是存在user-home裡面的東西都會被reset,要小心!
# 注意:如果有Dockerfile有修改,用--build之後,如果沒有docker-compose down的話,直接用stop/start/restart,是不會生效的,因為container是舊的。
$ docker-compose down
  • 重新build並啟動所有的 Docker Container 指令
#如果有調整docfile請務必重新build image否則會取cache使用。
$ docker-compose up -d --build 
  • 停止 docker-compose 所有 Container
$ docker-compose stop 
  • 啟動 docker-compose 所有 Container
$ docker-compose start 
剛開機的電腦如果無法用ssh連上container,可以先用docker-compose ps查看運作狀態,再用docker-compose start啟動container,當status顯示up時就可以連線了.
  • 重新啟動 docker-compose 所有 Container
$ docker-compose restart

留言

這個網誌中的熱門文章

系統時間自動校正

在網域內通常為了安全性會防堵所有對外不必要的端口,因此常會在網域內架設一Time Server做為各伺服器時間校對的標準,而此一Time Server需透過UDP 123端口與中央標準局time.stdtime.gov.tw做時間校對,再網域內的其他伺服器則與此Time Server做時間校對。 開啟防火牆NTP端口(UDP 123) 編輯系統登錄檔 [執行] -> regedit 修改NTP Server為中央標準局主機 time.stdtime.gov.tw 並將Type預設值NT5DS改為NTP [HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\W32Time\Parameters] "NtpServer"="ComputerName" "Type"="NTP" 修改校對頻率為a (每10分鐘校對一次,5為每5分鐘校對一次) [HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\W32Time\Config] "AnnounceFlags"=dword:0000000a 重啟Windows Time Service net stop w32time && net start w32time 強制立即校對 w32tm /resync /rediscover 補充一: 強制時間同步指令 w32tm /resync /computer:IP /rediscover net time \IP /set /yes net time \\ComputerName /set /yes 若您的主機一直無法同步,也可以採用變通的方法,配合上面的Dos command以工作排程來進行。 補充二: A. 將伺服器類型變更為 NTP。如果要執行這項操作,請依照下列步驟執行: 1. 按一下 [開始],再按一下 [執行],輸入 regedit,然後按一下 [確定]。 2. 找出並按一下下列登錄子機碼: HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\W32Time\Parameters\Ty...

利用保存屬性來做實體檔案的差異性備份

先來談談iwndows裡檔案的保存屬性 利用滑鼠右鍵點選[內容]查看檔案的屬性時,在屬性可以看到[唯讀][隱藏]之外還可以點選[進階]按鈕, 其中「檔案已經可以開始封存」就是以前看到的「保存」屬性。 如果在DOS環境下指令attrib,檔名的前面出現「A」就是有「保存」屬性。 而「保存」屬性出現的時機是: 1. 檔案新建立 2. 檔案被變更過內容 因此系統給予此檔案A屬性,就等於告訴備份指令XCOPY或備份軟體,這個檔案需要被備份。 所以,我們可以透過這個屬性來進行檔案的增量式(Incremental)備份與差異式(Differential)備份。 將Files底下所有有異動過的檔案,複製到diff資料夾底下,並且取消此檔案的A屬性。 xcopy "C:\Files\*.*" c:\diff /s/d/y/M 如果我們在這個異動之後將diff資料夾內的所有東西都搬走,我們做的就是差異性備份,如果不搬走讓他一直累積就是增量式備份。 XCOPY 指令 XCOPY source [destination] [/A | /M] [/D[:date]] [/P] [/S [/E]] [/V] [/W] [/C] [/I] [/Q] [/F] [/L] [/G] [/H] [/R] [/T] [/U] [/K] [/N] [/O] [/X] [/Y] [/-Y] [/Z]\r\r [/EXCLUDE:file1[+file2][+file3]...] source 指定要複製的檔案。 destination 指定位置或者/以及新檔案的名稱。 /A 只複製設定成保存屬性的檔案,不要改變屬性的設定。 /M 只複製設定成保存屬性的檔案,並清除保存屬性。 /D:m-d-y 複製在指定日期當天或之後發生變更的檔案。如果沒有給日期, 只複製那些來源檔案日期比目的檔案日期為新的檔案。 /EXCLUDE:file1[+file2][+file3]... 指定檔案清單字串。每個...

C# 開啟Raw檔案

朋友問raw格式的影像該怎麼用程式show出來看? 因為是影像處理的入門問題,所以當然不能先透過影像處理軟體處理好再丟到程式裡面show出來,剛剛完成,就把重點節錄下來。 重點是Bitmap的圖示矩陣式的,而Raw是線性的的正矩形圖片,長、寬要自己利用開更號方式計算,再一個像素一個像素塞回去。 private void button1_Click(object sender, System.EventArgs e) { int rawSize; Bitmap bm; openFileDialog1.Filter = "RAW files (*.raw)|*.raw|BMP files (*.bmp)|*.bmp|JPEG files (*.jpg)|*.jpg|TIFF files (*.tif)|*.tif"; if (openFileDialog1.ShowDialog()==DialogResult.OK) { if (openFileDialog1.FileName.Substring(openFileDialog1.FileName.Length-3,3) =="raw") { FileStream infile = File.Open(openFileDialog1.FileName, FileMode.Open,FileAccess.Read, FileShare.Read); this.textBox1.Text = openFileDialog1.FileName; rawSize = (int)Math.Sqrt(infile.Length); bm = new Bitmap(rawSize,rawSize); BinaryReader tmpBReader = new BinaryReader(infile); byte buff; for (int i=0; i < rawSize; i++ ) { for (int j=0; j < rawSize; j++ ) { buff = tmpBReader.ReadB...