docker stop和 和有docker kill什么区别?
Afaik,两者都会停止正在运行的容器。是否docker stop试图以正确的方式停止容器内运行的进程,同时docker kill会发送终止信号?如果是这样,如何docker stop知道如何正确停止正在运行的进程。(因为这因过程而异)
我需要Dockerfile构建一个基于 Alpine Linux 的 Docker 镜像。现在我需要安装一个包作为这个的一部分Dockerfile。
目前我有:
RUN apk update && \
apk upgrade && \
apk add git
Run Code Online (Sandbox Code Playgroud)
显然这是一个坏主意,因为结果是不确定的。相反,它取决于我构建映像的时间点,以及git正在安装的版本。
这样做的正确方法是什么?
我想我必须告诉updated,upgrade以及add使用哪些版本,但我该怎么做?
我已经看到apk支持固定存储库,但这不是我想要的(至少我是这么认为的),因为我不想固定存储库,而是一个包。
换句话说:如果git可以通过安装npm,我将能够运行:
npm install git@1.9.2
Run Code Online (Sandbox Code Playgroud)
(或我想要的任何版本)。对于 Alpine Linux,这相当于什么?
我看到 docker 存储库中的很多 docker 镜像都是使用 Ubuntu 基础制作的。
这意味着什么?每个容器都捆绑了一个精简版的 Linux 内核吗?
容器是否位于自己的内核之上?但我认为容器共享主机的内核(在某些情况下是 boot2docker,一个自定义的 Tiny Core Linux 构建,在其他情况下是类似 CoreOS 的东西)。
编辑:澄清一下问题。是的,我知道 docker 是一个进程容器,而不是一个完整的 VM。但是既然官方的 docker hub 注册表和 CentOS 等其他操作系统中都有“Ubuntu”容器,那么在容器中运行 Ubuntu 意味着什么?
回答:啊,我才恍然大悟。它是 Ubuntu 用户进程,包含 apt-get 和其他特定 Ubuntu 构建的配置过程。CentOS 也是如此。Docker 不是单一进程,只是单一入口。因此,对于这些发行版,入口点是某种 init 进程,它会产生其他进程。
我正在尝试运行命令 docker-compose build
我得到这个输出:
Step 4/8 : RUN apt-get update && apt-get install -y google-chrome-stable
---> Running in ee9551cd38b9
Ign http://dl.google.com stable InRelease
Get:1 http://security.debian.org jessie/updates InRelease [44.9 kB]
.....
Get:9 http://deb.debian.org jessie/main amd64 Packages [9098 kB]
W: Fetched 10.1 MB in 6s (1519 kB/s)
Failed to fetch http://deb.debian.org/debian/dists/jessie-updates/InRelease Unable to find expected entry 'main/binary-amd64/Packages' in Release file (Wrong sources.list entry or malformed file)
E: Some index files failed to download. They have been ignored, or old ones used instead. …Run Code Online (Sandbox Code Playgroud) 我正在尝试遵循 docker 教程,但是在虚拟机中。我尝试使用以下命令在 ubuntu docker 容器中安装 ping
sudo docker run ubuntu apt-get install ping
Run Code Online (Sandbox Code Playgroud)
问题是docker没有安装任何东西,给出的答案如下
$ sudo docker run ubuntu apt-get install ping
Reading package lists...
Building dependency tree...
Package ping is a virtual package provided by:
inetutils-ping 2:1.8-6
iputils-ping 3:20101006-1ubuntu1
E: Package 'ping' has no installation candidate
$
Run Code Online (Sandbox Code Playgroud)
当我尝试安装任何东西时会出现同样的问题。
这些是我的图像:
REPOSITORY TAG IMAGE ID CREATED VIRTUAL SIZE
<none> <none> 3a28cc5bcc53 19 minutes ago 247.6 MB
baselDaemon latest 4e892058b0b2 4 days ago 204.4 MB
ubuntu 13.10 9f676bd305a4 2 weeks ago …Run Code Online (Sandbox Code Playgroud) 我正在使用 docker 通过
# service docker start
Run Code Online (Sandbox Code Playgroud)
这创造了一个docker0桥梁。然而使用
# service docker stop
Run Code Online (Sandbox Code Playgroud)
不会移除这座桥。
我该如何摆脱它?我不确定我是否在这里遗漏了什么。
我一直无法找到一种方法来在 docker-compose.yml 文件中只启动/关闭一个容器。我可以在不正常的情况下启动和停止单个容器,但我无法在两次重启之间更改容器配置(环境变量、挂载点等)
我在这里缺少什么?在这种情况下,最佳做法是什么?
我有两个需要 dockerize 的 Dart 应用程序。这两个应用程序使用共享源目录。
因为 Docker 阻止从上下文目录 ( project/app1)之外的文件夹添加文件,所以我无法从../shared或从shared(内部的符号链接projects/app1)添加文件。
我正在寻找一种方法来欺骗 Docker 无论如何。
我的简化项目结构
- projects
- app1
- Dockerfile
- shared (symlink ../shared)
- otherSource
- app2
- Dockerfile
- shared (symlink ../shared)
- otherSource
- shared
- source
Run Code Online (Sandbox Code Playgroud)
我可以向上移动Dockerfile一级并docker build从那里运行,但随后我需要在同一目录中使用两个 Dockerfile(用于 app1 和 app2)。
我目前的想法是,如果我能以某种方式隐藏projects/app1/shared作为符号链接的事实,这个问题就会得到解决。我检查了是否可以projects使用 Samba进行共享并将其重新安装到其他地方,并将 Samba 配置为将符号链接视为普通文件夹,但还没有找到是否支持(我对 Samba 没有太多经验,还没有尝试过,只是搜索了一下) .
有没有其他工具或技巧可以做到这一点?
我宁愿不更改目录结构,因为这会导致其他麻烦,也不愿复制文件。
试图在这里学习 docker,但我对 docker.io 和 docker 之间的区别有点困惑。是docker.io守护程序服务器和docker客户端?为什么守护进程需要一直运行?
我注意到我的 Python 应用程序在运行时比在 Ubuntu 上不使用 Docker时运行要慢得多python:2-alpine3.6。我想出了两个小的基准测试命令,当我在 Ubuntu 服务器上运行它们时,以及当我在 Mac 上使用 Docker 时,两种操作系统之间都存在明显的差异。
$ BENCHMARK="import timeit; print(timeit.timeit('import json; json.dumps(list(range(10000)))', number=5000))"
$ docker run python:2-alpine3.6 python -c $BENCHMARK
7.6094589233
$ docker run python:2-slim python -c $BENCHMARK
4.3410820961
$ docker run python:3-alpine3.6 python -c $BENCHMARK
7.0276606959
$ docker run python:3-slim python -c $BENCHMARK
5.6621271420
Run Code Online (Sandbox Code Playgroud)
我还尝试了以下不使用 Python 的“基准”:
$ docker run -ti ubuntu bash
root@6b633e9197cc:/# time $(i=0; while (( i < 9999999 )); do (( i ++
)); done)
real …Run Code Online (Sandbox Code Playgroud) docker ×10
alpine-linux ×2
linux ×2
ubuntu ×2
bridge ×1
daemon ×1
debian ×1
filesystems ×1
installation ×1
performance ×1
process ×1