Docker Desktop 安装使用教程

news/2024/11/25 15:46:20/

一、前言

作为开发人员,在日常开发中,我们需要在本地去启动一些服务,如:redis、MySQL等,就需要去下载这些在本地去启动,操作较为繁琐。此时,我们可以使用Docker Desktop,来搭建我们需要的服务,直接在容器中去启动即可。

二、下载 Docker Desktop

docker官网:https://www.docker.com/

在这里插入图片描述
在这里插入图片描述

三、安装 Docker Desktop

1、下载并安装

我在windows上下载的是 Docker Desktop,下载地址,点进去根据自己的需要去下载,我是下载的Windows版本的。把下载下来的.exe文件双击打开,如下图所示,直接点击OK即可。

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
安装完后,会有个对应的小图标。
在这里插入图片描述

2、配置 Docker Desktop 环境

因为docker desktop 是可以部署在windows 上来运行docker的应用服务的,其基于windows 的 Hyper-V
服务和WSL2内核的Windows上创建一个子系统(linux),从而实现其在windows上运行docker。所以电脑上需要开启Hyper-V
服务,和安装WSL2。

开启Hyper-V 服务:控制面板—程序—程序和功能—启动或关闭Windows功能 中 勾选【Hyper-V】和【容器】选项。

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

配置完毕后,重启电脑

2、安装 wsl2

我们可以从微软官网下载最新版本的wsl2,然后正常打开。

下面这个链接,访问下载,安装更新:
https://wslstorestorage.blob.core.windows.net/wslblob/wsl_update_x64.msi

下载完成后直接双击安装即可

在这里插入图片描述

3、打开 Docker Desktop 的问题

问题一:wsl 2 installation

打开 docker desktop, 如果出现报错如下,报错意思是:是因为我们还需要进行wsl的下载和配置

在这里插入图片描述
这里我们用两步来解决这个问题:

1、我们先去系统里查看一下有没有启用Windows的Linux子系统,步骤如下:

控制面板->程序->程序和功能

在这里插入图片描述
如果没有的话,我们勾选上,重新启动电脑,打开Docker Desktop 。

2、如果还是没有解决的话。原因就剩一个了就是:

我们使用的wsl2版本很旧,因此需要手动更新。我们可以根据提示从微软官网下载最新版本的wsl2,然后正常打开。

下面这个链接,访问下载,安装更新:
https://wslstorestorage.blob.core.windows.net/wslblob/wsl_update_x64.msi

下载完成后直接双击安装即可

在这里插入图片描述
重新启动,运行,发现问题已经解决。

问题二:wsl kernel 版本低

如果已经按照过wsl , 打开 docker desktop, 如果出现报错如下,报错意思是:wsl kernel 版本低,需要进行更新。

解决方法:以管理员的身份打开控制台(cmd),并执行命令 wsl --update 进行更新

在这里插入图片描述
在这里插入图片描述
如上图中提示,wsl 更新成功后,需要对wsl重启后才会更新生效。可以执行 wsl --shutdown 进行关闭wsl (我执行命令后又重启了一下电脑。)

重启后,再次打开 docker desktop即可

如果电脑windows 10 的企业版的话,以上的安装部署就完毕了, 但我在安装windows 10 家庭版的时候,报错。网上查的意思是说 docker 必须安装在win10 企业版本,如果想安装在家庭版本上,需要如下操作: 打开注册表编辑器,在“ 计算机\HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion ” 下找到 EditionID ,数值数据改为Professional即可。

在这里插入图片描述

四、Docker Desktop 配置镜像源

配置镜像源:打开Docker ,找到 设置–docker engine 中,添加如下图所示的镜像源地址。

在这里插入图片描述

选择Docker
Engine,在其中输入(这里使用的是163的源,如果想要使用其他源可以自行设置,github上有个项目:docker_mirror可以自动检测在你的网络环境下那个源是最快的)

