0%

Docker常用命令

查看版本和帮助

1
2
3
4
5
6
7
8
9
# 查看版本
docker version

# 查看帮助
docker

# 查看docker start帮助
docker start --help
docker help start

镜像查找下载

github是存储代码的仓库,而docker hub是存储docker镜像的仓库。

docker hub上面的镜像命名方式为:
<username>/<imagename>:<tag>,比如voidking/nginx:v1.0
其中 tag 可以省略,省略则默认使用 latest 。

有一类比较特殊的镜像,经过官方的验证值得信任,命名方式为:
<imagename>:<tag>,比如 busybox:1.25

1、查找镜像
方法一:在docker hub上查找镜像,直接搜索即可
方法二:使用命令行的工具搜索,例如搜索 busybox 镜像

1
2
docker search busybox
curl -s "https://registry.hub.docker.com/v1/repositories/busybox/tags" | jq -r .[].name


2、通过docker命令下载镜像,例如下载 busybox 镜像
docker pull busybox:1.25

3、查看本地镜像
docker images

创建/启动容器

怎样创建/启动一个容器,并让它保持运行呢?
答:在启动容器时,指定一个长期运行的前台进程作为1号进程。
例如:
docker run --name vk-busybox -d busybox:1.25 sleep 3600
以上命令的含义:

  • docker run 表示启动一个容器
  • –name 指定容器名为 vk-busybox
  • -d 表示后台运行容器,并返回容器id
  • busybox:1.25 是镜像名
  • sleep 是1号进程,3600是sleep的参数

启停容器

1、怎样停止一个正在运行的容器?
docker stop vk-busybox

2、怎样再次运行一个已经停止的容器?
docker start vk-busybox

开机启动容器

通过 systemctl enable docker ,我们已经设置了docker程序的开机自启动。
怎样让我们的容器也开机自启动呢?答:使用restart参数。

1
2
docker run --restart=always vk-busybox
docker update --restart=always vk-busybox

查看容器

容器启动后,怎么查看这些容器?
答:使用docker ps命令或者docker inspect命令。

1、查看运行中的容器
docker ps

2、查看历史容器
docker ps -l

3、查看所有容器
docker ps -a

4、查看容器启动命令
docker ps --no-trunc

5、查看容器详细信息

1
2
docker inspect <container_name>
docker inspect <container_id>

查看容器日志

1、查看容器日志

1
2
docker logs <container_name>
docker logs --tail=100 <container_name>

2、查找容器日志
docker logs --tail=100 vk-busybox | grep xxx

管道符只对stdout有效,如果容器日志输出到了stderr,就会发现grep无效,这时就需要重定向。
docker logs --tail=100 vk-busybox 2>&1 | grep xxx

进入容器

容器启动后,怎样进入一个容器?
答:使用docker exec命令。
docker exec -it vk-busybox /bin/sh

修改容器并保存

进入容器后,我们对容器进行了修改,比如创建了一个文件 /tmp/test.txt 。
现在想要把这个容器保存成镜像,方便以后复用,该怎么操作?
答:使用docker commit命令,类似于git commit。

docker commit vk-busybox voidking/vk-busybox:v1.0
以上命令,把修改后的 vk-busybox 容器保存成了镜像 voidking/vk-busybox:v1.0 。
docker commit时,除了使用容器名称,也可以使用容器id。

分享镜像

我们在本地保存了 voidking/vk-busybox:v1.0 镜像,怎样把它分享出去?
答:使用docker push命令,类似于git push。
docker push voidking/vk-busybox:v1.0
该命令把 voidking/vk-busybox:v1.0 镜像推送到 docker hub,所属账户为 voidking 。

记得push前,需要docker login,进行登录鉴权。

修改镜像名

修改镜像名,上传到自己的镜像仓库

1
2
3
docker tag voidking/vk-busybox:v1.0 harbor.voidking.com/voidking/vk-busybox:v1.0
docker login harbor.voidking.com
docekr push harbor.voidking.com/voidking/vk-busybox:v1.0

如果报错:Get https://harbor.voidking.com:80/v2/: http: server gave HTTP response to HTTPS client
那么可以通过修改docker配置解决:
1、修改/etc/docker/daemon.json,添加

1
2
3
{
"insecure-registries": ["harbor.voidking.com:80"]
}

2、重启docker

1
2
systemctl daemon-reload
systemctl restart docker

删除容器和镜像

删除单个容器

1
2
docker rm <container_name>
docker rm <container_id>

删除所有容器
docker rm $(docker ps -a -q)

删除单个镜像

1
2
3
4
docker rmi <image_name>
docker rmi <image_id>
docker rmi <image_name> -f
docker rmi <image_id> -f

删除所有镜像
docker rmi $(docker images -q)

删除停止的容器、删除没有被使用的网络、删除没有被使用的镜像、删除构建产生的缓存

1
2
3
docker system prune
docker system prune -a
docker system prune -f

删除以上内容,同时删除没有被使用的volumes
docker system prune -a --volumes

删除没有被使用的volumes
docker volume prune

删除停止的容器
docker container prune

删除没有被使用的镜像
docker image prune

删除没有被使用的网络
docker network prune

删除所有悬空镜像(没有名称的镜像),不删除未使用镜像
docker rmi $(docker images -f "dangling=true" -q)

删除未使用镜像和悬空镜像
docker rmi $(docker images -q)

删除没有被容器使用的卷
docker volume rm $(docker volume ls -qf dangling=true)

删除所有已退出的容器
docker rm -v $(docker ps -aq -f status=exited)

删除所有状态为dead的容器
docker rm -v $(docker ps -aq -f status=dead)

拷贝文件

怎样在宿主机和容器之间互相拷贝文件?答:使用docker cp命令。
docker cp /tmp/test.txt vk-busybox:/tmp

查看容器id和容器进程

查看容器进程ID

1
2
3
docker ps
docker top vk-busybox
docker inspect vk-busybox | grep pid -i

查看容器进程的namespace

1
2
ll /proc/$$/ns
ll /proc/<pid>/ns

在容器net namespace执行命令(需要宿主机上有route命令)

1
2
3
nsenter -t <pid> -n ip add
nsenter -t <pid> -n route -n
nsenter -t <pid> -n iptables -A OUTPUT -p tcp --dport 7535 -j DROP

书签

什么是Docker?

docker入门教程

Docker入门实战

中国第一套Docker实战案例视频课程(入门到高级)

Docker实战案例源码

Docker实战案例文档

  • 本文作者: 好好学习的郝
  • 本文链接: https://www.voidking.com/dev-docker-command/
  • 版权声明: 本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!源站会及时更新知识点及修正错误,阅读体验也更好。欢迎分享,欢迎收藏~