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 version
  • docker 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 ls
  • docker exec -it myrepo bash 因为bash是一个交互式的程序,所以加了-it 参数