使用容器Docker進行開發

banq發表於2018-11-30

使用容器進行軟體開發已成為一種普遍的做法。開發中的常見用例是執行應用程式所需的服務環境,諸如安裝Redis,MongoDB甚至Elasticsearch之類的東西。大多數情況下,開發人員依賴於docker-compose定義應用程式所需的整套服務。
下面展示透過使用指定某個語言開發所需的所有內容建立容器影像,包括(但不限於):
  • 程式碼編輯器
  • 偵錯程式
  • 探查
  • 跟蹤工具
  • 包管理員
  • 構建工具 


使用容器進行開發的好處

OS獨立
即使使用的是Docker for Mac,您還可以使用基於Linux的環境進行開發。如果你非常熟悉Linux,可以應用於建立真正的生產容器映象(以及許多其他事情)。

安裝速度
與使用安裝程式指令碼相比,容器映象(特別是docker映像)在新計算機上的執行速度非常快。這是因為您只需要使用預編譯的二進位制檔案下載映象。

可移植性
如果使用安裝程式指令碼,則可能無法在其他計算機上執行,​​因為某些軟體包以不同方式安裝。比之下,一旦構建了容器映象,它幾乎可以在任何機器上工作。

健壯性
一旦構建了映象,它就不會突然中斷。這與安裝程式指令碼不同; 當我剛剛使用git儲存庫來儲存配置和指令碼時,我會有很多事情發生,它會根據安裝程式的執行時間而中斷。


注意事項
不是Docker的常見用例
Docker對這種工作流程的支援並不是很好。docker的一些問題需要數年才能 解決

還需要一些膠水程式碼
您想要從主機對映到容器中有幾件事情。我寫了一個工具,讓這個更容易,稱為slipway,在我編寫此工具之前,我將使用shell指令碼初始化容器。
如果您不使用Linux作為主機作業系統,事情會變得更加複雜。

0.選擇基本映象
對於初學者來說,構建docker映象需要一個配置檔案(Dockerfile)來定義要在容器中執行的步驟。執行所有這些步驟後,容器將“提交”為新映象。

大多數映象基於另一個映象。我建議從Ubuntu基礎開始,因為它非常受歡迎。

在一個空目錄的檔案下新增下面到Dockerfile:

FROM ubuntu:bionic


1.設定您的使用者
由於映象中僅包含root使用者。我們需要建立一個具有適當許可權的使用者才能在容器內執行。

# Feel free to change this to whatever your want
ENV DOCKER_USER developer

# Create user with passwordless sudo. This is only acceptable as it is a
# private development environment not exposed to the outside world. Do 
# NOT do this on your host machine or otherwise.
RUN apt-get update && \
    apt-get install -y sudo && \
    adduser --disabled-password --gecos '' "$DOCKER_USER" && \
    adduser "$DOCKER_USER" sudo && \
    echo '%sudo ALL=(ALL) NOPASSWD:ALL' >> /etc/sudoers && \
    touch /home/$DOCKER_USER/.sudo_as_admin_successful && \
    rm -rf /var/lib/apt/lists/*

USER "$DOCKER_USER"

WORKDIR "/home/$DOCKER_USER"


2.基本工具
Ubuntu核心(這是我們的影像所基於的)並不包含太多,因為它是為“準備釋出”應用程式而構建的。讓我們為開發新增一些基本包:

RUN yes | sudo unminimize && \
    sudo apt-get install -y man-db bash-completion build-essential curl openssh-client && \
    sudo rm -rf /var/lib/apt/lists/*



3.多路複用(可選)
如果您沒有使用像VSCode或Webstorm這樣的GUI編輯器,那麼您可能需要一個程式可以進行單個shell會話並將其拆分為多個。這稱為終端多路複用器。我更喜歡tmux

RUN sudo apt-get update && \
    sudo apt-get install -y tmux && \
    sudo rm -rf /var/lib/apt/lists/*



我可以在這裡討論很多自定義選項,但為了保持教程簡短,我將跳過這一步。請隨意檢視我的專案,瞭解更好的開發環境理念。

4.安裝您的選擇編輯器
現在我們需要一些東西來編輯原始碼。我可以推薦Neovim,也可以其他任何編輯。

RUN sudo apt-get update && \
    sudo apt-get install -y neovim && \
    sudo rm -rf var/lib/apt/lists/*



5.安裝執行時
在這個例子中,我們將安裝NodeJ,因為站點上的大多數開發人員都使用它。如果您在此步驟中使用Python或其他語言,則可以安裝它。

RUN curl -o- https://raw.githubusercontent.com/creationix/nvm/v0.33.11/install.sh | bash
ENV NVM_DIR /home/$DOCKER_USER/.nvm

RUN . "$NVM_DIR/nvm.sh" && \
    nvm install --lts && \
    nvm alias default stable



在此步驟中,為您自己的語言安裝任何其他工具。

構建然後執行

您只需要在執行之前構建映象。
在您的終端中,執行:

docker build -t development-environment .

執行環境的最終命令可能因您要傳輸的內容而異。這是一個示例命令:

docker run --rm -ti \
    -v $HOME/workspace:/home/developer/workspace \
    development-environment bash



 

相關文章