This is my study note of docker.

简介

  • 什么是docker?
    docker镜像类似一个集装箱,你可以把你需要完成的所有任务(即所有代码以及代码运行需要的环境)全部打包到这个集装箱内部。需要的时候直接开启这个
    “集装箱”,在集装箱内部完成你的任务(即在打包好的环境里面运行你需要的代码)。docker就是管理这些docker镜像的码头,你可以使用docker进行导出、
    载入、开启、关闭镜像等操作。

  • 什么场景需要docker?
    当你需要在其他PC上或者其他嵌入式开发板上运行当前的工程时,往往需要为这个工程配置繁杂的环境,有些环境的配置还很可能出现问题,这种情况下,
    可以在当前你的设备上将工程需要的环境打包为docker镜像,在目标设备上安装这个镜像,就可以在目标设备上直接运行你的项目了。

  • docker解决的问题?
    1.首先,如上述所述解决了项目的环境问题,即镜像中的环境与设备上的环境是隔离开的,我们只需要保证镜像是我们自己工程所依靠的镜像即可。
    2.隔离,docker在启动的时候已经限制好使用的最大CPU硬盘,所以就算当前设备因为某些问题资源被吃满了,docker还是可以保证自己内部程序
    运行不受影响,完成了隔离运行资源的操作。

  • 镜像和容器?
    什么是镜像?
    镜像是一个独立的、可执行的软件包,它包含了运行特定应用程序所需的所有内容,包括代码、运行时环境、库、依赖项等。镜像可以看作是一个只读模板,用于创建容器。
    什么是容器?
    容器其实就是基于镜像创建的一个运行实例,当创建一个容器时,Docker会根据镜像的定义,在其上添加一个可写层,用于存储容器运行过程中的修改。容器可以被看作是一个隔离的运行环境,其中应用程序可以在相对独立的环境中运行,不受宿主机环境的影响。
    所以说,镜像是容器的基础,容器是镜像的实例。

安装

  • 首先更新软件源
    1
    2
    sudo apt update
    sudo apt upgrade
  • 安装docker依赖
    1
    apt-get install ca-certificates curl gnupg lsb-release
  • 添加Docker官方GPG密钥
    1
    curl -fsSL http://mirrors.aliyun.com/docker-ce/linux/ubuntu/gpg | sudo apt-key add -
  • 添加docker软件源
    1
    sudo add-apt-repository "deb [arch=amd64] http://mirrors.aliyun.com/docker-ce/linux/ubuntu $(lsb_release -cs) stable"
  • 安装
    1
    apt-get install docker-ce docker-ce-cli containerd.io
  • 配置用户组
    (这个操作可选,一般安装完以后命令行可以直接用命令了,我是由于vscode的docker插件无法自动识别到镜像,所以才配置的)
    1
    sudo usermod -aG docker $USER
    (注:重新登录才能使更改生效)
  • 运行docker
    1
    systemctl start docker
  • 安装工具
    1
    apt-get -y install apt-transport-https ca-certificates curl software-properties-common
  • 重启docker
    1
    service docker restart
  • 验证
    1
    sudo docker run hello-world 
    Alt text

常见操作

镜像操作

  • 搜索镜像
    1
    2
    docker search + 镜像名
    例:docker search centos #从docker hub中搜索docker名为centos的镜像
  • 拉取镜像(需要梯子)
    1
    2
    3
    docker pull + 镜像名
    例:docker pull centos
    # 报错TLS handshake timeout是网络原因导致超时,尝试多pull几次,同时pull操作默认下载latest,即最新版。
    不过使用pull经常需要梯子,否则就是自己使用支付宝账号去获取阿里云docker加速地址,并配置/etc/docker/daemon.json
    1
    2
    3
    4
    5
    6
    {
    "registry-mirrors": ["加速地址"]
    }

    systemctl daemon-reload #启动配置
    systemctl restart docker #重启docker服务
  • 查看镜像
    1
    docker images    # 查看已有镜像
  • 查看镜像的详细信息
    1
    2
    docker inspect + IMAGE ID
    # 查看指定ID的镜像信息
  • 载入镜像(推荐)
    1
    2
    # 如果由于网络问题,pull不下来,可以去载其他人分享的镜像,使用load操作载入
    docker load -i + 镜像地址
  • 删除镜像
    1
    docker rmi 镜像名[标签]    # 删除镜像
  • 添加镜像标签
    1
    docker tag 旧[标签] 新[标签]   # 旧标签重命名新标签
  • 导出镜像
    1
    docker save -o 导出路径

容器操作

  • 查看容器
    1
    docker ps
  • 运行容器
    1
    docker run -itd 镜像名[标签] /bin/bash
  • 查看命令信息
    1
    docker command --help    # 查看命令具体的信息
  • 创建容器
    1
    docker create -it 镜像名 /bin/bash
  • 启动容器
    1
    docker start 容器ID/名称
  • 停止容器
    1
    docker stop 容器ID/名称
  • 删除容器
    1
    docker rm 容器ID/名称
  • 进入容器
    1
    docker exec -it id号/名称 /bin/bash
  • 容器导出
    1
    2
    3
    docker export 容器ID/名称 > 文件名
    例如:
    docker export 2592d3fad0fb > nginxtar
  • 宿主机与容器文件复制
    1
    2
    3
    4
    docker cp 文件路径  容器id:目录
    例:
    docker cp ./text.txt 38b5218ca96f:/opt
    # 将text.txt文件复制到容器内部的/opt下

使用范例

  • ①pull或load镜像

    1
    1.pull镜像

    Alt text

    1
    2.load镜像

    Alt text

  • ②查看镜像ID

    1
    可以看到镜像ID为ba6acccedd29

    Alt text

  • ③开启容器

Alt text

1
使用run命令开启镜像后,一定要使用docker ps查看镜像开启没有,同时记住“CONTAINER ID”,用于进入容器
  • ④进入容器

Alt text

1
此时可以看到。我们已经用root权限进入镜像中,后续就可以自己使用了,退出镜像则使用exit就可退出。

修改默认根目录

由于docker默认的安装目录是根文件夹下,因此很容易将我们的根文件夹内存占用满,我们可以采用以下方法将安装目录移动至指定目录下。

  • 首先,关闭docker服务
    1
    service stop docker
  • 其次,将docker 安装目录移动到指定目录下
    1
    2
    3
    4
    5
    6
    7
    8
    1.docker 主要目录在 /var/lib/docker
    (建议是最好先复制一份,以防操作失误:cp -rip /var/lib/docker /var/lib/docker_bac)
    2.将文件移动到你指定的文件夹
    mv /var/lib/docker /legrand/software
    3.创建软连接
    ln -s 新docker文件夹 旧docker文件夹(/var/lib/docker)
    4.重启docker测试
    service docker start