喜迎
春节

Docker Desktop


Docker是在Linux下的一种容器,支持类似于沙盒环境下的环境搭建、软件安装、软件使用、程序编码等操作。

1 简单介绍

  • 镜像Image:类似于虚拟机里的镜像(.ISO),只读模板,独立的文件系统,可用来创建新的容器。
  • 容器Container
    • 是由Docker镜像创建的运行实例,类似于VM虚拟机,支持启动、停止、删除等操作。
    • 每个容器间相互隔离,容器中可运行特定应用,包含特定应用代码及所需的依赖文件。
  • 仓库Repository:镜像商店,用于传播镜像的地方。

1-1 安装

  • 傻瓜式安装后,重启电脑:Docker Desktop for Windows
  • 双击桌面的“Docker Desktop”图标,启动Docker Desktop。
  • 如果弹窗提示“Docker Desktop requires a newer WSL kernel version”。
  • 则以管理员身份打开PowerShell,输入命令wsl --update进行WSL升级。

1-2 换源

  • 国内从DockerHub拉取镜像时网速慢,可配置镜像加速器加速,很多云服务商都提供了国内加速器服务。
  • Docker Desktop>Settings>Docker Engine>在builder前增加如下内容>点击Apply & restart按钮。
"registry-mirrors": [
    "http://hub-mirror.c.163.com",
    "https://docker.mirrors.ustc.edu.cn"
],
"insecure-registries": [],
"debug": true,
"experimental": false,

1-3 验证

  • 命令窗口输入docker run hello-world,查看docker是否会从官方仓库中拉取hello-world镜像到本地。
  • 并自动将其实例化成容器,成功则说明镜像加速器配置正确,Docker Desktop的Containers中显示该镜像。

2 镜像操作

  • 以下基础操作均支持在PowerShell命令窗口中进行。

2-1 查看镜像

  • REPOSITORY(镜像所在仓库的名称)、TAG(镜像标签)、IMAGE ID(镜像ID)。
  • CREATED(镜像的创建日期,而并不是获取该镜像的日期)、SIZE(镜像大小)。
# 查看当前所有的镜像(docker images)
docker images
docker image ls

2-2 拉取镜像

  • 官方默认仓库名为library,docker pull <image-name>相当于docker pull library/<image-name>
# 拉取官方镜像(docker pull)
docker image pull <image-name>
docker pull <image-name>
docker pull ubuntu
docker pull ubuntu:16.04

# 拉取个人镜像
docker pull <depository-name>/<image-name>
docker pull xxx/flask

# 拉取第三方仓库
docker pull <3th-depository-url>/<depository-name>/<image-name>

# 默认仓库名为library
docker pull hub.c.163.com/library/mysql:latest  

2-3 删除镜像

  • 删除镜像的前提是没有使用这个镜像的容器,若已使用,需要先删除该镜像下的所有容器。
# 删除镜像(docker rmi)
docker image rm <image-name|image-id>
docker rmi <image-name|image-id>
docker image rm ubuntu
docker rmi 9e64176cd8a2

2-4 创建容器

  • run可选参数及作用
    • -i:以交互模式运行容器。
    • -d:创建一个守护式容器在后台运行,该方式不会自动登录容器。
    • -t:容器启动后进入命令行模式,即创建后立马分配一个伪终端。
    • -v:目录映射,即宿主机目录做修改,然后共享到容器中。
    • -p
      • 端口映射,即将容器中的端口号映射到宿主机的端口号中。
      • -p 8080:80将容器的80端口映射到宿主机的8080端口。
    • --name:为创建的容器命名,默认随机命名,不支持中文命名。
    • --network=host
      • 将宿主机的网络环境映射到容器中,使得容器的网络与宿主机相同。
      • 适用于需要容器与宿主机共享网络资源的场景(环境相同存在风险)。
# 创建容器(docker run)
docker run [-i|-d|-t|-v|-p|--name|--network=host] <image-name> [command]

# 启动linux的一个发行版kali系统
docker run -idt --name=kali-test kalilinux/kali-rolling
docker run -i -d -t --name=kali-test kalilinux/kali-rolling

# 启动网站,本地http://localhost:8080/查看
docker run -dp 8080:80 --name docker-test docker/getting-started

3 交互式容器

  • 创建容器时使用命令加入了-d参数,让容器在后台运行。
  • 接下来介绍内容,如何与正在运行的容器进行交互的操作。

3-1 查看容器

  • CONTAINER ID(镜像ID)、IMAGE(镜像名)、COMMAND(默认启动命令)。
  • CREATED(创建容器的日期)、STATUS(当前的状态)、PORTS(映射端口)。
  • NAMES(容器名称)、SIZE(容器大小)。
docker ps                       # 查看当前所有正在运行的容器(docker ps)
docker ps -a                    # 查看当前所有的容器

docker ps -f name=<NAMES>       # 使用name过滤器
docker ps -f id=<CONTAINER ID>  # 使用id过滤器
docker ps -f STATUS=exited      # 所有停止的容器过滤
docker ps -f STATUS=running     # 所有正在运行的容器过滤

docker ps -n <n>                # 显示n个上次创建的容器
docker ps -n 2                  # 显示2个上次创建的容器

docker ps -l                    # 显示最新创建的容器
docker ps -q                    # 仅显示CONTAINER ID
docker ps -s                    # 显示容器大小

3-2 启动容器

  • 如果成功启动容器,会返回容器ID。
# 启动容器
docker start <container-name|container-id>
docker container start <container-name|container-id>

3-3 关闭容器

  • 如果成功关闭容器,会返回容器ID。
# 关闭容器
docker stop <container-name|container-id>
docker container stop <container-name|container-id>

# 强制关闭容器
docker kill <container-name|container-id>
docker container kill <container-name|container-id>

3-4 删除容器

  • 删除容器需要确保该容器已经停止,正在运行的容器无法直接删除。
# 删除容器
docker rm <container-name|container-id>

3-5 后台容器

  • 需要先确保操作的容器是开启状态的,以先前启动的linux发行版kali系统为例。
  • exec可选参数及作用
    • -i:以交互模式运行容器。
    • -d:创建一个守护式容器在后台运行,该方式不会自动登录容器。
    • -t:容器启动后进入命令行模式,即创建后立马分配一个伪终端。
    • -e:设置环境变量。
    • -u:设置用户名和UID。
    • -w:设置容器内的工作目录。
docker exec -it <container-name|container-id> <command>

# 查看kali-test容器的有效用户名
docker exec -it kali-test whoami

# 根据Linux特性启动bash命令行
docker exec -it kali-test /bin/bash
docker attach <container-name|container-id>

# 附着到正在运行的容器上
docker attach kali-test                                                   

3-6 镜像制作

  • 打包备份的文件会自动存放在当前命令行的路径下,如果想让保存的文件可以打开,则加.tar后缀。
# 将容器制作成镜像
docker commit <container-name> <image-name>
# 镜像打包备份
docker save -o <file-name> <image-name>
# 镜像解压即可直接使用环境
docker load -i <file-path>/<backup-file>

文章作者: bsf
版权声明: 本博客所有文章除特別声明外,均采用 CC BY-NC 4.0 许可协议。转载请注明来源 bsf !
评 论
  目录