{"registry-mirrors" : ["https://registry.docker-cn.com","http://hub-mirror.c.163.com","https://docker.mirrors.ustc.edu.cn","https://cr.console.aliyun.com","https://mirror.ccs.tencentyun.com"],"builder": {"gc": {"defaultKeepStorage": "20GB","enabled": true}},"experimental": false,"features": {"buildkit": true}
}

在这里插入图片描述
一直转转转,等一会就可以了,不转了就可以了

在这里插入图片描述

五、Disk image location路径的修改

操作如下(示例):完成安装后,打开软件,点击右上角的设置,将图2中的红框标注部分的选中给取消,然后按照图3进行路径的修改,再返回图2界面,把红框部分选中,并应用即可。

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

六、验证是否安装成功

代码如下(示例):在左下角的搜索框中,输出PowerShell,打开PowerShell。输入docker
images命令,出现下图所示即表示安装成功。

在这里插入图片描述

七、使用 Docker Desktop

1)containers介绍如下

在这里插入图片描述

点击上图中的容器名称,例如「mysql_cn」,会进入到如下图所示的容器页面。展示了此容器的一些信息和操作按钮,点击「Logs」的tap页,会显示此容器的运行日志。容器日志直接展示在页面上,就方便查看了(一般也可以在后台通过docker命令来查看日志信息。不过命令查看有点麻烦,看起来也不太方便)

在这里插入图片描述

terminal 是容器的终端(即已经在容器里面了), 可以在终端上执行一些mysql的命令,进入到mysql 执行sql语句。

一般如果不通过这个终端的话,需要在控制台上先通过docker 命令进入到容器内部,然后再在容器内部使用mysql命令

所以terminal 的好处就是省略了 docker命令进容器的步骤。还是比较方便的。

在这里插入图片描述

2)images 介绍如下

一个镜像可以启动多个容器,可以设置不同的容器名称,比如为可以启动两个mysql容器这样就有两个mysql容器在运行,两者运行互不干扰。

在这里插入图片描述
通过镜像启动一个容器:

在这里插入图片描述

如下图,通过镜像启动一个容器时,只配置了容器名和环境变量信息,没有配置端口映射。但是容器也是可以启动的。(个人理解:端口映射的目的是为了其他电脑访问本机的mysql_2 容器时,是通过 本机ip +映射端口来访问的。映射端口 是映射到了 mysql_2容器的端口。这样就可以访问容器中的mysql 了。 但如果容器本身不需要被访问的话,容器自己运行,我通过控制台使用docker 命令来进入到容器内容,使用mysql的命令进入到mysql 中来操作mysql ,也是可以的。)

不过,正常的使用情况是需要配置端口映射的。下图中,端口配置中,有两个端口需要配置端口映射,一个是3306,一个是33060端口。查看一下资料,两个端口是分别使用不同的协议来进行通信的。通常我们使用的都是3306, 所以只配置3306端口的映射即可(在输入框中输入一个端口号,前提是未被占用的端口号; 或者直接输入个0 ,会随机分配一个端口号)。

在这里插入图片描述

3)Search 介绍如下

Search 的搜索框可以直接在这里搜索并且pull 下需要的镜像。

在这里插入图片描述
在这里插入图片描述

还有一些其他的功能,目前也使用不到,这里先不做记录和讲解了。后续用到了再记录吧;

八、在 cmd 窗体 使用 命令操作 Docker

使用快捷键: win+R 调查 cmd 窗体

在这里插入图片描述

1、对Docker操作

安装完成Docker后,默认每次开机的时候都会自动启动,但我们也可以手动启动,关闭或者重启Docker

# 启动docker
sudo service docker start
# 重启docker
sudo service docker restart
# 停止docker
sudo service docker stop

2、查看本机所有的镜像

docker images
# 或者
docker image ls

在这里插入图片描述

标签含义
REPOSITORY镜像所在的仓库名称
TAG镜像标签
IMAGEID镜像ID
CREATED镜像的创建日期(不是获取该镜像的日期)
SIZE镜像大小

