docker基本命令日志
https://docs.docker.com/engine/reference/commandline
docker run
Run a command in a new container
启动一个新的容器,一般在docker pull之后首次运行此image
-i 保持stdout打开
-t 打开一个tty
-d 后台运行, 不加-d时运行完可能会自动结束
Ctrl+P+Q 退出tty并保持后台运行
对于没有启动CMD的image,或者CMD执行时间太短, 默认docker run一闪而过, 这时应该使用docker -it xxx
启动,不要加-d
run的时候可以直接在后面加命令,
比如 docker run -it redis redis-cli -h 127.0.0.1
docker run -it redis bash
, 会生成随机container名字 --rm
运行之后自动删除
自动化清理集群脚本
aa=$(docker run -it --rm redis redis-cli -h 192.168.1.20 -p 26379 SENTINEL get-master-addr-by-name myxmaster | grep '1)' | awk '{print $2}' | tr -d '\r"')
docker run --rm redis redis-cli -h $aa -a xxxx flushall
docker start
Start one or more stopped containers
新的容器退出后(比如关机重启了),如果仍然使用docker run xxxx的话,以前的操作内容不会保存。此时可以使用docker start启动历史的容器
上图中使用了两次run mongo, 因此有两个container id, 使用docker start仍能看到历史数据.
docker restart
重启一个运行中的容器
docker exec
Run a command in a running container
容器启动后,使用docker ps获得运行中的容器id, 然后使用docker exec进入此运行中的容器。如果有多个参数,不要加“”
后台运行使用-d, 不是使用&
docker top
显示容器内运行中的进程
docker stats
查看容器内存使用量 + 线程数, 相当于linux shell 中的TOP /iostat
多个container时 按memory大小排序
![](https://img2022.cnblogs.com/blog/1281466/202207/1281466-20220726154447400-839154683.png)
docker commit
Create a new image from a container's changes
在容器的基础上创建新的image, 可以指定自己的imageName:tag。
docker build
从DockerFile创建image, DockerFile中可以使用apt|yum安装特定的软件
docker build -f ./Dockerfile -t registry-qa.com/data-service:latest .
docker push
-Push an image or a repository to a registry
将自己的image推到仓库,方便分享
podman push registry-qa.com/data-service:test
push的时候是带域名和tag的, 可以指定仓库地址
docker image prune
Remove unused images
清理磁盘空间
还有其他类型的prune命令:
https://docs.docker.com/engine/reference/commandline/system_prune/
docker system prune
docker network ls/ inspect
查看桥接后的内网ip
启动时使用host网络, docker run --network=host
启动后连接bridge网络,不适用连接host网络
docker compose中自动生成的网络名是xxx-default
, 和bridge
不在一个网段上, 可以使用docker network connect bridge xxx-container
生成bridge的子网ip。
使用docker inspect可以看到两个内网ip
比如:
卷挂载 -保存历史数据的另一种方法 https://www.cnblogs.com/lighten/p/6900556.html
容器编排,批量启动?
docker inspect
可以查看image中的CMD,entrypoint
也可以查看container中的一些信息
关于entrypoint, CMD
entrypoint:是可以覆盖掉baseImage中的entrypoint, 一个image只有一个entrypoint
CMD可以有多个?
docker logs
结果包含了stderr stdout的内容,比如nginx container的access/error日志默认就是映射到/dev/stdout /dev/stderr
可以通过docker inspect xxxx | grep log
找到宿主机的真实日志文件
如果docker run xxx后container闪退, 可以使用docker logs xxx-container-id查看报错日志
可以使用docker run -v指定目录的挂载 -v xxxx:/var/logs/nginx/error.log
默认日志文件大小5*20M=100M
https://docs.docker.com/config/containers/logging/json-file/ daemon.json中配置
docker logs -f containerx
docker inspect nginx | grep log
"LogPath": "/var/lib/docker/containers/b43d99c4ce8ccd4ff97599dedb42b9166a0c46221a0f0e0a40a400e9cca5964f/b43d99c4ce8ccd4ff97599dedb42b9166a0c46221a0f0e0a40a400e9cca5964f-json.log"
docker compose挂载示例:
启动失败:
[root@ppsj1pwb001 config]# docker-compose
docker-compose: error while loading shared libraries: libz.so.1: failed to map segment from shared object: Operation not permitted
[root@ppsj1pwb001 config]#
[root@ppsj1pwb001 config]# sudo mount /tmp -o remount,exec
检查`/etc/fstab`是不是有问题 `UUID=e163a2f5-9a50-48ce-9e90-d0199ab8e314 /tmp xfs defaults,noexec,nosuid,nodev 0 0`
docker stats
显示container 当前资源状态, 有时候容器卡住了, docker exec -it sh
又登录不了 可以通过这个查看原因
现象:内存太小,导致jvm频繁full gc
docker login
有些image下载需要认证, 这个命令后面是可以加仓库地址的,比如cs.xxx.aliyun.com, 默认是docker.io
podman
https://www.redhat.com/sysadmin/podman-windows-wsl2
https://download.opensuse.org/repositories 网速坑爹,国内镜像不包含repositories仓库,只能用德国的镜像站了 https://mirrors.opensuse.org/
使用cgroupfs替换systemd, 这样在WSL中可以直接启动image了,不用安装docker desktop
cp /usr/share/containers/containers.conf /etc/containers/