少女祈祷中...

Docker的安装

卸载旧版本

1
2
3
sudo apt-get remove docker \
docker-engine \
docker.io

使用apt安装

1
sudo apt-get install docker-ce docker-ce-cli containerd.io docker-compose-plugin
  • 或者我这是没有上述的docker-ce等包,所以就安装了docker-io,但也能用。

运行镜像

  • 如果本地没有镜像会远程拉取。

    1
    docker run hello-world
  • 然后在2024年的今天,在国内基本已经不能如此拉取了。甚至连几个大的镜像站也关闭了。因此需要添加其他的镜像站。

  • 添加到/etc/docker/daemon.json,如果没有这个文件就创建一个。

    1
    vim /etc/docker/daemon.json

输入以下内容并保存

1
2
3
4
5
{
"registry-mirrors": [
"https://docker.m.daocloud.io"
]
}

Docker的操作

基础操作

  • 查看的Docker版本

    1
    docker --version
  • 查看Docker信息

    1
    docker info
  • 查看已有的镜像

    1
    docker images
  • 查看正在运行的容器

    1
    docker ps -a

    查看正在运行的容器

  • 关闭/打开正在运行的容器。CONTAINER IDNAMES为刚刚看到的容器属性,用哪个都行。

    1
    2
    docker stop <CONTAINER ID> <NAMES>
    docker start <CONTAINER ID> <NAMES>
  • 进入已经打开了的容器,CONTAINER IDNAMES为之前看到的容器属性,用哪个都行。

    1
    docker attach <CONTAINER ID> <NAMES>
  • 退出但不关闭容器

    1
    2
    3
    4
    // 输入Ctrl P Q

    //退出并关闭容器
    exit
  • 修改容器名称

    1
    docker rename 原容器名称 新容器名称

    修改容器名称

  • 删除容器。CONTAINER IDNAMES为刚刚看到的容器属性,用哪个都行。

    1
    2
    docker rm <CONTAINER ID> <NAMES>
    docker rm <CONTAINER ID> <NAMES>

打包和导入导出镜像

  • 将容器打包为镜像

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    docker commit -m "What you did to the image" -a "Author Name" container_id repository/new_image_name

    /*
    * 参数说明
    * 参数说明:
    * commit:提交命令
    * -m:提交的注释
    * -a:作者的名字
    * container_id:容器的id
    * repository/new_image_name:作者自定义的库名(一般和用户名一致)/镜像名 */

    容器打包为镜像

  • 导出容器的镜像,CONTAINER ID为之前看到的容器属性。

    1
    2
    3
    4
    docker export CONTAINER ID  > 路径/文件名.tar

    //导出多个容器镜像为一个压缩包
    docker save CONTAINER ID CONTAINER ID CONTAINER ID > 路径/文件名.tar
  • 导入镜像

    1
    2
    3
    4
    docker import - 仓库:名称 < 路径/文件.tar

    //从一个压缩包导入多个容器镜像
    docker load --input 路径/文件名.tar
  • 启动导入的镜像,COMMAND是之前看到的镜像的一个属性。

    1
    docker run 镜像id COMMAND

直接下载镜像

  • 直接下载镜像而不下载docker。这么一来就不用过多担心国内无法拉取docker镜像的问题。完全可以直接挂梯子拉下来然后再导入进去。(为什么不直接挂代理拉下来呢)

  • 不过需要注意的是,拉下来后的导入应该使用load而不是import

参考文章