3、拉去镜像(docker pull)

除了使用官方的镜像外,我们还可以在仓库中申请一个自己的账号,保存自己制作的进行,或者拉去使用他人的镜像。

# 官方镜像
docker image pull 镜像名称 
# 或简写为 
docker pull 镜像名称
# 比如
docker pull ubuntu
docker pull ubuntu:16.04# 个人镜像
docker pull 仓库名称/镜像名称
docker pull xunmi/django# 第三方仓库拉去
docker pull 第三方仓库地址/仓库名称/镜像名称
docker pull hub.c.163.com/library/mysql:latest
(默认仓库名为library,所有从官方获取镜像相当于`sudo docker image pull library/镜像名称`)

在这里插入图片描述

4、删除镜像(docker rmi)

docker image rm 镜像名或镜像ID 或 docker rmi 镜像名或镜像ID
docker image rm hello-world
docker rmi 9e64176cd8a2

删除镜像的前提是没有使用这个镜像的容器,如果有需要先删除容器(报错:Error response from daemon: conflict: unable to delete 镜像ID (must be forced) - image is being used by stopped container 容器ID则代表有容器使用了此镜像。)可以尝试先执行docker rm 容器ID删除容器,如果还报错,可以看我下方删除容器的具体方法。 几条删除命令的区别

  • docker rm: 删除一个或多个 容器
  • docker rmi: 删除一个或多个 镜像
  • docker prune: 用来删除不再使用的 docker 对象

在这里插入图片描述

5、加载镜像(docker run)

上面我们说过,镜像只是一个只读类型的文件,而我们的环境不可能只是一个这样的文件,所以我们需要把这个镜像加载成我们的环境,也就是让他变成容器。

docker run [可选参数] 镜像名 [向启动容器中传入的命令]
常用可选参数作用
-i表示以《交互模式》运行容器。
-d会创建一个守护式容器在后台运行(这样创建容器后不会自动登录容器)。
-t表示容器启动后会进入其命令行。加入这两个参数后,容器创建就能登录进去。即分配一个伪终端。
–name为创建的容器命名。(默认会随机给名字,不支持中文字符!!!)
-v表示目录映射关系,即宿主机目录:容器中目录。注意:最好做目录映射,在宿主机上做修改,然后共享到容器上。
-p表示端口映射,即宿主机端口:容器中端口。 比如:-p 8080:80 就是将容器中的80端口,映射到主机中的8080端口
–network=host表示将主机的网络环境映射到容器中,使容器的网络与主机相同。每个 Docker 容器都有自己的网络连接空间连接到虚拟 LAN。使用此命令则会让容器和主机共享一个网络空间。

可以启动一个系统 docker run -i -d -t --name=kali-test kalilinux/kali-rolling(这里我使用linux的一个发行版kali作为介绍) 或可以简写为docker run -idt --name=kali-test kalilinux/kali-rolling PS: 如果加载一个我们没有的镜像,docker会自动从官方仓库中进行拉去。

在这里插入图片描述

或者我们可以启动一个网站docker run -dp 8080:80 --name docker-test docker/getting-started

在这里插入图片描述

如果你没有下载docker/getting-started的进行,这里会自动帮你下载
成功启动后,可以在浏览器中输入http://localhost:8080/即可看到如下页面

在这里插入图片描述

6、使用交互式容器

上面我们成功将镜像变成了容器,但上述的命令中我们都加入了-d,让容器在后台运行了。下面我们就来讲如何和正在运行的容器进行交互。

6.1、查看容器(docker ps)

查看容器主要会用到ps命令

