Cannot connect to the Docker daemon at unix:///var/run/docker.sock. Is the docker daemon running?

sudo systemctl daemon-reload
sudo systemctl restart docker.service

容器

  • 列出所有容器
    docker ps -a
  • 列出所有的容器ID
    docker ps -aq
  • 杀死所有的容器
    docker kill $(docker ps -aq)
  • 停止所有的容器
    docker stop $(docker ps -aq)
  • 删除所有的容器
    docker rm $(docker ps -aq)
  • 停止所有的异常的容器
    docker ps -a | grep "Exited" | awk '{print $1}' | xargs docker stop
  • 删除所有异常停止的容器
    docker ps -a | grep "Exited" | awk '{print $1}' | xargs docker rm

镜像

  • 通过标签删除镜像
    docker rmi [image] 或者
    docker image rm [image] 支持的选项
    -f, -force:强制删除镜像,即便有容器引用该镜像
    -no-prune:不要删除未带标签的父镜像
  • 通过ID删除镜像
    docker rmi sjd2321fdf34
  • 批量删除无tag镜像
docker ps -a|grep "Exited" | awk '{print $1}' | xargs docker stop
docker ps -a|grep "Exited" | awk '{print $1}' | xargs docker rm
docker images|grep none|awk '{print $3}'|xargs docker rmi
  • 删除所有镜像
    docker rmi $(docker images -q)
  • 清理镜像
    我们在使用 Docker 一段时间后,系统一般都会残存一些临时的、没有被使用的镜像文件,可以通过以下命令进行清理:
    docker image prune 附加选项:
    -a, --all: 删除所有没有用的镜像,而不仅仅是临时文件;
    -f, --force:强制删除镜像文件,无需弹出提示确认;
  • 检索对应镜像ID的依赖
    docker image inspect --format='{{.RepoTags}} {{.Id}} {{.Parent}}' $(docker image ls -q --filter since=XXX)

脚本

  • 删除所有已经退出的容器
for i in `docker ps -a | grep -i exit | awk '{print $1}'`;do docker rm -f $i;done

volume

  • 显示unused(dangling) volumes
docker volume ls -q -f "dangling=true"
  • 删除unused(dangling) volumes
docker volume rm $(docker volume ls -q -f "dangling=true")

Dockerfile构建

官方文档

  • Demo01 自定义Centos
FROM centos:latest
RUN cd /etc/yum.repos.d/
RUN sed -i 's/mirrorlist/#mirrorlist/g' /etc/yum.repos.d/CentOS-*
RUN sed -i 's|#baseurl=http://mirror.centos.org|baseurl=http://vault.centos.org|g' /etc/yum.repos.d/CentOS-*
RUN yum makecache
RUN yum update -y
RUN yum install -y vim
#这个命令仅仅是声明当前容器中服务端口是多少,用于声明对外端口
EXPOSE 8081
#传递环境变量
ENV BASE_PATH=/path/to/workdir
#指定在创建容器后,终端默认登录进来的工作目录,一个落脚点
WORKDIR $BASE_PATH
#讲宿主机目录下的文件拷贝进镜像且ADD命令会自动处理URL和解压tar
ADD test01.txt .
ADD https://mirrors.aliyun.com/apache/tomcat/tomcat-9/v9.0.71/bin/apache-tomcat-9.0.71-deployer.tar.gz?spm=a2c6h.25603864.0.0.4fb422aaQ1hcCt .
RUN tar -zxvf apache-tomcat-9.0.71-deployer.tar.gz
#RUN mv apache-tomcat-9.0.71-deployer tomcat-9.0.71
RUN rm -rf apache-tomcat-9.0.71-deployer.tar.gz
#简单拷贝,无附加操作
COPY test02.txt .
#容器数据卷,用于数据保存和持久化工作,用于声明数据持久化目录位置
VOLUME /path/to/workdir
#CMD 和 ENTRYPOINT指定一个容器启动时要运行的命令,Dockerfile中可以有多个CMD指令,但只有最后一个生效,CMD会被docker run之后的参数替换
#CMD ["ls", "/path/to/workdir"]
#ENTRYPOINT docker run --entrypoint覆盖默认指令,image:version 传递参数
#ENTRYPOINT ["ls", "/path/to/workdir"]

#ENTRYPOINT 用来书写一个容器固定的指令
#CMD 用来给ENTRY传递参数
#注意:二者配合使用必须使用JSON数组格式语法
ENTRYPOINT ["ls"]
CMD ["/path/to/workdir"]

Docker-compose

官方文档

  • demo01
#代表使用docker-compose和docker engine的版本关系
version: "3.8"

services:
    tomcat00:
        #container_name: tomcat00    #给容器指定一个名称,不推荐使用
        image: tomcat:8.0
        ports:
            - "8080:8080"

    tomcat01:
        image: tomcat:8.0
        ports:
            - "8081:8080"

    redis:
        image: redis:5.0.12
        ports:
            - "6379:6379"

    mysql:
        image: mysql:5.6
        ports:
            - "3306:3306"
        environment:
            - "MYSQL_ROOT_PASSWORD=root"
        volumes:
            #- /home/book/docker_stu/docker-compose/ems/mysqldata1:/var/lib/mysql
            - mysqlData:/var/lib/mysql

volumes:
    mysqlData:   #声明数据卷别名