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大小排序

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

https://docs.docker.com/network/host/#:~:text=The host networking driver only works on Linux,--network host to the docker service create command.

启动时使用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/

posted @ 2018-06-09 20:49  funny_coding  阅读(2069)  评论(0编辑  收藏  举报
build beautiful things, share happiness