Docker Desktop 安装使用教程

news2024/12/22 6:17:35

一、前言

作为开发人员,在日常开发中,我们需要在本地去启动一些服务,如: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.coloradmin.cn/o/692962.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

php+mysql期末作业小项目

目录 1、登录界面 2、注册界面 3、主界面 4、学生表界面 5 、查询学生界面​编辑 6、修改学生信息界面​编辑 7、删除学生信息界面 8、添加学生信息界面 9、后台数据库​编辑 一个简单的php➕mysql项目学生信息管理系统,用于广大学子完成期末作业的参考&…

Android Studio导入flutter项目,运行和调试按钮灰色

描述:用android Studio导入flutter项目,运行和调试按钮无法点击并置灰,显示如下 解决方法:检查是否设置如下内容: 1.是否配置了Android SDK ,打开 file > project Structure >project 2.是否配置了F…

【架构】领域驱动设计(DDD)的几种典型架构介绍

文章目录 前言一、专业术语二、架构演变三、限界上下文四、领域驱动设计的四重边界五、整洁分层架构六、六边形架构七、洋葱架构总结 前言 我们生活中都听说了DDD,也了解了DDD,那么怎么将一个新项目从头开始按照DDD的过程进行划分与架构设计呢&#xff…

【Web自动化测试】如何生成高质量的测试报告

运行了所有测试用例,控制台输入的结果,如果很多测试用例那也不能够清晰快速的知道多少用例通过率以及错误情况。 web自动化测试实战之批量执行测试用例场景: 运行 AllTest.py 文件后得到的测试结果不够专业,无法直观的分析测试结果,我们能否…

如何学习和提高CAPL语言编程能力

CAPL是Vector公司开发的,用来配合它的系列产品使用的一款面向过程的语言。CAPL是Communication Access Programming Language的缩写,从字面意思来说,是专门用于通信访问的编程语言。 最初访问CAN总线,现在已扩展到所有的汽车总线…

代理模式(Proxy)

定义 代理是一种结构型设计模式,让你能够提供对象的替代品或其占位符。代理控制着对于原对象的访问,并允许在将请求提交给对象前后进行一些处理。 前言 1. 问题 举个例子:有这样一个消耗大量系统资源的巨型对象, 你只是偶尔需…

mac部署fastadmin踩坑记录

粘贴一下解决配置,主要Nginx配置问题 //后台NGINX location / {if (!-e $request_filename) {rewrite ^(.?\.php)(/.)$ /$1?s$2 last;# 加上这一句配置试试rewrite ^(.*)$ /ewgadmin.php?s$1 last; # 对应项目修改对应入口文件break;}}//接口文档Nginx配置 loca…

sql server还原新数据库,解决原库还原中...

1)用studyDB库,备份出数据库备份文件 studyDB_backup_2023_06_19.bak 2)用备份文件 studyDB_backup_2023_06_19.bak还原数据新库CollegeStudyDB和原库studyDB到同一服务器 3)数据库CollegeStudyDB按原成功,但是原库s…

Linux环境准备以及CentOS7.6系统安装

(该图由AI绘制 本人提供教学 FREE) 运维概述与Linux系统安装 一、VMware虚拟机 1、什么是虚拟机 其实虚拟机就是在Windows的真机上创建一个独立的其他操作系统的运行环境而且其对宿主机(Windows)没有任何影响。 2、虚拟机的种…

《操作系统》by李治军 | 实验7 - 地址映射与共享

目录 一、实验目的 二、实验内容 (一)跟踪地址翻译过程 (二)基于共享内存的生产者—消费者程序 (三)共享内存的实现 三、实验准备 1. Linux 中的共享内存 2. 获得空闲物理页面 3. 地址映射 4. 寻…

TS学习笔记——模块

模块 module 模块:在自身的作用域里执行,不是在全局作用域中,若是外部想要使用需要导入导出。 好处:1、提高了代码的复用性 2、解决命名冲突 3、提高代码的可维护性 模块导入导出:export (interface…

同步和异步、同步复位、异步复位、同步释放

文章目录 同步和异步同步复位、异步复位、同步释放同步复位异步复位同步释放(异步信号和CLK信号存在时序检查、Recover time&Removel time)典型的异步复位同步释放的verilog电路设计 同步和异步 数字电路根据逻辑功能的不同特点,可以分成…

如何判断端口有没有被占用

第一步:打开cmd 输入netstat -ano 可以查看自己的所有端口,第一行的本地地址是端口22,最右面对应的pid13260 第二步:打开任务管理器对应的PID就知道那个服务项占用了22端口了 第二种查看指定方法: netstat -ano|finds…

将数据库与LLMs结合,增强模型的长期记忆能力--ChatDB

ChatDB: AUGMENTING LLMS WITH DATABASES AS THEIR SYMBOLIC MEMORY 返回论文和资料目录 论文地址 项目地址 1.导读 清华团队针对大模型LLMs的长期记忆能力进行的改进。改进思路是将LLMs与数据库结合,将信息以符号化的形式存储在数据库中。同时,使用大…

极致呈现系列之:Echarts日历坐标系的时光流转

目录 什么是日历坐标系Echarts日历坐标系的特性Echarts日历坐标系的应用场景Echarts日历坐标系中常用的配置项Vue3中使用Echats日历坐标系实现健康可视化图表日历饼图 什么是日历坐标系 日历坐标系是一种用于展示时间数据的坐标系,将数据按照日期呈现在一个日历形式…

「Java核心技术大会 2023」6月重磅启动,邀你共同探讨Java生态 ~文末福利

Java核心技术大会 2023 大会简介直播预约:视频号“IT阅读排行榜”PART 1 特邀启动专场PART 2 Java语言、平台和趋势专场PART 3 Java应用开发专场PART 4 Java应用与系统架构专场PART 5 Java应用性能优化专场PART 6 大数据与数据库专场PART 7 云原生与Serverless专场P…

STM32学习 6月27日

51单片机中有时钟和时钟树的概念,外设只有GPIO、定时器、和一个串口,使用的都是11.0592MHZ的频率,除了定时器外,其他外设只要上电就可以使用。 stm32每个外设都有对应控制的开关,其所使用的频率各不相同,需…

[Windows] ImageGlass Kobe v8.9便携版

这款ImageGlass Kobe 神仙看图软件,UI漂亮,而且官方收费95元限时免费,打开大图速度极快,界面简洁纯净无广告,简直就是我的梦中情软,看图体验真的嘎嘎好!是优秀的 Windows 照片查看器替代品。 具…

数据库监控与调优【十一】—— 索引调优技巧

索引调优技巧 长字段的索引调优使用组合索引的技巧覆盖索引排序优化冗余、重复索引的优化 长字段的索引调优 举例 实际项目中,我们可能需要给很长的字段添加索引。 比如以下first_name字段里面存储的数据普遍在200以上。 SELECT* FROMemployees WHEREfirst_…

Qt 动态手势识别“握拳”

系列文章目录 通过Qt实现手势识别控制软件操作相关系列技术方案 (一)Qt 将某控件、图案绘制在最前面的方法,通过QGraphicsScene模块实现 (二)Qt QGraphicsScene模块实现圆点绘制在所有窗体的最前方,实现圆…