windows下的docker学习

一、为什么学

        每学一个东西,我们肯定是基于某个需求去学习的,众所周知,软件开发最麻烦的是环境配置,开发好好的,部署出问题就很难受,所以为了确保开发、测试、部署环境一致,且高效的部署所以选择了容器技术而非 VM ,而 Docker 是基于 Linux 容器技术的开源项目,它的口头禅就是:“一次构建,处处运行”,具有轻量,速度,社区活跃,且拓展性高。处处运行,从帮家到搬楼

(一)作用:

        解决了运行环境和配置问题,方便做持续集成并有助于整体发布容器虚幻技术

(二)具体场景:

        更快速的应用交付和部署

        更快捷的升级和扩缩容

        更简单的系统运维

        更高的计算资源利用

二、docker组成

(一)镜像:image

        一个只读模板。镜像可以用来创建Docker容器,一个镜像可以创建很多容器,docker镜像文件类似于java类模板,而docker容器实例类似于java中new出来的实例对象

(二)容器:container

        是用镜像创建的运行实例,为镜像提供了一个标准的隔离运行环境,可以被启动、开始、停止、删除。类似于java中的类和实例对象一样,镜像是静态的定义,容器是镜像运行时的实体。

(三)仓库:repository

        是集中存放镜像文件的场所。类似于gihub仓库,存放各种git项目的地方。仓库分为公开仓库和私有仓库,最大的公开仓库Docker Hub,存放了数量庞大的镜像供用户下载, 国内公开的仓库有阿里云和网易云等

三、安装

        下载路径,选择对应的操作系统——window10系统,Developers - Docker ,双击下载的exe文件,首次启动会创建虚拟机,稍等几分钟即可。

        检测是否安装成功:可以在终端cmd输入docker -v来进行检查docker版本。

         如果在docker desktop安装过程中出现了安装失败,那么重新进行第二步运行相应的步骤和开启hyper-v的操作,然后要重新启动电脑,再进行docker desktop安装。

四、简单的命令

#启动docker
systemctl start docker
#停止docker
systemctl stop docker
#重启docker
systemctl restart docker
#查看docker状态
systemctl status docker
#查看docker信息
docker info

镜像命令:

#拉取镜像
docker pull 镜像名
docker pull 镜像名:tag

#查看镜像
docker images

#删除镜像
docker rmi -f 镜像名/镜像ID   #删除一个
docker rmi -f 镜像名/镜像ID 镜像名/镜像ID 镜像名/镜像ID  #删除多个 其镜像ID或镜像用用空格隔开即可 
docker rmi -f $(docker images -aq)  #删除全部镜像  -a 意思为显示全部, -q 意思为只显示ID

#搜索镜像
docker search 镜像名
docker search --filter=STARS=9000 mysql 搜索 STARS >9000的 mysql 镜像

#运行镜像
docker run 镜像名
docker run 镜像名:Tag

#保存镜像
docker save 镜像名/镜像ID -o 镜像保存在哪个位置与名字

容器命令:

#运行nginx容器
# -it 表示 与容器进行交互式启动 -d 表示可后台运行容器 (守护式运行)  --name 给要运行的容器 起的名字  /bin/bash  交互路径
docker run -it -d --name 要取的别名 镜像名:Tag /bin/bash 
docker run -d --name test-nginx -p 3000:80 nginx

# 查看正在运行的容器
docker ps

# 查看所有创建过的容器(运行或者关闭)
docker ps -a

# 停止容器
docker stop [container]

# 启动容器
docker start [container]

# 删除容器
docker rm -f [containerid]

# 查看后台运行的日志
docker logs [containe]

#进入容器的shell
docker container exec -it [containe] /bin/bash

五、拉取镜像案例

1、拉取nginx镜像

docker pull nginx

2、启动nginx镜像

docker run -d --name test-nginx -p 3000:80 nginx

3、打开 localhost:3000 即可访问到熟悉的 nginx 页面了

