docker常用命令1

基于工作经验总结:

Docker常用命令:
docker 库说明文档:
https://docker-py.readthedocs.io/en/stable/containers.html#
Docker容器日常操作命令 - 运维笔记:
https://www.cnblogs.com/kevingrace/p/5715326.html
https://blog.csdn.net/hxpjava1/article/details/78305610 

1.查看容器的root用户的密码
docker logs <容器名or ID> 2>&1 | grep '^User: ' | tail -n1

2.查看容器日志
docker logs -f <容器名or ID>
3.查看运行容器
docker ps
docker ps -a

4.删除所有容器

docker rm $(docker ps -a -q)

5.删除单个容器

docker rm  <容器名or ID>

docker stop  <容器名or ID>

docker start  <容器名or ID>

docker kill  <容器名or ID>
6.查看全部镜像

docker images
7.删除所有镜像

docker rmi $(docker images | grep none | awk '{print $3}' | sort -r)

8.运行镜像

#docker run -d -h -p 'gtest008' --name=gtest007 ghp_no_ssh_pwd:3.1 /usr/sbin/sshd -D
#docker run -idt -p 8104:22 -h gt03 ghp_no_ssh_pwd:3.2 /usr/sbin/sshd -D
特权方式启动容器
#docker run -it --privileged=true -v /test:/soft ghp_no_ssh_pwd:3.1 /bin/bash
带描述信息的容器
#docker run --name dbdata ghp_no_ssh_pwd:3.1 echo "Data-only container for ghp_no_ssh_pwd"

#增加ib网络映射和cuda映射

docker run -itd --shm-size=256G --name zhang_test  --privileged=true -v /etc/libibverbs.d:/etc/libibverbs.d \

-v /usr/local/ib_lib64/:/usr/local/ib_lib64/ -v /home:/home -v /data:/data -v /am:/am \

-v /var/lib/nvidia-docker/volumes/nvidia_driver/396.37/:/usr/local/nvidia \

-v /dafs/userdata/:/dafs/userdata/ -v /dafs/groupdata/:/dafs/groupdata/ --network=host  --entrypoint=/bin/bash \

-itd reg.test.com/dltp/pytorch_1.2_cuda_9.2_test:latest


9.docker日志路径和查看


ls  
10.附加容器
docker exec -it 容器ID /bin/bash
docker exec -it --user root 容器ID /bin/bash
docker attach 容器ID 
通过nsentr进行:
docker inspect --format "{ {.State.Pid}}" 容器名称
docker inspect --format "{ {.State.Pid}}" test09.mu01
docker inspect --format "{ {.State.Pid}}" ghp1001
然后给据容器进程的id,进入容器内
nsenter --target PID --mount --uts --ipc --net --pid
nsenter --target 187555 --mount -U -S 1001 --uts --ipc --net --pid
nsenter --target 372965 --mount -U -S 1001 --uts --ipc --net --pid
nsenter -n -t 372965
11.查看容器挂载信息:
docker inspect 容器ID
  "Mounts"{}
12.镜像导入导出

#docker export 容器ID > update.tar
#docker import - update < update.tar
#docker save -o update1.tar 镜像名称
#docker load < update1.tar
# commit的过程中会导致容器paused状态,导致应用暂停
# docker commit -a="作者" -m="注释" 83a01b6fd52a ubuntu1604_cuda8:0.1

压缩镜像导出:
docker save umts-ubuntu-1804-arm64:2.2 | gzip -9 > /data/umts-ubuntu-1804-arm64.tar.gz
压缩镜像导入:gunzip -c /data/umts-ubuntu-1804-arm64.tar.gz | docker load 

更高压缩比:
备份镜像:docker save umts-ubuntu-1804-arm64:2.2  |  7za a -si  umts-ubuntu-1804-arm64.tar.7z
还原镜像:7za x -so umts-ubuntu-1804-arm64.tar.7z | docker load

加载tar包
docker ubuntu.tar | sudo docker import - test/ubuntu:v1.0


13.镜像删除
 #docker rmi update

