Docker Desktop 安装使用教程

打印 上一主题 下一主题

主题 647|帖子 647|积分 1941

一、前言

   作为开发人员,在日常开发中,我们必要在当地去启动一些服务,如: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可以自动检测在你的网络环境下那个源是最快的)
  1. {
  2.     "registry-mirrors" : [
  3.     "https://registry.docker-cn.com",
  4.     "http://hub-mirror.c.163.com",
  5.     "https://docker.mirrors.ustc.edu.cn",
  6.     "https://cr.console.aliyun.com",
  7.     "https://mirror.ccs.tencentyun.com"
  8.   ],
  9.   "builder": {
  10.     "gc": {
  11.       "defaultKeepStorage": "20GB",
  12.       "enabled": true
  13.     }
  14.   },
  15.   "experimental": false,
  16.   "features": {
  17.     "buildkit": true
  18.   }
  19. }
复制代码

不停转转转,等一会就可以了,不转了就可以了

五、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
  1. # 启动docker
  2. sudo service docker start
  3. # 重启docker
  4. sudo service docker restart
  5. # 停止docker
  6. sudo service docker stop
复制代码
2、检察本机所有的镜像

  1. docker images
  2. # 或者
  3. docker image ls
复制代码

标签含义REPOSITORY镜像所在的仓库名称TAG镜像标签IMAGEID镜像IDCREATED镜像的创建日期(不是获取该镜像的日期)SIZE镜像大小 3、拉去镜像(docker pull)

   除了使用官方的镜像外,我们还可以在仓库中申请一个自己的账号,保存自己制作的举行,或者拉去使用他人的镜像。
  1. # 官方镜像
  2. docker image pull 镜像名称
  3. # 或简写为
  4. docker pull 镜像名称
  5. # 比如
  6. docker pull ubuntu
  7. docker pull ubuntu:16.04
  8. # 个人镜像
  9. docker pull 仓库名称/镜像名称
  10. docker pull xunmi/django
  11. # 第三方仓库拉去
  12. docker pull 第三方仓库地址/仓库名称/镜像名称
  13. docker pull hub.c.163.com/library/mysql:latest
  14. (默认仓库名为library,所有从官方获取镜像相当于`sudo docker image pull library/镜像名称`)
复制代码

4、删除镜像(docker rmi)

  1. docker image rm 镜像名或镜像ID 或 docker rmi 镜像名或镜像ID
  2. docker image rm hello-world
  3. 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)

   上面我们说过,镜像只是一个只读范例的文件,而我们的环境不可能只是一个这样的文件,以是我们必要把这个镜像加载成我们的环境,也就是让他变成容器。
  1. 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下令
  1. # 查看当前所有正在运行的容器
  2. docker ps
  3. # 查看当前所有的容器
  4. docker ps -a
  5. # 使用过滤器(除了name外,常用的还可以指定id:id= 、所有停止的容器:status=exited,正在运行的容器:status=running 等)
  6. docker ps -f name=指定的名字
  7. # 显示2个上次创建的容器(2可以改变)
  8. docker ps -n 2
  9. # 显示最新创建的容器(包括所有状态)
  10. docker ps -l
  11. # 仅显示ip
  12. docker ps -q
  13. # 显示容器大小
  14. docker ps -s
复制代码
标签含义CONTAINER ID镜像IDIMAGE创建容器的镜像名称COMMAND默认启动下令(启动时会自动实行)CREATED创建容器的日期STATUS当前的状态(启动了多久,多久之前退出等)PORTS映射的端口NAMES容器的名称SIZE容器大小(使用-s下令参数时才能看到)

6.2、启动和关闭容器

  1. # 停止容器
  2. docker container stop 容器名或容器id
  3. # 或可简写为
  4. docker stop 容器名或容器id
  5. # 强制关闭容器
  6. docker container kill 容器名或容器id
  7. # 或可简写为
  8. docker kill 容器名或容器id
  9. # 启动容器
  10. docker container start 容器名或容器id
  11. # 或可简写为
  12. 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下令将我们必要实行的下令传入。
  使用方法有很多种,这里我们介绍一些比较常用的方法
  1. # 如果我只需要执行简单的一两条命令可以使用docker exec
  2. # 执行单条命令 (-i: 启动并且保留交互式命令行; -t:作用是分配一个虚拟的终端; docker run )
  3. docker exec -it 容器名或容器id 执行的命令
  4. # 比如
  5. docker exec -it kali-test whoami
  6. # 用这种方法,我们还可以启动命令行,根据Linux的特性,系统程序会在/bin中,linux中常用的Shell有多个,其中大部分用的Linux默认的为bash
  7. # 所以我们启动命令可以自行如下命令(除了/bin/bash外,linux一般还会带/bin/sh、/bin/rbash、/bin/dash等,具体区别可以自行百度)
  8. docker exec -it 容器名或容器id /bin/bash
  9. # 比如
  10. docker exec -it kali-test /bin/bash
  11. # 除了exec外还有attach可以使用,但它有个弊端,多终端启动attach后,都会会同步显示。如果有一个窗口阻塞了,那么其他窗口也无法再进行操作。
  12. docker attach 容器名或容器id
  13. # 比如
  14. docker attach kali-test
复制代码
exec可选参数作用-d会创建一个保卫式容器在后台运行(这样创建容器后不会自动登录容器)。-e设置环境变量-i表示以《交互模式》运行容器。-t表示容器启动后会进入其下令行。加入这两个参数后,容器创建就能登录进去。即分配一个伪终端。-u设置用户名和UID。-w设置容器内的工作目次。

   除了上述方法外,在进入容器后,我们还可以实验安装SSH或者nsenter实验登陆,不过这两种方法都先进入容器安装后才能使用
  1. # nsenter安装步骤
  2. wget https://www.kernel.org/pub/linux/utils/util-linux/v2.24/util-linux-2.24.tar.gz  
  3. tar -xzvf util-linux-2.24.tar.gz  
  4. cd util-linux-2.24/  
  5. ./configure --without-ncurses  
  6. make nsenter  
  7. sudo cp nsenter /usr/local/bin  
复制代码
6.4、删除容器(docker rm)

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

  1. # 使用rm删除容器
  2. docker rm 容器名或容器id
  3. # 列如
  4. 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、容器制作成镜像

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


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

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
回复

使用道具 举报

0 个回复

正序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

忿忿的泥巴坨

金牌会员
这个人很懒什么都没写!

标签云

快速回复 返回顶部 返回列表