内容简介:使用容器进行软件开发已成为一种普遍的做法。开发中的常见用例是运行应用程序所需的服务环境,诸如安装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
以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 码农网
猜你喜欢:- [译] 对传统应用进行容器化改造
- 基于 GoLand 使用 Docker 容器进行 Go 开发
- Docker微服务-镜像构建交付和使用Rancher进行容器创建管理
- RunC曝出容器逃逸漏洞,允许恶意人士对主机系统进行root访问
- RunC曝出容器逃逸漏洞,允许恶意人士对主机系统进行root访问
- 容器技术之容器镜像篇
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。