Docker初步实践遇到的一些问题

为什么删除不了有些Images

当你试图删除一个你不用的image的时候,有时候会告诉你有个container正在使用这个镜像,但是docker ps 并没有发现相关的container,这个是由于对container的exit理解不深造成的。

这里有两个不同的单词,images和container。其中images很好理解,跟平常使用的虚拟机的镜像一个意思,相当于一个模版,而container则是images运行时的的状态。docker对于运行过的image都保留一个状态(container),可以使用命令docker ps来查看正在运行的container,对于已经退出的container,则可以使用docker ps -a来查看。 如果你退出了一个container而忘记保存其中的数据,你可以使用docker ps -a来找到对应的运行过的container使用docker commit命令将其保存为image然后运行。

事实上你需要rm掉那个container才可以进行rmi的操作

docker ps -a
docker rm ${container_id}
docker rmi ${iamge_id}

在Ubuntu下使用docker 但是不想写sudo

原理还是将用户加入docker组 问题解决

挂起一个container

Ctrl+p, Ctrl+q

#不小心exit但是数据没有保存

docker ps -a

检查所有的关掉的container

docker restart ${old_container_id}

但是问题是,也许你会觉得有些container明明都不用了却还在那里碍眼,可以删掉所有旧的container

docker rm $(docker ps -a -q) #这个更暴力一点
docker ps -a | grep 'weeks ago' | awk '{print $1}' | xargs --no-run-if-empty docker rm # 个人更喜欢这个

或者是有些时候你想删掉中间层的镜像

有些时候你可以在run里头加这个参数,这样在退出container的时候就会直接删掉那个container了

--rm=false Automatically remove the container when it exits

Docker commit and docker push

commit是commit一个正在运行的container作为一个新的镜像 push是把整个repo都推上去,包括所有的tag 和git一样的

#指定端口

docker run -ti -p 主机端口:容器端口 镜像 命令
docker ps nostalgic_morse # 用于查看端口映射的情况

#挂载数据卷 挂载数据卷才是Best Practice,Docker的本质不希望和主机发生太多的关系,不要太指望在主机上放数据文件 这篇文章 讲了这件事情的Best practice,反正就是使用data-only-container就对了

主要是还说了另外的方法的drawback

数据卷说白了就是什么都不做的卷

  • 拉一个数据镜像
docker pull maxexcloo/data

这个镜像其实很简单,看一下Dockerfile

FROM busybox:latest
MAINTAINER Max Schaefer <max@excloo.com>
RUN mkdir /data
VOLUME /data

基于buzybox,在我看来buzybox就是linux命令的一个子集

You can also use the VOLUME instruction in a Dockerfile to add one or more new volumes to any container created from that image.

这个 VOLUME关键字和 run后面的参数 -v是一个意思,在我看来这个数据是没有办法持久化的(2014.12.10)

  • 不拉镜像
docker run -ti --name web -v /src/webapp:/opt/webapp training/webapp python app.py

--name="" Assign a name to the container

注意这两个的区别

-v, --volume=[] Bind mount a volume (e.g., from the host: -v /host:/container, from Docker: -v /container)

这个是指定目录

--volumes-from=[] Mount volumes from the specified container(s)

这个后面跟container_id或者是--name指定的名字

在一个指定的container里头跑一条命令

docker exec container_id command

查看docker container的ip

docker inspect ${CONTAINER_ID}

转载于:https://my.oschina.net/zuoyc/blog/351803

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值