您的位置:首页 > 运维架构 > Docker

Docker容器、镜像、数据卷

2015-12-15 13:49 489 查看
Dockerfile中Run指令运行命令时找不到命令

Run cmd 是在/bin/sh环境中执行命令。

Run [“cmd”] 是直接使用系统调用exec执行。

找不到命令时将/bin/sh替换成/bin/bash, 在Dockerfile中添加:

RUN rm /bin/sh && ln -s /bin/bash /bin/sh

Ubuntu安装命令 RUN apt-get install -y apache2

CMD命令用来设置启动容器时默认运行的命令,命令结束容器就退出了。设置容器启动执行命令并进入 shell,

CMD sh -c “source /etc/profile && /bin/bash”

添加文件内容

RUN echo “export JRE_HOME=${JAVA_HOME}/jre” >> /etc/profile

Ubuntu系统修改sources.list后,apt出现Unable to locate package, 执行apt-get update。

不要在Dockerfile中启动后台程序,要把后台程序改成前台程序,或者写一个启动脚本,在脚本中启动后台进程。

端口映射

-p localport:containerport

查看容器配置信息

docker inspect containerID

最近运行容器的ID

docker ps -l -q

删除所有的容器

docker rm $(docker ps -a -q)

数据卷

数据卷一旦声明,它的生命周期和声明它的容器就无关了。一个容器引用一个数据卷容器时,并不要求数据卷容器是运行的。数据卷容器可以级联引用。此外,容器的停止和删除都不会导致数据卷本身删除。如果要删除数据卷,需要删除所有依赖它的容器,并且在删除最后一个依赖容器时加入-v标志,

docker rm -v container

可以通过两种方式创建数据卷。

在Dockerfile中,

VOLUME /var/lib/data

但是Dockerfile不支持挂载本地目录到数据卷。

或者在命令行中使用docker run, -v 参数来创建数据卷并将其挂载到容器中。

若只创建数据卷没有挂载相应的目录 -v /data,docker会在/var/lib/docker/vfs/dir下分配一个具有唯一名字的目录对应该数据卷。

指定宿主主机上的某个目录作为数据卷, -v 宿主目录:数据卷:权限, 宿主目录的路径必须是绝对路径。使用宿主当前目录

-v `pwd` : /data

通过挂载本地目录到容器的数据卷,宿主主机对目录的改变会同步反映到容器中,反过来也一样。如果容器内部已经存在相应的数据卷路径,那么挂载宿主目录后,它的内容会被覆盖。

docker也可以将宿主上的单个文件作为容器的数据卷。 -v /docker/file.txt:/file.txt。

容器连接

容器连接包括源容器和目标容器,源容器提供服务。容器连接依赖于容器名,这种容器间的连接比暴露端口的方式更加安全。

docker run –name containerName ,命名容器。

docker run –link containerName:alias ,containerName为源容器名字,alias为这个连接的别名。这种方式只能处理一个宿主上的容器连接。

代理连接

通过代理连接可以解耦两个原本直接相连的容器的耦合性,并且可以跨主机连接。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: