Docker
docker ps -aq(-a是所有, -q是只显示容器ID)
移除某个镜像/容器?
docker rmi dockername/tag/id (rmi) (rm删除不存在的容器, rmi需要回应)
移除所有
docker images | grep "<none>" | awk '{print $3}' | xargs docker rmi
docker rmi $(sudo docker images -q --filter "dangling=true”) // 这句未测试
Kill containers and remove them:
docker rm $(docker kill $(docker ps -aq))
以上命令实在不行就加-f强制删除吧(既stop不了也kill不了)
顺便看出把一个命令的输出(返回值)传给下一个命令, 可以用管道xargs, 也可以用$()包起来
重启后自动启动
sudo docker run --restart=always -d myimage
停止某个容器
docker stop <container>
进入一个docker的bash
sudo docker exec -i -t 665b4a1e17b6 bash #by ID # 也可以by name
sudo docker attach 665b4a1e17b6 #by ID # 这个我测试失败了
查看容器的名字
docker inspect -f "{{ .Name }}” aed84ee21bde
查 IP
$ docker inspect --format '{{ .NetworkSettings.IPAddress }}' $(docker ps -q)
查看日志
docker logs 2c9d5e12800e
docker pull python # 不带版本号,摘取带有最新的python的镜像
docker run hello-world # 找不到镜像时,会自动先下载,再自动生成容器
# 每run一次都会生成新的容器
docker run hello-workd # 启动指定名称的容器
docker run -a hello-workd # 带输出
- 下载安装脚本
curl -fsSL https://get.docker.com -o get-docker.sh - 执行安装脚本
sudo sh get-docer.sh - 将操作用户添加入docker组
sudo usermod -aG docker pi docker versiondocker info
主程序和标准输入
每个容器都有一个主程序,如果在启动命令后跟上程序命令,就把主程序更改了
docker run --name abc python echo abcd
以上就把主程序改为了echo ,这样执行完后就退出了
如果需要增加标准输入:
docker run --name abc -it python
- 因为python镜像的主程序是python,所以-it 就进入了python的交互环境
- 上面说的-it 以进入bash环境就是一知半解的原因
attach & detach
- attach状态下,容器的输入输出就是当前终端的输入输出,detach状态下就没有了,容器是在后台运行。
- 这就是前面的-a 能显示输出的原因,其实就是以attach 状态启动容器
docker attach p2就能有在后期attach上ctrl + p + q退出attach状态
start -ai一启动就进入attach状态,但是好像就跟-it 作用是一样的了run -itd在生成这个容器时就指定了detach状态
在外部执行容器里的命令
需要容器是up状态:
docker exec myrepo lsdocker exec -it myrepo bash因为bash是一个交互式的程序,所以加了-it 参数