前言

基础操作

查看状态

  • 查看docker 镜像sudo docker images
  • 查看docker 容器sudo docker ps
  • 查看某一容器详细信息:sudo docker inspect 容器id/容器名称

将镜像变为容器

  • 创建并运行容器:docker run --name containerName -p 80:80 -d imageName
    • docker run:创建并运行一个容器
    • --name:给容器起一个名字,比如叫做containerName
    • -p:将宿主机端口与容器端口映射,冒号左侧是宿主机端口,右侧是容器端口
    • -d:后台运行容器
    • imageName:镜像名称,通过sudo docker images查询到的REPOSITORY,如Nginx
  • 运行ubuntucentos等系统容器时,需要指定-t参数,否则容器启动后,就会变成Exited状态
    • 例如:sudo docker run -t --name mycentos -d centos:latest
    • -t:启动一个伪终端

将容器变为镜像

  • sudo docker commit <CONTAINER ID> <REPOSITORY:TAG>
    • 例如:sudo docker commit 94b09ba29874 123456.bak:latest

将镜像打包

  • 将指定镜像保存成 tar 归档文件

  • sudo docker save -o <归档文件名称> <IMAGE ID>

    • 例如:sudo docker save -o 123456.tar.gz 6810c1248c62

导入docker镜像

  • 导入docker save 保存的归档文件

  • sudo docker load < <归档文件名称>

    • 例如:sudo docker load < 123456.tar.gz

删除 docker 镜像

  • sudo docker rmi <REPOSITORY:TAG>
    • 例如:sudo docker rmi 123456.bak:latest

从容器中拷贝文件至本地

  • sudo docker cp <容器名称或ID>:<容器内文件路径> <本地主机目标路径>
    • 例如:sudo docker cp my-container:/app/data.txt /tmp

从本地拷贝文件至容器

  • sudo docker cp <本地文件路径> <容器名称或ID>:<容器内目标路径>
    • 例如:docker cp /tmp/data.txt my-container:/app

使用bash进入容器操作

  • 创建容器并进入sudo docker run -it --name containeName imageName bash
    • 例如:sudo docker run -it --name mycentos centos bash
  • 进入已经运行的容器sudo docker exec -it [容器名称] bash
    • 例如:sudo docker exec -it mycentos bash

实际问题与解决

是否可以修改镜像内容?

  • 不能修改原镜像,只能通过将原镜像变成容器,对容器修改后,保存为新镜像

  • 用到了再写具体操作如下

docker容器中是否可以再次安装docker?

  • 可以,但没尝试

如何修改docker容器的启动/运行参数(ENV)

背景

  • 背景:实验室机器断电下线后,重启后,GPU有块掉线
  • 使用sudo docker ps未查看到运行中的容器,用sudo docker ps -a发现所有容器状态均为Exited
  • 使用sudo journalctl -xesudo systemctl status docker查看状态,察觉到报错与找不到显卡device有关

解决

  1. 随便找一个容器进行尝试,通过sudo docker ps -a,记下容器id
  2. 关闭dockersudo systemctl stop docker
  3. 修改config.v2.json,位置在/容器安装位置/containers/容器id中,如/home/docker/容器id/config.v2.json,修改对应DEVICE参数
  4. 重启dockersudo systemctl start docker
  5. 发现容器可正常进入使用

参考

  1. docker 修改容器env配置

参考

  1. 阮一峰:Docker 入门教程
  2. docker查看运行容器详细信息