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: #声明数据卷别名