使用容器Docker进行开发

栏目: 编程工具 · 发布时间: 5年前

内容简介:使用容器进行软件开发已成为一种普遍的做法。开发中的常见用例是运行应用程序所需的服务环境,诸如安装Redis,MongoDB甚至Elasticsearch之类的东西。大多数情况下,开发人员依赖于docker-compose定义应用程序所需的整套服务。下面展示通过使用指定某个语言开发所需的所有内容创建容器图像,包括(但不限于):

使用容器进行软件开发已成为一种普遍的做法。开发中的常见用例是运行应用程序所需的服务环境,诸如安装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 <b>this</b> to whatever your want
ENV DOCKER_USER developer

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

USER "$DOCKER_USER"

WORKDIR "/home/$DOCKER_USER"
</i></font>

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

以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

JSP 应用开发详解(第二版)

JSP 应用开发详解(第二版)

飞思科技产品研发中心 / 电子工业出版社 / 2004-1-1 / 55.00

本书结合JSP和Servlet的最新规范,从基本的语法和规范入手,以经验为后盾,以实用为目标,以实例为导向,以实践为指导,深入浅出地讲解了JSP 开发中的种种问题。以精简的内容介绍了JSP的语法、Servlet技术、JDBC技术、标签库技术、表达式语言、Struts、JavaServer Face等技术;对于JSP开发中常遇到的典型的难点,专门设置了专题进行集中讨论。本书的最后一篇围绕一个电子商务......一起来看看 《JSP 应用开发详解(第二版)》 这本书的介绍吧!

RGB转16进制工具
RGB转16进制工具

RGB HEX 互转工具

XML、JSON 在线转换
XML、JSON 在线转换

在线XML、JSON转换工具

正则表达式在线测试
正则表达式在线测试

正则表达式在线测试