使用容器Docker进行开发

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

内容简介:使用容器进行软件开发已成为一种普遍的做法。开发中的常见用例是运行应用程序所需的服务环境,诸如安装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

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

查看所有标签

猜你喜欢:

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

网络英雄传

网络英雄传

郭羽、刘波 / 江苏凤凰文艺出版社 / 2018-6 / 59.80元

“商战鬼才郭羽、营销奇才刘波强强联手,凝集十年实战经验,倾力打造商战巨作。” 这是一个商业竞争和资本激战交织的惊心动魄的创业交锋故事。 由郭天宇、刘帅共同创立的在线旅游公司万全天盛凭借其出色的商业模式异军突起,与老牌巨头“51旅游网”两强相争,但国际巨头通远来势汹汹,国内在线旅游市场进入战火纷飞的“三国杀”时代,分踞杭、沪、京三地互相“搏杀”。中国新兴的互联网公司面对国际巨头的入侵,毫不退缩......一起来看看 《网络英雄传》 这本书的介绍吧!

HTML 压缩/解压工具
HTML 压缩/解压工具

在线压缩/解压 HTML 代码

HTML 编码/解码
HTML 编码/解码

HTML 编码/解码

XML 在线格式化
XML 在线格式化

在线 XML 格式化压缩工具