跳转至

容器

查看容器

# 默认只显示运行的
docker ps  # 或者 docker container ls
'
CONTAINER ID   IMAGE     COMMAND       CREATED          STATUS                     PORTS     NAMES
5d3804c67526   ee_test   "bash"   23 minutes ago   Exited (0) 3 minutes ago             test
'
# 参数
'
-a 显示所有容器
-q 仅显示容器ID
-f key 过滤
  docker ps -aq -f ancestor=<镜像id/name>
  docker ps -aqf exited=0
--no-trunc 参数可以查看更完整的信息,即不会截断显示,比如完整ID和COMMAND等
'

docker stats <container_id>  # 查看容器实时资源占用
docker logs [-f] <container_id>  # 查看容器日志,-f实时打印
docker top <container_id>  # 查看容器进程
docker diff <container_id>  # 查看容器文件改动

# 重命名
docker rename name_old name_new

操作容器

# 完整的container_id有64个字符,可以只写前三位
docker start <container_id>  # 启动容器
docker restart <container_id>  # 重启
docker stop <container_id>  # 停止
docker pause <container_id>  # 暂停
docker unpause <container_id>  # 继续

# 删除容器
docker rm <container_id>
sudo docker rm -f <container_id>  # rm -f 强制删除正在运行的容器
sudo docker rm $(sudo docker ps -aqf exited=0)  # 删除所有Exited(0)状态的容器
sudo docker rm $(sudo docker ps -aqf ancestor=镜像名/id)  # 删除由某个镜像创建的所有容器

# 导出容器
docker export <container_id> > ubuntu.tar
# 导入容器
docker import http://example.com/exampleimage.tgz example/imagerepo

运行容器

容器共享了宿主机的内核

docker run --name test 镜像名:tag  # 不加tag默认执行latest版本的镜像
docker create ...  # 创建容器但不运行,用法同run
'
--name 指定容器名称

-e var 设置单值环境变量
--env key=value 设置k-v形式的环境变量

–restart=no  默认,不会自动重启
–restart=always 开机启动,失败也会一直重启,web容器一般用这个
–restart=on-failure:10 表示出错后重启,可以限制重启次数
'
# 运行容器并与之交互
'
-i 交互
-t 指定伪终端

-d/--detach 后台运行,默认返回容器ID,或者返回命令输出
--rm 容器退出时自动清理容器内部文件
'

sudo docker run --name demo01 python:3.9 bash  # 返回空,容器状态Exited
sudo docker run --name demo02 python:3.9 "python"  # 返回空,容器状态Exited
sudo docker run --name demo03 python:3.9 "python --version"  # 返回Python 3.9.13,容器状态Exited

sudo docker run -it --name demo11 python:3.9 bash  # 容器前台运行,退出后容器状态Exited
sudo docker run -it --rm python:3.9 bash  # 容器前台运行,退出后容器自动删除,此时没必要指定--name,随机就好

sudo docker run -dit --name demo13 python:3.9 bash  # 容器后台运行,容器状态UP
sudo docker exec -it demo13 bash  # 与运行中的容器进行交互,退出后容器还是UP状态
sudo docker attach demo13  # 将运行中的后台放到前台,退出后容器变为Exited状态
  • 还原启动容器时的参数
# 查看镜像或容器的元信息
docker inspect <container_id>
docker inspect -f='{{ .NetworkSettings.IPAddress }}' <container_id>  # -f 过滤信息,获取容器IP

'''
虽然可以通过docker inspect 分析json内容,但是不是很方便
此时可以借助第三方工具runlike
  pip安装:sudo pip install runlike
    如果没有pip就先安装pip:sudo apt install python3-pip
  或者直接docker运行:alias runlike="docker run --rm -v /var/run/docker.sock:/var/run/docker.sock assaflavie/runlike"
'''
runlike -p <container_id>
  • 复制数据
# 复制文件:从宿主机到容器
docker cp path/file <container_id>:path
# 复制文件:从容器到宿主机
docker cp <container>:path/file .

DinD

DinD, Docker inside Docker

docker pull docker:dind

广泛应用于 CI/CD 工作流程,它可以创建用于构建、测试和部署应用程序的独立的一次性环境,从而实现更快、更可靠的自动化管道。

在 Docker 中运行 Docker 允许开发人员创建专门为其应用程序量身定制的隔离环境。这可确保依赖项、配置和运行时环境在不同的开发阶段保持一致,从而更轻松地重现和调试问题。