初学者肯定会疑问nginx是什么?

        Nginx(发音为“engine-x”)是一个用于HTTP、HTTPS、SMTP、POP3和IMAP协议的开源反向代理服务器,以及负载平衡器、HTTP缓存和web服务器(源服务器)。nginx项目从高度关注高并发性、高性能和低内存使用开始。它是在类似于BSD的第二条款许可下获得许可的,并且它运行在Linux、BSD变体、Mac OS X、Solaris、AIX、HP-UX以及其他*nix版本上。它还为Microsoft Windows提供了概念端口的证明。

六、遇到的问题

1、在拉取镜像的时候可能会遇到如下所示的错误提示 :

这个问题主要原因是docker desktop没有启动

 2、启动之后弹出如下所示(若没有则不管,有的话按照下面步骤继续执行),点击重启的时候老是失败,因为需要更新一下WLS 2

推荐Windows将WSL 1升级为WSL2_Xeon-Shao的博客-CSDN博客_wsl1升级到wsl2学习,

也可以根据旧版 WSL 的手动安装步骤 | Microsoft Docs 步骤执行

(建议看完以上两个推荐的解决方式先执行一边)

3、下载wsl_update_x64.msi,双击安装

4、在powershell上输入wsl - set-default-version-2

 操作完这步之后,点击Restart,等待一下就能启动docker了

 5、输入docker pull nginx并可成功拉取nginx镜像

 七、用 Dockerfile 构建一个镜像(windows环境)

(一)案例一:输出一个hello Docker

1、在桌面新建一个docker-test文件夹,里面放置一个 Dockerfile 文件, Dockerfile 文件里面的内容为:

#指定基础的镜像为nginx。
FROM nginx:latest 
#: 指定镜像创建者TTT和联系方式。
MAINTAINER TTT [email protected]
#容器内部执行的命令(在index.html中输出‘hello, Docker!’)。
RUN echo '<h1>hello, Docker!</h1>' > /usr/share/nginx/html/index.html

2、docker-test文件夹所对应的目录地址栏中输入cmd,打开命令提示符窗口,输入命令

# 生成一个名为 nginx 标签为0.0.1 的镜像 ,注意最后还有一个 . 
docker image build -t nginx:0.0.1 .

如下图所示

 3、查看镜像,多了一个自己生成的镜像

 4、启动容器

# 根据刚生成的镜像 启动容器
docker run -d --name test-nginx1 -p 3001:80 nginx:0.0.1

5、访问 locahost:3001 已经不是默认的 nginx 的访问页面了

这里解释一下参数

  • -p 参数是指容器的 80 端口映射到本机的 3001 端口
  • -d 守护式运行(适合运行应用程序和服务)
  • --name  容器名称 如果不指定则是一个随机的名称

 (二)案例二,输出一个index.html

1、在案例一种的文件夹中加一个index.html文件:在docker-test文件夹里面新建一个index.html

<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="UTF-8" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <title>Hello World</title>
  </head>
  <body>
    <h1>Hello World!</h1>
  </body>
</html>

2、修改 Dockerfile 文件,重点是:COPY index.html /usr/share/nginx/html/index.html

# 声明基于 nginx 最新的镜像 这里说一下镜像名:后面的是标签 默认是latest
FROM nginx:latest
# 把刚才 index.html 复制到 nginx 的 html 路径去
COPY index.html /usr/share/nginx/html/index.html
# 声明暴露80端口,要是运行不成功就把这句去掉
EXPOSE 80

3、运行命令,注意这里要把之前的容器和镜像删除(考验删除容器和镜像命令的时候到了,先停止容器,删除容器再删除镜像),也可以不删除案例一生成的镜像,将下面的镜像标签更换一下,启动容器时候将名字改一下

#  生成一个名为 nginx 标签为0.0.1 的镜像 ,注意最后还有一个 .
docker image build -t nginx:0.0.1 .
# 根据刚生成的镜像 启动容器
docker run -d --name test-nginx1 -p 3001:80 nginx:0.0.1

4、访问 locahost:3001

 当然,真正开发的时候,肯定不可能是这样去修改了,好比之前的端口映射,也可以将容器的内部的目录也映射出来实现共共享,可以使用 Volume,目前先学习到这里 ,Volume后期再学习和更新

猜你喜欢

转载自blog.csdn.net/m0_55173487/article/details/126212900