Docker,在容器中安装postgresql包含“ubuntu:14.04”,在容器外丢失

我试图在容器中安装postgresql-9.3包含图像“ubuntu:14:04”

第一步,我做了图像“ubuntu:14:04”

$ sudo Docker pull ubuntu:14.04 

第二步,我用命令创build一个容器

  $ sudo docker run -t -i ubuntu:14.04 /bin/bash 

第三步,我在容器中安装postgresql-9.3包含“ubuntu:14.04”(在一个包含ubuntu的容器中)

我试图进入postgresql可以,然后我试图走出容器,直接与命令

  # exit 

我试图重新login,容器postgresql我安装丢失,是否可以做,并帮助解释为什么?

Docker本身是否运行在内核中?

硬件> OS> Docker。

Docker概念:

Docker = images> Container

你不应该在bash会话中安装任何东西。
由于docker使用UnionFS(联合文件系统服务) ,一旦退出bash会话,当容器被移除时,任何修改都将丢失。

您可以尝试“退出”容器的docker commit ,但这不是您如何构建新的图像。

你要做的就是创建一个名为Dockerfile的文本文件,在这个文件中你可以像官方的postgres镜像Dockerfile一样执行类似的步骤(除非你想从ubuntu启动)。

这包括:

 RUN apt-get update \ && apt-get install -y postgresql-common \ && sed -ri 's/#(create_main_cluster) .*$/\1 = false/' /etc/postgresql-common/createcluster.conf \ && apt-get install -y \ postgresql-$PG_MAJOR=$PG_VERSION \ postgresql-contrib-$PG_MAJOR=$PG_VERSION \ && rm -rf /var/lib/apt/lists/* 

你运行docker build -t mypostgres . :将建立一个新的图像,其中将包含postgres。

换句话说,Dockerfile可以在声明性文本文件中保存安装步骤,您可以随时从中建立图像。

如果你发现使用bash更容易安装,而不是使用Dockerfile和build命令,你可以像第一步和第二步所做的那样完成,但是在第三步之后退出bash

CONTROL + P后跟CONTROL + Q

这将退出容器,使其运行和使用后

 docker commit mycurrentcontainer mynewimagewithpostgrestobeuseinfuture