官网:https://www.docker.com/
Github Docker 源码:https://github.com/docker/docker-ce
英文文档:https://docs.docker.com/
中文文档:https://www.dockerdocs.cn/index.html

下载步骤 略 。

Tips:

  • linux docker需要sudo权限,在安装后可以把用户加入Docker用户组
  • windows下载比较麻烦,需要wsl2以及其他虚拟机支持,不同docker版本的文件组织方式也有些微区别,在下载安装过程中,如果报错,确保您follow的教程是最新的!

验证安装成功,在命令行中输入

docker version

Get Started

Docker是介于虚拟环境与虚拟机之间的,提供程序运行容器的平台。Docker在应用程序开发中可为开发人员提供方便的标准化环境;在服务器部署时,Docker使您能轻松移植到不同服务器或虚拟机中;在深度学习环境配置时,也能通过Docker实现不同本机Cuda的隔离。

首先,我们需要明确几个术语:

  • Docker daemon: docker后台,是docker处理用户命令的应用程序
  • Images:映像,是用于构建Container的静态文件
  • Containers:容器,是用于运行程序的动态文件,可由Images构建
  • Registry:docker仓库,可从远程仓库下载Images文件
  • Dockerfile:docker脚本,可批量运行docker命令,常用于构建Images或Containers

docker-architecture.png

Step1: 配置Docker hub镜像源(选择一个即可,如果都不行了,请使用魔法)

Step2: 拉取镜像

docker pull [OPTIONS] [Docker Registry Address]<Image Name>[:Image Tag]

其中[]中的内容可以省略,<Image Name>:<Image Tag> 可以从Docker Registry(如Docker hub和其镜像)中查到,取决于您所需要的基础环境

如:在命令行中输入

docker pull ubuntu:18.04

Step3: 运行镜像

docker run [OPTIONS] <IMAGE NAME> [COMMAND] [ARG...]

注意,以上如果本地没有指定image文件,指令其实也能自动抓取image

如:

在后台执行

docker run ubuntu

or 在命令行执行

docker run -it ubuntu:18.04 /bin/bash
  • -it:这是两个参数,一个是 -i:交互式操作,一个是 -t 终端。我们这里打算进入 bash 执行一些命令并查看返回结果,因此我们需要交互式终端。
  • ubuntu:18.04:这是指用 ubuntu:18.04 镜像为基础来启动容器。
  • bash:放在镜像名后的是命令,这里我们希望有个交互式 Shell,因此用的是 bash

常用指令

Images

镜像体积

docker system df

列出镜像

docker image ls
  • 列出dangling image(同名镜像中,失去意义的旧镜像)

    docker image ls -f dangling=true
    # 删除它
    docker image prune
    
  • 列出中间层镜像(被上层镜像所依赖的,重复利用的镜像)

    docker image ls -a
    
  • 列出筛选的镜像

    # 通过 名称 筛选
    docker image ls ubuntu
    # 通过 名称:标签 筛选
    docker image ls ubuntu:18.04
    # 通过 过滤器 --filter 筛选
    docker image ls -f since=mongo:3.2
    
  • 格式化列出镜像

    docker image ls --format "{{.ID}}: {{.Repository}}"
    

删除镜像

docker image rm <参数>

其中参数可以是image ID、镜像名:标签、或镜像摘要(DIGEST)

Container

新建/启动

docker run [OPTIONS] <IMAGE NAME> [COMMAND] [ARG...]

以<IMAGE NAME>镜像新建/启动容器,其中启动选项为[OPTIONS],启动后执行命令[COMMAND] [ARG...]

OPTION Description
-i 以交互模式运行容器,通常与 -t 同时使用
-t 启动容器后,为容器分配一个命令行,通常与 -i 同时使用
-v 目录映射,容器目录挂载到宿主机目录,格式: :<容器目录>
-d 守护进程,后台运行该容器
-p 指定端口映射,格式:主机(宿主)端口:容器端口
-P 随机端口映射,容器内部端口随机映射到主机的端口
--name<image name> 容器名字
-m, --memory bytes 设置容器使用内存最大值
-h, --hostname string 指定容器的 host name
--dns 8.8.8.8 指定容器 dns 服务器
-e username="admin" 设置环境变量