# 查看当前所有正在运行的容器
docker ps
# 查看当前所有的容器
docker ps -a
# 使用过滤器(除了name外,常用的还可以指定id:id= 、所有停止的容器:status=exited,正在运行的容器:status=running 等)
docker ps -f name=指定的名字
# 显示2个上次创建的容器(2可以改变)
docker ps -n 2
# 显示最新创建的容器(包括所有状态)
docker ps -l
# 仅显示ip
docker ps -q# 显示容器大小
docker ps -s
标签含义
CONTAINER ID镜像ID
IMAGE创建容器的镜像名称
COMMAND默认启动命令(启动时会自动执行)
CREATED创建容器的日期
STATUS当前的状态(启动了多久,多久之前退出等)
PORTS映射的端口
NAMES容器的名称
SIZE容器大小(使用-s命令参数时才能看到)

在这里插入图片描述

6.2、启动和关闭容器

# 停止容器
docker container stop 容器名或容器id
# 或可简写为
docker stop 容器名或容器id# 强制关闭容器
docker container kill 容器名或容器id
# 或可简写为
docker kill 容器名或容器id# 启动容器
docker container start 容器名或容器id
# 或可简写为
docker start 容器名或容器id
  • 如果我们成功启动或者关闭一个容器的话,会返回容器名或者容器id
  • stop和kill的区别: stop是比较优雅的关掉一个容器,类似我们正常退出一个软件,而kill是当一个进程出现意外无法正常关闭的时候,我们强行进行关闭,有点像我们使用任务管理器进行结束进程操作。

在这里插入图片描述

6.3、操作后台容器

之前我们下过一个kali并且放在了后台运行,如果没有下载可以执行下列命令(docker run -i -d -t --name=kali-test kalilinux/kali-rolling),下面我们就用下面的命令开启kali(如果你下的是其他系统,比如ubuntu也可以举一反三一下)首先我们确保我们要进入的容器是开启状态的,使用docker ps -a查看其中的STATUS属性是否是Up开头,如果不是先照着上面启动容器的方法开启容器我们开启容器后,如果需要在容器内执行命令,可以将后台切换到前台,也可能使用docker命令将我们需要执行的命令传入。

操作方法有很多种,这里我们介绍一些比较常用的方法

# 如果我只需要执行简单的一两条命令可以使用docker exec
# 执行单条命令 (-i: 启动并且保留交互式命令行; -t:作用是分配一个虚拟的终端; docker run )
docker exec -it 容器名或容器id 执行的命令
# 比如
docker exec -it kali-test whoami
# 用这种方法,我们还可以启动命令行,根据Linux的特性,系统程序会在/bin中,linux中常用的Shell有多个,其中大部分用的Linux默认的为bash
# 所以我们启动命令可以自行如下命令(除了/bin/bash外,linux一般还会带/bin/sh、/bin/rbash、/bin/dash等,具体区别可以自行百度)
docker exec -it 容器名或容器id /bin/bash
# 比如
docker exec -it kali-test /bin/bash
# 除了exec外还有attach可以使用,但它有个弊端,多终端启动attach后,都会会同步显示。如果有一个窗口阻塞了,那么其他窗口也无法再进行操作。
docker attach 容器名或容器id
# 比如
docker attach kali-test
exec可选参数作用
-d会创建一个守护式容器在后台运行(这样创建容器后不会自动登录容器)。
-e设置环境变量
-i表示以《交互模式》运行容器。
-t表示容器启动后会进入其命令行。加入这两个参数后,容器创建就能登录进去。即分配一个伪终端。
-u设置用户名和UID。
-w设置容器内的工作目录。

在这里插入图片描述

除了上述方法外,在进入容器后,我们还可以尝试安装SSH或者nsenter尝试登陆,不过这两种方法都先进入容器安装后才能使用

# nsenter安装步骤
wget https://www.kernel.org/pub/linux/utils/util-linux/v2.24/util-linux-2.24.tar.gz  
tar -xzvf util-linux-2.24.tar.gz  
cd util-linux-2.24/  
./configure --without-ncurses  
make nsenter  
sudo cp nsenter /usr/local/bin  

6.4、删除容器(docker rm)

