❶ 如何在mac上彻底删除docker
1、删除不了的软件或文件的解决方法: 开机按F8到安全模式中删除即可。
如果使用其他办法无法删除可选择Unlocke。
4、当使用者发现有某个文件或目录无法删除时,只要按下鼠标右键中的“Unlocke”,那么程序马上就会显示出是哪一些程序占用了该目录或文件,接着只要按下弹出的窗口中的“Unlock”就能够为你的文件解套。
5、 Unlocke不同于其它解锁软件的部分在于它并非强制关闭搜携那些占用文件的程序,而是以解除文件与程序关连性的方式来解锁,因此不会像其它解锁世核伏程序一样因为强制关闭程序而造成使用者可能的数据遗失。
❷ Docker(5)——垃圾清理
docker会产生一些垃圾,有哪些垃圾,1.镜像垃圾,容器垃圾,其它缓存垃圾,数据卷垃圾,构建缓存垃圾
清除docker镜像缓存
为什么就一个命令也要单开一个博客记录
因为坑死我了,打了一早上镜像一直有问题,搞到最后是缓存的锅
佛了!
命令
docker system prune --volumes
1
该命令清除:
所有停止的容器
所有不被任何一个容器使用的网络
所有不被任何一个容器使用的volume
所有无实例的镜像
可以通过将-a选项传递给docker container ls命令来获得所有活动容器和非活动容器的列表:
docker container ls -a
知道要删除的容器的CONTAINER ID后,请将其传递给docker container rm命尺察令。例如,要删除上面输出中列出的前两个容器,请运行:
docker container rm cc3f2ff51cab cd20b396a061
docker rm cc3f2ff51cab cd20b396a061
停止容器
docker container stop cc3f2ff51cab
删除所有已停止的容器
docker container prune
查看docker的镜像
docker image ls
删除docker镜像
注意:要删除图像,必须先删除对应的容器。
docker image rm 75835a67d134 2a4cca5ac898
docker rmi 75835a67d134 2a4cca5ac898
实际上,当同一个镜像拥有多个标签时,执行 docker rmi 命令,只是会删除了该镜像众多标签中指定的标签,并不会影响原始的那个镜像文件。如果明困袭某个镜像不存在多个标签,当且仅当只有一个标签时,执行删除命令时,这会彻底删除镜像
在使用 Docker 一段时间后,系统一般都激兄会残存一些临时的、没有被使用的镜像文件,可以通过以下命令进行清理:
docker image prune -a
查看docker卷
docker volume ls
删除docker卷
docker volume rm 4e12af8913af
删除所有未使用的卷
docker volume prune
docker system是用于管理磁盘空间的命令,docker system df,类似于df命令,专门用来查看docker的磁盘使用情况。
❸ homeassistant卡在docker
原因是Docker容器出现了一些问题。解决方法正如:
1、查看日志:使用dockerlogs命令来查看HomeAssistant的日志信息,从日志中找到具体的错误提示信息。依据错误提示信息进行排查和处理。
2、重启容器:使用dockerrestart命令重启HomeAssistant容器,尝试解决问返清哪题。
3、清理缓存:使用dockersystemprune命令清理Docker系统的缓存和临时文件,释放磁盘空间,有时候过多的缓存会导致问题。
4更新版本:检查HomeAssistant和Docker的最新版本漏码,并更新到最新版,有时候版本过旧也会导致问题。
❹ 如何使用 的 docker hub缓存服务
推荐使用Dockerfile方式。
服务的管理使用的是supervisord, 因为dockerfile里只会有一个cmd生效,如果我想通过ssh去管理容器还要有mysql服务的启动起来 cmd的方式就无法实现,当然容器不需要以sshd的方式去管理,这些也都是看自己怎么去使用,比如说我想备份容器里的数据 我完全可以使用 –volumes-from <容器name> , 重启使用 docker restart <容器id>, 我个人也是使用ssh习惯了 所以依赖的镜像把ssh服务栽进去了。
# docker 版本:
复制代码
代码如下:
[root@private_network mysql]# docker version
Client version: 1.6.0-rc5
Client API version: 1.18
Go version (client): go1.4.2
Git commit (client): fc4825d
OS/Arch (client): linux/amd64
Server version: 1.6.0-rc5
Server API version: 1.18
Go version (server): go1.4.2
Git commit (server): fc4825d
OS/Arch (server): linux/amd64[/code]
❺ 在Docker容器中操作Docker (dind)
就是在Docker容器中再次运行一个Docker服务.
在一个乎拿容器中操作Docker在CI工具中是很常见的, 如构建一个Docker镜像.
但由于在容器中运行一个Docker服务会有各种问题, 如镜像文件存储, 嵌套的容器也并不容易维护, 后来便衍生出了另一种更实用的方案: 挂载主机上Docker服务的sock
这样将不会遇到嵌套副作用,并且将在多个调用之间共享构建缓存。
ps: 更多知识请阅读 docker 官方提及的这篇文章: do-not-use-docker-in-docker-for-ci
我接下来要写的也是如何使用它, 并记录我的使用场景.
我有一个需求是这样的:
当某个镜返顷尘像更新之后, 通知docker重新pull并部署. 简单的来说就是当容器更新, 就自动运行
以实现更新部署.
由于自己编写的程序也运行在Docker中, 而不是宿主机, 所有没办法直接执行以上命令, 这就需要Docker In Docker了.
简单来说 你只需要这样:
然后 docker ps 就能看到 宿主机上 的所有容器.
如我的就是
当然 这里的stack.yaml文件需要在构建这个容器时添加进来 或者 挂载进来, 这肯定难不倒你.
如果你要将这段CMD在你的程序中运行也十分简单:
写好程序之后你可以使用这个Dockfile构建你的镜像
而运行这个镜像的stack.yaml文件需要配置挂载
你会看到我又挂载了.docker文件夹, 这个无关紧要, 在后面的疑难杂症会说漏禅到这个问题.
此参数是17.9版本之后新加的, 用于解决deploy不pull最新的镜像的问题. 详情看这个ISSUE:
force docker deploy to pull new images
私有仓库必须登录才有访问权限, 所以需要在宿主机上先login, 登录成功后会发现在 ~/.docker有新生成的 配置文件
, 其中存储了认证所需要的信息. 但在Docker容器中拿不到这个信息所以就会报错.
解决办法是将配置文件挂载进容器
问题描述:
网络结构如下:
客户端 -> 服务器上的Nginx容器 (反代)-> 应用程序
在Nginx中配置了
在应用程序中得到"HTTP_X_FORWARDED_FOR"头 却是10.255.0.2, 而不是客户端真正的ip.
解决办法:
google : docker 10.255.0.2
得到的信息挺多的, 大多数是Docker3年4年都没有close的ISSUE....
当前可用的解决办法有
❻ docker 部署镜像
以阿里云镜像示范:
一、手动部署:
1.mkdir ktc: 创建文件夹
2.把项目里的maven缓存 clean 清理掉
3.然后package 打成 jar包
4.然后登录阿里云,在产品与服务找到容器镜像服务
5.创建好命名空间,然后再创个公开的岁滚镜像仓库;
6.创建好之后 登录阿里云Docker Registry,创建好仓库有操作指南,后面的是公网地址,*要自己补全
7.输入密码是看不到的,显示Login Succeeded 就登录成功,然后就构建镜像 名字自己锋雀穗取
8.sudo其银卜实可有可无,管理员权限,imageid是什么构建的镜像的id 后面版本号也是自己设置
9.然后就是提交了
❼ 详解Docker——你需要知道的Docker进阶知识五
Dockerfile 是一个文本文件,其中包含了构建 Docker 镜像需要执行的命令序列。使用 docker build 命令从 Dockerfile 中读取指令来构建镜像。
构建镜像时,该过程的第一件事是将 Dockerfile 文件所在目录下的所有内容发送给 Docker 守护进程。所以大多数情况下,最好创建一个新的目录,在其中保存 Dockerfile ,以及构建镜像所需的其它文件。Dockerfile 文件所在目录也被称为构建上下文(context)。
使用 FROM 指令指定一个基础镜像,后续指令将在此镜像基础上运行:
在 Dockerfile 中可以指定一个用户,后续的 RUN , CMD 以及 ENTRYPOINT 指令都会使用该用户身份去执行,该用户必须已存在。
除了指定用户之外,还可以使用 WORKDIR 指定当前工作目录(CWD), RUN , CMD , COPY , ADD 指令将在指定的工作目录中执行。
RUN 指令用于执行命令,该指令有两种形式:
例如我们执行更新命令:
CMD 的使用方式跟 RUN 类似,不过在一个 Dockerfile 文件中只能有一个 CMD 指令,如果有多个,则只有最后一个会生效。该指令指定了启动容器时要执行的命令,例如:
可以在 docker run 时指定命令来覆盖默认的 CMD 命令,比如 docker run image echo"hello shiyanlou" 。
CMD 指令还有一种特殊用法。在 Dockerfile 中,如果使用 ENTRYPOINT 指令指定了入口命令,则 CMD 指令的内容会作为 ENTRYPOINT 指令的参数:
ENTRYPOINT 指令会覆盖 CMD 指令作为容器运行时的默认指令,并且该指令不会被 docker run 时指定的指令覆盖,如下示例:
上述文件构建出来的镜像,使用 docker run image 等同于 docker run image ls-a-l 。使用 docker run image-i-s 等同于 docker run image ls-a-i-s 。即 CMD 指令的值会被当作 ENTRYPOINT 指令的参数附加到 ENTRYPOINT 指令的后面,只有 CMD 指令可以被覆盖。
COPY 和 ADD 都用于将构建上下文中的文件,目录等复制到镜像中。使用方式如下:
`` 可以指定多个,但是其路径不能超出构建上下文范围,即必须在 Dockerfile 同级或子目录中。
不需要预先存在,不存在时会自动创建,如果使用相对路径,则 为相对于工作目录的路径。塌陪
COPY 和 ADD 的不同之处在于,ADD 可伏衫或以添加远程文件,并且 `` 可以是 gzip 或 tar 等格式的压缩文件,添加时会自动进行解压。
ENV 指令用于设置环境变量:
VOLUME 指令指定要创建的挂载路径,在容器运行时,将为每个挂载路径创建一个匿名卷并挂载上去:
上述指令将会在容器运行时,创建两个匿名卷,并分别挂载到容器中的 /data1 和 /data2 路径。
学习了上面这些常见的 Dockerfile 指令之后,可以使用这些指令来构建一个镜像。如下所示,构建一个提供 ssh 服务的镜像:
构建镜像
查看镜像
启动容器
查看已经启动的容器
测试远程登录
Compose 是运行由多个容器组成的 Docker 应用的工具,使用 Compose 可以一次启动一组有关联的服务,每个服务由来自同一镜像的单个或多个容器组成。
在复杂应用中,应用一般由多个服务(service)组成,例如一个网站后台通常包含 Web 服务、数据库服务、缓存缺伍服务、消息队列服务等。
使用 Compose 的步骤如下:
目前有三种版本的 Compose 文件格式:
下载 docker-compose-Linux-x86_64
下载成功后,为了方便使用,可以将其添加到 PATH 路径下
执行完成后,就能够在终端下直接使用 docker-compose 命令了:
接下来我们将创建一个 Web 应用,该应用包含两个容器:
项目目录结构如下:
首先编辑 app/web/web.py 文件,写入下面的内容:
上述代码创建了一个简单的 Web 应用。该应用会连接 redis 服务,在访问 / 页面时,自动将变量 number 加 1。
编辑 app/web/requirements.txt 文件,输入如下内容:
requirements.txt 文件存放了 Web 应用依赖的第三方库包的名称和版本信息。
编辑 app/web/Dockerfile 文件,添加如下内容
上述 Dockerfile 定义了 Web 应用镜像,该镜像基于 python:2.7 基础镜像,在其基础上安装了应用依赖的库包,并通过 CMD 指令指定了应用的启动命令。
编辑 app/docker-compose.yml 文件:
该 docker-compose.yml 文件定义了两个服务,分别为 web 和 redis 服务,并且配置了 web 服务的端口映射和挂载目录。 depends_on 定义了依赖关系,被依赖的服会先启动。
进入 app 目录,执行 docker-compose up 命令来启动应用:
启动成功后,就可以打开网址 127.0.0.1:8001 来访问 Web 应用了。
另外一些命令:
❽ Docker NextCloud Redis缓存配置
转自我的博客:https://sleele.com/2019/04/19/docker-nextcloud-redis缓则悄存配置/
前言
nextcloud这个东西真的是挺慢的,文件一多等刷新都要等很久,孙衡渣如果配置了Redis做缓存就会快不少
搭建过程我就不再赘述了,可以参照我上篇博文
https://sleele.com/2019/03/03/linux-qbittorrent和nextcloud安装笔记/
部署redis
docker run --name redis -d redis
查看docker容器IP
docker inspect --format='{{.Name}} - {{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' $(docker ps -aq)
之后修改nextcloud的配置文件
首先到本地
docker cp nextcloud:/var/www/html/config/config.php /tmp/
vi /tmp/config.php
添加如下内容
找准位置在拦早【'memcache.local' => '\OC\Memcache\APCu',】 这行后面添加
host那行换成你的redis地址
'memcache.locking' => '\OC\Memcache\Redis',
'redis' => array(
'host' => '172.17.0.5',
'port' => 6379,
),
再回去,注意直接回去会导致nextcloud报错,需要修改权限
docker cp config.php nextcloud:/var/www/html/config/
docker exec -it nextcloud bash
cd /var/www/html/config/
chmod 777 config.php
重启nextcloud,教程结束
docker restart nextcloud
❾ 如何使用Docker开源仓库建立代理缓存仓库
开源Docker仓库v2 的其中一个最新特性:能够被用作代理缓存仓库,以缓存Docker Hub上的镜像。运行一个缓存仓库允许你在本地储存镜像,减少过多的通过互联网从Docker Hub拉取镜像,这个特性对于一些在他们环境中拥有数量庞大的Docker引擎的用户来说很有用。跟着本篇教程,你可以让Docker引擎从本地代理缓存仓库拉取镜像,而不是让每个引擎总是从Docker Hub拉取,从而节省时间和带宽。
你可以这样开始:
####要求:
- Docker引擎1.8.3
- Docker仓库v2
- 足够储存Docker镜像的磁盘空间
- TLS证书和密钥
持久化数据
在这个例子中,我们会假设你会储存所有持久化数据在本地文件系统的<code>/data</code>路径下,这个路径下包含TLS证书和密钥文件,配置文件和镜像缓存文件。我们之后会用卷挂载这个目录进运行仓库的容器。
保护你的代理缓存仓库安全
代理缓存仓库需要一个TLS证书来保证Docker引擎和缓存仓库之间的连接安全,在这个例子中,我们会放置我们证书文件(<code>domain.crt</code>)和密钥文件(<code>domain.key</code>)在主机的<code>/data</code>目录。
更多关于使用TLS加强仓库安全的信息,请参照 Docker仓库2.0文档 。
创建代理缓存仓库配置文件
下一步你需要创建一个配置文件,来把这个仓库用作代理缓存。你可以用cat命令把<code>registry:2</code>镜像中的缺省配置文件重定向输出到一个文件中:
sh
$ docker run -it --rm --entrypoint cat registry:2 \
/etc/docker/registry/config.yml > /data/config.yml
<code>我强烈建议从Docker镜像中获得这个默认配置,而不是使用例子中的配置,因为将来这个默认配置可能会有更新。</code>
默认的config.yml例子:
yaml
version: 0.1
log:
fields
service: registry
storage:
cache:
layerinfo: inmemory
filesystem:
rootdirectory: /var/lib/registry
http:
addr: :5000
修改'http'这节配置上TLS:
yaml
http:
addr: :5000
tls:
certificate: /var/lib/registry/domain.crt
key: /var/lib/registry/domain.key
在配置文件中新加一节'proxy'来开启缓存:
点击打开文档( https://github.com/docker/dist ... or.md )
yaml
proxy:
remoteurl: https://registry-1.docker.io
username: [username]
password: [password]
'username'和'password'这两个选项是可选的,这是Docker Hub账号的用户名和密码,设置上这两个选项,会使代理缓存仓库获取到这个账号的同等权限,也就是说,这个用户有权限获取的镜像,这个缓存仓库同样有权限获取。
<code>请确保完全理解设置这个Docker Hub账号背后意味着什么,并且确保你镜像的安全还有严格的访问权限!如果你不确定,请不要再配置包含用户名和密码,那么你的代理缓存仓库就只会缓存公共镜像。</code>
启动代理缓存仓库的容器:
sh
$ docker run -d --restart=always -p 5000:5000 --name v2-mirror \
-v /data:/var/lib/registry registry:2 /var/lib/registry/config.yml
以上命令使用一个卷把宿主机上的/data挂载进了容器中,使容器能使用持久储存镜像缓存,TLS证书和密钥,还有自定义的仓库配置文件。
验证你的代理缓存仓库已经启动并正常运行:
sh
$ curl -I https://mycache.example.com:5000/v2/
HTTP/1.1 200 OK
Content-Length: 2
Content-Type: application/json; charset=utf-8
Docker-Distribution-Api-Version: registry/2.0
Date: Thu, 17 Sep 2015 21:42:02 GMT
配置你的Docker引擎使用代理缓存仓库
修改Docker守护进程的启动参数,加上<code>--registry-mirror</code>选项:
sh
--registry-mirror=https://<my-docker-mirror-host>:<port-number>
例如,如果你的缓存仓库的主机名为mycache.example.com并且仓库服务端口为5000,你需要加上以下选项到守护进程的参数:
sh
--registry-mirror=https://mycache.example.com:5000
参考 在各种的Linux分发版中配置运行Docker 了解更多信息关于如何添加Docker守护进程参数。
测试你的代理缓存仓库
从Docker Hub上拉取一个你本地没有的镜像。例如,busybox:latest镜像:
sh
$ docker pull busybox:latest
检查缓存仓库中的目录,验证busybox镜像是否被缓存:
sh
$ curl https://mycache.example.com:5000/v2/_catalog
{"repositories":["library/busybox"]}
你也可以验证latest标签是否被缓存:
sh
$ curl https://mycache.example.com:5000/v2/library/busybox/tags/list
{"name":"library/busybox","tags":["latest"]}
现在开始当你拉取镜像时,镜像将被缓存到你的代理缓存仓库,之后拉取相同的镜像时会更快,并且这些镜像缓存会维护自身,当他们不再被使用时将会自动清除。