--- template: overrides/blogs.html tags: - docker --- # Docker踩坑日记 !!! info 作者:Void,发布于2021-12-09,阅读时间:约6分钟,微信公众号文章链接:[:fontawesome-solid-link:]() ## 1. 前言 我们平常也会使用Docker跑一些服务,但使用的功能只是全部功能的一小部分。Docker本身功能很多,命令也很多。作为一个非专业的开发人员,谨以此文记录下我在其中踩过的坑。 ## 2. 踩坑 ### 2.1 启动容器 Docker容器后台运行,必须有一个持久的前台进程。否则的话,容器会自动退出。 常见的做法是我们在Dockerfile中用CMD或是ENTRYPOINT声明我们要跑的命令。或是我们在Docker run的时候在后面声明命令。但是,有的时候我们的命令可能没法简单地写在这里。 这时,我们可以以守护进程的方式启动容器。 ```shell docker run -itd 镜像id ``` 通过以下命令,我们可以进入容器。 ```shell docker exec -it 容器id /bin/bash ``` 在容器中,我们就可以自由地执行我们的命令了。 最后我们用Ctrl+P+Q退出容器,但不关闭容器。 ### 2.2 文字编辑器 原生的Linux环境可能没有文字编辑器。我们可以通过cat > file将内容贴到文本中,但是这种方式十分不友好。 Vim是常用的Linux下的文字编辑器。我们可以通过如下命令安装Vim。 ```shell apt-get update apt-get install vim ``` ### 2.3 查看容器状态 查看容器内运行的进程: ```shell docker top 容器id ``` 对于不想要的进程,我们可以使用如下命令结束进程: ```shell kill -9 PID ``` 查看容器内运行进程的log ```shell docker logs -f -t --tail 20 容器id ``` ### 2.4 清理无用的数据卷 我们往往会使用Docker创建、删除容器。长此以往,容器挂载的数据卷容易产生一些僵尸文件(未绑定容器等)。 我们可以使用如下命令找到僵尸文件: ```shell docker volume ls -qf dangling=true ``` 并删除这些僵尸文件。 ```shell docker volume rm $(docker volume ls -qf dangling=true) ``` ## 3. 总结 这些只是作者在使用Docker过程中踩过的坑,学到的知识,并没有面面俱到。Docker仍有不少探索的空间。 希望读者能少踩一些坑,少碰到一些Bug。