如:

以ubuntu:18.04镜像构建容器,并输出"Hello world",之后终止容器(/bin/echo 'Hello world')

docker run ubuntu:18.04 /bin/echo 'Hello world'

以ubuntu:18.04镜像构建容器,在交互模式下(-i);分配命令行(-t);启动bash终端(/bin/bash)

docker run -it ubuntu:18.04 /bin/bash

以ubuntu:18.04镜像构建容器,命名为Myubuntu(--name);在交互模式下(-i);分配命令行(-t);将容器/usr/local/webapps挂载到主机/home/webapps目录,这意味着可以直接修改主机目录中的文件,从而修改容器中的文件(-v);将容器8080端口映射到主机的8888端口(-p);以后台模式启动容器(-d);启动容器后,在容器内执行命令(bash)

docker run -d -p 8888:8080 -v /usr/local/webapps:/home/webapps -it --name Myubuntu ubuntu:18.04 bash

当利用docker run 来创建容器时,Docker 在后台运行的标准操作包括:

  • 检查本地是否存在指定的镜像,不存在就从 registry 下载
  • 利用镜像创建并启动一个容器
  • 分配一个文件系统,并在只读的镜像层外面挂载一层可读写层
  • 从宿主主机配置的网桥接口中桥接一个虚拟接口到容器中去
  • 从地址池配置一个 ip 地址给容器
  • 执行用户指定的应用程序
  • 执行完毕后容器被终止

终止/启动

启动容器

docker start [OPTIONS] CONTAINER [CONTAINER...]
OPTION Description
-a 附加到容器的标准输入输出流
-i 附加并保持标准输入打开
  • 启动一个容器
    docker start my_container
    
  • 同时启动多个容器
    docker start container1 container2 container3
    

终止容器

docker stop [OPTIONS] CONTAINER [CONTAINER...]
OPTION Description
-t,--time 停止容器之前等待的秒数,默认是 10 秒
  • 停止一个容器:
    docker stop my_container
    
  • 指定等待时间30秒停止容器:
    docker stop -t 30 my_container
    
  • 同时停止多个容器:
    docker stop container1 container2 container3
    

重启容器

docker restart [OPTIONS] CONTAINER [CONTAINER...]
OPTION Description
-t,--time 停止容器之前等待的秒数,默认是 10 秒
  • 重启一个容器:
    docker restart my_container
    
  • 指定等待时间30秒重启容器:
    docker restart -t 30 my_container
    
  • 同时重启多个容器:
    docker restart container1 container2 container3
    

进入容器

在使用 -d 参数时,容器启动后会进入后台。某些时候需要进入容器进行操作,包括使用 docker attach 命令或 docker exec 命令。

attach命令

在容器后台运行时,输入

docker attach <Container ID>

exec进入容器命令(推荐)

在容器后台运行时,输入

docker exec -it <Container ID> bash

导出/导入容器

导出容器

docker export <Container ID> > ubuntu.tar

导入容器

cat ubuntu.tar | docker import - test/ubuntu:v1

通过指定URL导入

docker import http://example.com/exampleimage.tgz example/imagerepo

删除容器

对已经停止的容器,可以使用命令删除

docker rm -f <Container ID>

删除所有处于终止状态的容器

docker container prune

其他

查看正在运行的容器

docker ps

查看容器端口的映射情况

docker port <Container ID>|<Container Name>

查看容器内部的标准输出

docker logs -f <Container ID>

查看容器内部运行的进程

docker top <Container ID>|<Container Name>

查看 Docker 的底层信息

docker inspect <Container ID>|<Container Name>

标题:Docker学习笔记(一)
作者:Departure
地址:https://www.unreachablecity.club/articles/2024/10/26/1729943776943.html