Jay*_*Jay 2 ubuntu docker docker-compose
我的团队一直在运行在 VirtualBox 上的 Ubuntu 16.04 服务器上开发我们的项目。当新开发人员加入我们的项目时,帮助他们在 VirtualBox 上创建新的 Ubuntu 服务器并安装所有依赖项只是为了每次启动项目,这对我们来说是一个很大的麻烦。
我们决定用 Docker 解决这个麻烦。因此,我正在尝试使用以下Dockerfile和docker-compose.yml,在 Docker 上的 Ubuntu 上运行我们的项目,但我找不到很多资源,例如how to run Ubuntu on Docker. 我是否会按照以下方式在 Docker 上运行 Ubuntu 的正确方向?
我感到困惑的一件事是为什么当我ifconfig在 Docker 上运行的 Ubuntu 服务器上运行时无法获取 IP 地址?
文件
FROM ubuntu:16.04
RUN sudo apt-get update
RUN sudo apt-get install -y build-essential autoconf libtool
RUN sudo apt-get install -y python-setuptools python-dev python3-dev
RUN sudo apt-get install -y python-pip python3-pip
RUN sudo apt-get install -y python-virtualenv unixodbc-dev libffi-dev git
...
Run Code Online (Sandbox Code Playgroud)
docker-compose.yml
version: '3'
services:
ubuntu:
build:
context: .
dockerfile: ./Dockerfile
ports:
- "8000:8000"
container_name: dev_ubuntu
...
Run Code Online (Sandbox Code Playgroud)
第一个错误是认为 Docker 镜像/容器类似于虚拟机。有相似之处,但它们并不相同,坦率地说,并不是真正相似。
Docker 实际上并不是用来运行操作系统的。它用于在包含的(隔离的)环境中运行单个进程。容器使用与主机上相同的内核。
当您创建 Docker 镜像时,FROM ubuntu您将使用一些预先创建的层来启动您的镜像,这些层引入了标准文件系统的某些部分和您可以在 Ubuntu 服务器上找到的包。
然后添加自己的附加层,添加运行程序/进程所需的二进制文件和文件。
图像将(通常但不是强制性的)有一个CMD命令或ENTRYPOINT命令来运行某些东西。
a 中的每一行Dockerfile都是一个命令,指示 Docker 如何创建镜像。每行/命令都会产生一层。要安装软件包,您可能想要执行以下操作:
FROM ubuntu:16.04
RUN apt-get -qq update && \
apt-get -y install build-essential autoconf libtool && \
apt-get install -y python-setuptools python-dev python3-dev && \
apt-get install -y python-pip python3-pip && \
apt-get install -y python-virtualenv unixodbc-dev libffi-dev git && \
apt-get clean && \
rm -rf /var/lib/apt/lists/*
Run Code Online (Sandbox Code Playgroud)
这将使您的图像更小。
然后你需要实际运行一些东西......
CMD python
Run Code Online (Sandbox Code Playgroud)
然后你可以构建你的图像:
docker build -t myimage .
Run Code Online (Sandbox Code Playgroud)
并使用它...
docker run --rm -it myimage
Run Code Online (Sandbox Code Playgroud)
ifconfig不起作用,因为二进制文件不在图像中。这并不是真正必要的,因为您不在容器内管理网络。
所以你似乎正在制作一个容器来构建一些代码。当您运行它时,您可能希望使用容器内的代码挂载您的目录。我不知道您在工作站或服务器上运行的是什么操作系统,因此我将参考这篇文章了解更多信息:https : //stackoverflow.com/questions/41485217/mount-current-directory-as-a-volume-in -docker-on-windows-10/41489151#41489151
假设您正在使用 command 进行构建make,您可以这样做:
docker run --rm -it -v $(pwd):/usr/src/project myimage make
Run Code Online (Sandbox Code Playgroud)
这将需要在您的一行中Dockerfile创建工作目录/usr/src/project:
WORKDIR /usr/src/project
Run Code Online (Sandbox Code Playgroud)
如果您运行docker上面的命令行会发生什么,它将从名为myimage(前面显示的构建命令)的图像创建一个容器,将您所在的当前目录安装为/usr/src/project新容器内。make在容器内运行命令,然后退出。该--rm参数告诉 Docker 在完成运行后不要保留容器。该-it参数的意思interactive和tty。
如果您只想访问某些 shell,以便可以make临时方式手动运行或其他命令,您也可以这样做:
docker run --rm -it -v $(pwd):/usr/src/project myimage /bin/bash
Run Code Online (Sandbox Code Playgroud)
这将从myimage图像创建容器,并运行bash. 因为bash不退出并且您有-it参数,所以您将在容器的提示下您可以做任何您想做的事情。
请记住,您从容器内部修改的任何文件都不会被保留,下次您开始返回默认状态时。当然,/usr/src/project目录中的任何文件都将在本地硬盘驱动器上被修改,因为它是从它安装的。
| 归档时间: |
|
| 查看次数: |
4289 次 |
| 最近记录: |