如我我们需要删除一个容器,首先需要确保这个容器已经停止了,因为正在运行的容器是无法直接删除。 我们可以运行一下docker ps -a,如果发现没有停止,可以使用docker stop停止(STATUS下已Exited开头则是停止的)

在这里插入图片描述

# 使用rm删除容器
docker rm 容器名或容器id
# 列如
docker rm docker-test

如果报错Error response from daemon: You cannot remove a running container 容器ID. Stop the container before attempting removal or force remove则代表这个容器已经启动,需要执行 docker stop 容器id,停止此容器。

6.5、容器制作成镜像

我们为什么要把容器制作成镜像?

  • 镜像可以看作为是一种备份,如果我们后期环境出现了问题,可以还原到早期镜像。
  • 镜像便于传播,可以让自己的其他设备或他人的重复利用变得更加简单容易。
# 将容器制作成镜像
docker commit 容器名 镜像名
# 镜像打包备份(打包备份的文件会自动存放在当前命令行的路径下,如果想让保存的文件可以打开,可以加.tar后缀)
docker save -o 保存的文件名 镜像名
# 镜像解压
docker load -i 文件路径/备份文件

我们将打包备份的镜像可以通过网络发送到其他设备上,使用docker镜像解压即可直接使用你的环境。


http://www.ppmy.cn/news/606287.html

相关文章

LeetCode简单题之移动零

题目 给定一个数组 nums,编写一个函数将所有 0 移动到数组的末尾,同时保持非零元素的相对顺序。 示例: 输入: [0,1,0,3,12] 输出: [1,3,12,0,0] 说明: 必须在原数组上操作,不能拷贝额外的数组。 尽量减少操作次数。 来源:力扣&am…

LeetCode80. 删除有序数组中的重复项 II

题目描述思路流程图代码题目描述 给你一个有序数组 nums ,请你 原地 删除重复出现的元素,使得出现次数超过两次的元素只出现两次 ,返回删除后数组的新长度。 不要使用额外的数组空间,你必须在 原地 修改输入数组 并在使用 O(1) …

LeetCode简单题之找不同

题目 给定两个字符串 s 和 t ,它们只包含小写字母。 字符串 t 由字符串 s 随机重排,然后在随机位置添加一个字母。 请找出在 t 中被添加的字母。 示例 1: 输入:s “abcd”, t “abcde” 输出:“e” 解释&#xff1a…

Intel的Barefoot与AMD的Pensando技术

Intel的Barefoot与AMD的Pensando技术 英特尔是半导体行业和计算创新领域的全球领先厂商 ,创始于1968年。如今,英特尔正转型为一家以数据为中心的公司。英特尔与合作伙伴一起,推动人工智能、5G、智能边缘等转折性技术的创新和应用突破&#xf…

数据结构:线性表的实现

静态数组与动态数组线性表的定义List接口的定义ArrayList及其方法的实现属性构造器把数组转换为线性表的方法判断是否需要扩容和缩容问题添加元素的方法删除元素的方法修改元素的值获取元素的值获取线性表元素个数获取线性表中数组容量获取元素在线性表下标判断是否包含某个元素…

RISC-V技术与展望

RISC-V技术与展望 RISC-V(发音为“risk-five”)是一个基于精简指令集(RISC)原则的开源指令集架构(ISA)。 与大多数指令集相比,RISC-V指令集可以自由地用于任何目的,允许任何人设计、…

LeetCode简单题之赎金信

题目 给你两个字符串:ransomNote 和 magazine ,判断 ransomNote 能不能由 magazine 里面的字符构成。 如果可以,返回 true ;否则返回 false 。 magazine 中的每个字符只能在 ransomNote 中使用一次。 示例 1: 输入&am…

vtk创建点

使用vtk库创建三维空间中的点 引言开发环境示例一项目结构实现代码 运行效果示例二项目结构实现代码 运行效果总结 引言 本文仅适合初学者。 本文不提供vtk动态库的生成,以及在QtCreator中的引进vtk时的配置。 本文先由示例一开始,然后再在示例一的基础…