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

 

posted @ 2022-03-08 17:21  四毛二(ت)  阅读(62)  评论(0编辑  收藏  举报
/* 鼠标点击求赞文字特效 */