docker容器命令
查看容器日志 docker logs -t --tail=10 容器名称 #查询所有的容器,过滤出Exited状态的容器,列出容器ID,删除这些容器 docker rm `docker ps -a|grep Exited|awk '{print $1}'` #全局限制docker容器日志大小上线为5G # vim /etc/docker/daemon.json { "registry-mirrors": ["http://f613ce8f.m.daocloud.io"], "log-driver":"json-file", "log-opts": {"max-size":"500m", "max-file":"3"} } max-size=500m,意味着一个容器日志大小上限是500M, max-file=3,意味着一个容器有三个日志,分别是id+.json、id+1.json、id+2.json。 // 重启docker守护进程 # systemctl daemon-reload 重载配置 # systemctl restart docker 创建自定义网络 docker network create somenetwork Docker占用的磁盘空间查看 docker system df 批量停止的docker容器 docker stop $(docker ps -a | grep "redis" | awk '{print $1}') 删除所有未打标签的镜像 docker rmi $(docker images -q -f dangling=true) 删除所有无用的volume docker volume rm $(docker volume ls -qf dangling=true) 清理磁盘、删除关闭的容器、无用的数据卷和网络 docker system prune 参数: -a : 清除所有没有容器引用的镜像时,使用 docker system prune -a (慎用) -f or --force : 强制清除,不会出现提示,使用docker system prune -f(慎用) --filter : 用来限制要保留的镜像的范围,例如:只清除超过创建时间超过24小时的镜像(docker image prune -a --filter "until=24h") 停止所有运行中的容器 docker stop $(docker ps -q) 停止所有容器 docker stop $(docker ps -a -q) 删除所有容器 docker rm $(docker ps -aq) (此命令可删除所有停止了的容器,无法删除运行中的容器) 删除所有镜像 docker rmi $(docker images -q)
Docker修改容器默认存储路径 docker安装之后默认的服务数据存放根路径为/var/lib/docker目录下,var目录默认使用的是根分区的磁盘空间;所以这是非常危险的事情;随着我们镜像、启动的容器实例开始增多的时候,磁盘所消耗的空间也会越来越大,所以我们必须要做数据迁移和修改docker服务的默认存储位置路径;有多种方式是可以修改docker默认存储目录路径的,但是最好是在docker安装完成后,第一时间便修改docker的默认存储位置路径为其他磁盘空间较大的目录(一般企业中为/data目录),规避迁移数据过程中所造成的风险。 (1)创建docker容器存放的路径 # mkdir -p /home/data/docker/lib (2)停止Docker服务并迁移数据到新目录 # systemctl stop docker.service # rsync -avz /var/lib/docker/ /home/data/docker/lib/ (3)创建Docker配置文件 # mkdir -p /etc/systemd/system/docker.service.d/ # vim /etc/systemd/system/docker.service.d/devicemapper.conf [Service] ExecStart= ExecStart=/usr/bin/dockerd --graph=/home/data/docker/lib/ (4)重启Docker服务 # systemctl daemon-reload # systemctl restart docker (5)查看现在容器存放的目录 # docker info | grep "Dir" Docker Root Dir: /home/data/docker/lib
docker下容器时间同步
docker cp /usr/share/zoneinfo/Asia/Shanghai zoo2:/etc/localtime
容器开机自启 如果创建时未指定 --restart=always ,可通过update 命令设置 命令:docker update --restart=always 容器ID docker命令每次需要sudo操作解决方案 1.创建docker组:sudo groupadd docker 2.将当前用户加入docker组:sudo gpasswd -a ${USER} docker 3.重启服务:sudo service docker restart 4.刷新docker成员:newgrp - docker
Docker安装后,默认会创建下面三种网络类型 $ docker network ls NETWORK ID NAME DRIVER SCOPE 9781b1f585ae bridge bridge local 1252da701e55 host host local 237ea3d5cfbf none null local 启动 Docker的时候,用 --network 参数,可以指定网络类型 docker run -itd --name test1 --network bridge --ip 172.17.0.10 centos:latest /bin/bash bridge:桥接网络 默认情况下启动的Docker容器,都是使用 bridge,Docker安装时创建的桥接网络,每次Docker容器重启时,会按照顺序获取对应的IP地址,这个就导致重启下,Docker的IP地址就变了 none:无指定网络 使用 --network=none ,docker 容器就不会分配局域网的IP host: 主机网络 使用 --network=host,此时,Docker 容器的网络会附属在主机上,两者是互通的。 例如,在容器中运行一个Web服务,监听8080端口,则主机的8080端口就会自动映射到容器中。 创建自定义网络:(设置固定IP) 启动Docker容器的时候,使用默认的网络是不支持指派固定IP的,如下 docker run -itd --net bridge --ip 172.17.0.10 centos:latest /bin/bash 6eb1f228cf308d1c60db30093c126acbfd0cb21d76cb448c678bab0f1a7c0df6 docker: Error response from daemon: User specified IP address is supported on user defined networks only. 步骤1: 创建自定义网络 docker network create --subnet=172.18.0.0/16 mynetwork ➜ ~ docker network ls NETWORK ID NAME DRIVER SCOPE 9781b1f585ae bridge bridge local 1252da701e55 host host local 4f11ae9c85de mynetwork bridge local 237ea3d5cfbf none null local 步骤2: 创建Docker容器 docker run -itd --name networkTest1 --net mynetwork --ip 172.18.0.2 centos:latest /bin/bash
Docker容器启动时报错:container init caused “write /proc/self/attr/keycreate: permission denied““: unknown 1.2 报错背景 linux环境下使用离线方式(tgz安装包形式)安装docker 使用了docker load < xx.tar导入镜像 输入docker images和docker ps -a显示该镜像已正常导入,且已经通过docker run生成了容器 2 解决措施 如背景以及报错信息与问题描写基本一致,可以考虑如下解决方法 2.1 永久更改 需要重启服务器,慎重选用: 编辑config文件:vi /etc/selinux/config 将SELINUX=enforcing改为SELINUX=disable 重启服务器 启动docker容器docker start container-id 2.2 临时更改 输入setenforce 0 启动docker容器docker start container-id
docker修改容器的挂载目录 方式一:修改配置文件(需停止docker服务) 1、停止docker服务 systemctl stop docker.service(关键,修改之前必须停止docker服务) 2、vim /var/lib/docker/containers/container-ID/config.v2.json 修改配置文件中的目录位置,然后保存退出 "MountPoints":{"/home":{"Source":"/docker","Destination":"/home","RW":true,"Name":"","Driver":"","Type":"bind","Propagation":"rprivate","Spec":{"Type":"bind","Source":"//docker/","Target":"/home"}}} 3、启动docker服务 systemctl start docker.service 4、启动docker容器 docker start <container-name/ID> 方式二:提交现有容器为新镜像,然后重新运行它 $ docker ps -a CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 5a3422adeead ubuntu:14.04 "/bin/bash" About a minute ago Exited (0) About a minute ago agitated_newton $ docker commit 5a3422adeead newimagename $ docker run -ti -v "$PWD/dir1":/dir1 -v "$PWD/dir2":/dir2 newimagename /bin/bash 然后停止旧容器,并使用这个新容器,如果由于某种原因需要新容器使用旧名称,请在删除旧容器后使用docker rename。 方式三:export容器为镜像,然后import为新镜像 $docker container export -o ./myimage.docker 容器ID $docker import ./myimage.docker newimagename $docker run -ti -v "$PWD/dir1":/dir1 -v "$PWD/dir2":/dir2 newimagename /bin/bash 然后停止旧容器,并使用这个新容器,如果由于某种原因需要新容器使用旧名称,请在删除旧容器后使用docker rename。
机器关机,导致docker报错 /usr/bin/docker-current: Error response from daemon: shim error: docker-runc not installed on system. 解决办法 ln -s /usr/libexec/docker/docker-runc-current /usr/bin/docker-run
Docker容器镜像打成tar包 简述需求: 在现在容器上保存镜像进行打包,在另一台服务上使用 首先查看下现有要打tar包的容器 docker ps -a 接下来用commit参数进行保存镜像, -a 提交人的姓名 -m “提交内容”,格式如:docker commit -a -m 现有容器ID 保存后的名称:版本号 docker commit -a "tmf" -m "tmf-web" 7740db56288a tmf-web:v20191123 接下来查看下镜像是否出现: docker images 然后save参数进行打包,格式如:docker save -o 要打镜像包名称 镜像 docker save -o tmf-web20191123.tar tmf-web:v20191123 然后把打好的包传到另外一台服务器上进行部署或者升级操作 首先进行load进行导出镜像操作 load:导入使用 docker save 命令导出的镜像。 docker load -i tmf-web20191123.tar 然后查看是否出现镜像 docker images 然后把刚导入的镜像进行打标签,目的就是把刚刚导入的镜像归到某个镜像仓库里(所谓的仓库即:docker.oa.com:8080/tmf/ 然后再加上你要使用的镜像名称:版本号 docker tag tmf-web:v20191123 docker.oa.com:8080/tmf/tmf_web:v20191123 然后把镜像push推送到仓库 docker push docker.oa.com:8080/tmf/tmf_web:v20191123
作者:南辞、归
本博客所有文章仅用于学习、研究和交流目的,欢迎非商业性质转载。
博主的文章没有高度、深度和广度,只是凑字数。由于博主的水平不高,不足和错误之处在所难免,希望大家能够批评指出。
博主是利用读书、参考、引用、抄袭、复制和粘贴等多种方式打造成自己的文章,请原谅博主成为一个无耻的文档搬运工!