14.长时间运行容器:
#!/bin/bash
while true
do
sleep 10s
done
/inspur/caffe-caffe-0.15/build/tools/caffe train --solver=solver.protext --gpu=0
537  docker cp 154e1da151cd:/root/* /home/12381/*
808  docker cp v1-20180503.tar.gz 154e1da151cd:/opt/
14.查看容器物理进程:
  #docker inspect 容器ID State.Pid
  docker inspect test09.mu01 | grep State.Pid 

15.为容器抓包: 

// 1、找到容器ID,并打印它的NS ID
docker inspect --format "{ {.State.Pid}}" 16938de418ac
// 2、进入此容器的网络Namespace
nsenter -n -t 54438
查看网络连接:
netstat -aulntp
// 3、抓DNS包
tcpdump -i eth0 udp dst port 53 | grep youku.com

 
16.镜像仓库命令:

[root@gpu145-1080ti ~]# docker login 仓库地址  账号 密码
[root@gpu145-1080ti ~]# docker images
docker build --build-arg USERNAME=账号 --build-arg PASSWORD=密码 -f=Dockerfile_cmptoolrelease -t="reg.lechange.com/dahuadltp/cmptool_release_dlcp:v2.2".


17.docker system df命令,类似于Linux上的df命令,用于查看Docker的磁盘使用情况:
docker system df

TYPE                TOTAL               ACTIVE              SIZE                RECLAIMABLE
Images              147                 36                  7.204GB             3.887GB (53%)
Containers          37                  10                  104.8MB             102.6MB (97%)
Local Volumes       3                   3                   1.421GB             0B (0%)
Build Cache                                                 0B                  0B
可知,Docker镜像占用了7.2GB磁盘,Docker容器占用了104.8MB磁盘,Docker数据卷占用了1.4GB磁盘。

18.docker system prune命令可以用于清理磁盘,删除关闭的容器、无用的数据卷和网络,以及dangling镜像(即无tag的镜像)。docker system prune -a命令清理得更加彻底,可以将没有容器使用Docker镜像都删掉。注意,这两个命令会把你暂时关闭的容器,以及暂时没有用到的Docker镜像都删掉了……所以使用之前一定要想清楚吶。
执行docker system prune -a命令之后,Docker占用的磁盘空间减少了很多:

docker system df

19. 手动清理Docker镜像/容器/数据卷
对于旧版的Docker(版本1.13之前),是没有Docker System命令的,因此需要进行手动清理。这里给出几个常用的命令:
删除所有关闭的容器:
docker ps -a | grep Exit | cut -d ' ' -f 1 | xargs docker rm
删除所有dangling镜像(即无tag的镜像):
docker rmi $(docker images | grep "^<none>" | awk "{print $3}")
删除所有dangling数据卷(即无用的Volume):
docker volume rm $(docker volume ls -qf dangling=true)

20. 限制容器的日志大小
有一次,当我使用1与2提到的方法清理磁盘之后,发现并没有什么作用,于是,我进行了一系列分析。
在Ubuntu上,Docker的所有相关文件,包括镜像、容器等都保存在/var/lib/docker/目录中:
du -hs /var/lib/docker/
97G /var/lib/docker/
Docker竟然使用了将近100GB磁盘,这也是够了。使用du命令继续查看,可以定位到真正占用这么多磁盘的目录:
92G  /var/lib/docker/containers/a376aa694b22ee497f6fc9f7d15d943de91c853284f8f105ff5ad6c7ddae7a53
由docker ps可知,Nginx容器的ID恰好为a376aa694b22,与上面的目录/var/lib/docker/containers/a376aa694b22的前缀一致:
docker ps
CONTAINER ID        IMAGE                                       COMMAND                  CREATED             STATUS              PORTS               NAMES

a376aa694b22        192.168.59.224:5000/nginx:1.12.1            "nginx -g 'daemon off"   9 weeks ago         Up 10 minutes                           nginx
因此,Nginx容器竟然占用了92GB的磁盘。进一步分析可知,真正占用磁盘空间的是Nginx的日志文件。那么这就不难理解了。我们Fundebug每天的数据请求为百万级别,那么日志数据自然非常大。
使用truncate命令,可以将Nginx容器的日志文件“清零”:
truncate -s 0 /var/lib/docker/containers/a376aa694b22ee497f6fc9f7d15d943de91c853284f8f105ff5ad6c7ddae7a53/*-json.log
当然,这个命令只是临时有作用,日志文件迟早又会涨回来。要从根本上解决问题,需要限制Nginx容器的日志文件大小。这个可以通过配置日志的max-size来实现,下面是Nginx容器的docker-compose配置文件:
nginx:
image: nginx:1.12.1
restart: always
logging:
driver: "json-file"
options:
max-size: "5g"
重启Nginx容器之后,其日志文件的大小就被限制在5docker.serviceGB,再也不用担心了~

21.暂停和恢复容器运行
docker pause :暂停容器中所有的进程。
docker unpause :恢复容器中所有的进程。
22.centos7.3下配置文件路径:
/etc/systemd/system/docker.service
使用命令查看docker的systemd配置:
cat /usr/lib/systemd/system/docker.service
可以看到systemd启动的配置文件是由环境变量获得的。而环境变量是在/etc/sysconfig/docker,/etc/sysconfig/docker-storage,/etc/sysconfig/docker-network内,可以依次查看。
系统配置:
cat /lib/systemd/system/docker.service
修改授权文件:

[root@gpu92-2080ti userdata]# cat /root/.docker/config.json

{
         "auths": {
                   "jinn.mirror.com": {
                            "auth": "秘钥"
                   }
         },
         "HttpHeaders": {
                   "User-Agent": "Docker-Client/18.09.4 (linux)"

         }
}
重新加载配置文件
systemctl daemon-reload
启动docker
systemctl start docker

猜你喜欢

转载自blog.csdn.net/huapeng_guo/article/details/130711357