分享好友 最新动态首页 最新动态分类 切换频道
Docker 快速入门(一文上手 Docker)
2024-12-27 03:14

通过本篇文章,就可以达到在 Window 或 Linux 上手 Docker(有点长,可以根据目录选择你需要的内容看

Docker 快速入门(一文上手 Docker)

文章图片没有带过来,涉及的图片较多,就不一一挪了,大家可以直接看我 GitChat : [Docker 快速入门]

  1. 什么是容器
    1.1 用大白话介绍下什么是容器
    1.2 再看下稍微正式些的说法
    1.3 物理机、虚拟机、容器的区别
  2. Docker 为什么这么火
    2.1 什么是 Docker
    2.2 Docker 火的原因
  3. Docker 在企业的应用(应用场景
    3.1 快速部署
    3.2 同步开发环境和生产环境
    3.3 当然还有其他应用场景
  4. 如何在 Win10 或者 Win7 下结合 Spring Boot 运行 Docker 程序
    4.1 准备工作
    4.2 Win10 安装 Docker
    4.3 IDEA 安装 Docker 插件
    4.4 IDEA 连通 Docker,并指定项目生成 Docker 镜像
    4.5 IDEA 运行镜像
  5. Linux 下安装 Docker 及运行 Springboot 项目
    5.1 Docker 安装
    5.2 运行容器
    5.4 更改 Docker 镜像仓库地址
    5.5 Docker 运行 Spring Boot 项目
    5.5.1 上传服务器
    5.5.2 创建影像
    5.5.3 查看镜像
    5.5.4 运行镜像
    5.5.4 查看镜像
    5.5.5 访问接口
    5.5.6 查看容器下的日志
    5.5.7 容器日志挂载到磁盘中
  6. 详解 Dockerfile 文件
    6.1 什么是 Dockerfile
    6.2 Dockerfile 文件结构
    6.3 用一个完整例子说明 Dockerfile 中的关键字
  7. 上传下载镜像
  8. 常用的 Docker 命令
    8.1 先了解下 Docker 关键字
    8.2 常见命令详解
  9. Docker 进一步学习
    Docker 三剑客:Machine、Compose、Swarm
    Docker 与 Kubernetes(K8S
    致谢
  10. 什么是容器
    1.1 用大白话介绍下什么是容器
    容器就是一个存放东西的地方,就像书包可以装各种文具、衣柜可以放各种衣服、鞋架可以放各种鞋子一样。我们现在所说的容器存放的东西可能更偏向于应用比如网站、程序甚至是系统环境,如大家常用的容器存放 Nginx、MySQL、Java 接口服务。

1.2 再看下稍微正式些的说法
容器就是将软件打包成标准化单元,以用于开发、交付和部署。

容器镜像是轻量的、可执行的独立软件包 ,包含软件运行所需的所有内容:代码、运行时环境、系统工具、系统库和设置。
容器化软件适用于基于 Linux 和 Windows 的应用,在任何环境中都能够始终如一地运行。
容器赋予了软件独立性,使其免受外在环境差异(例如开发和预演环境的差异)的影响,从而有助于减少团队间在相同基础设施上运行不同软件时的冲突。
以上内容部分参考:什么是容器?为什么需要它

1.3 物理机、虚拟机、容器的区别
三张图让你明白

物理机

enter image description here

虚拟机

enter image description here

容器

enter image description here

以上三张图片引自:物理机、虚拟机、容器的比较

  1. Docker 为什么这么火
    2.1 什么是 Docker
    Docker 是世界上领先的容器软件平台,用户可以方便地创建和使用 Docker,把自己的应用放入 Docker 容器中来运行。

Docker 的镜像还可以进行版本管理、复制、分享、修改,就像管理普通的代码一样。

Docker 三个基本概念

镜像(Image
容器(Container
仓库(Repository
Docker 三个关键动作:Build、Ship、 Run。

Build(构建镜像:镜像就像是集装箱包括文件以及运行环境等等资源
Ship(运输镜像:主机和仓库间运输,这里的仓库就像是超级码头一样
Run (运行镜像:运行的镜像就是一个容器,容器就是运行程序的地方
以上内容部分引自:《Docker 技术入门与实战》

2.2 Docker 火的原因
一致的运行环境:Docker 的镜像提供了除内核外完整的运行时环境,确保了应用运行环境一致性,从而不会再出现“这段代码在我机器上没问题啊”这类问题。
更快速的启动时间:可以做到秒级、甚至毫秒级的启动时间。大大的节约了开发、测试、部署的时间。
隔离性:避免公用的服务器,资源会容易受到其他用户的影响。
弹性伸缩,快速扩展:善于处理集中爆发的服务器使用压力。
迁移方便:可以很轻易的将在一个平台上运行的应用,迁移到另一个平台上,而不用担心运行环境的变化导致应用无法正常运行的情况。
持续交付和部署:使用Docker可以通过定制应用镜像来实现持续集成、持续交付、部署。
3. Docker 在企业的应用(应用场景
不同的公司应用场景不同,大部分公司主要是用于下两个方面(个人理解)。

3.1 快速部署
尤其是集群服务,把各个服务及依赖的环境都打包成一个个镜像,上传镜像到私有仓库中,集群各个节点从私有仓库下拉镜像然后运行即可,不需要再给每个服务器安装 JDK、Nginx 等环境。

3.2 同步开发环境和生产环境
大家都经常遇到过:程序在自己电脑运行正常,放到服务器上就报错了,这就是运行环境不同造成的,而通过 Docker在本机配置好 Dockerfile 文件后创建镜像,上传镜像库,再从镜像库下载到生产服务器,直接运行,这样就保证了开发和生产环境的一致。

3.3 当然还有其他应用场景
大家可以看下下面的文章:8 个 Docker 真实应用场景 。

  1. 如何在 Win10 或者 Win7 下结合 Spring Boot 运行 Docker 程序
    4.1 准备工作
    工具

Win10
IDEA 2018
Maven 3.5
JDK 8
这里提醒下:Win10 家庭版相当于 Win7 系统,不能直接装 Docker,需要安装 Docker Toolbox,安装完之后会有以下三个图标(自己有一台笔记本系统是 Win10 家庭版,为了给大家说明白,自己手动安装了一遍

enter image description here

点击 Docker Quickstart 就进入 Docker 环境,就可以操作 Docker 命令,用这个工具就相当于在 Windows 系统上开了个虚机,是有 IP 的,所以访问 Docker 服务的时候不能用 localhost,而是用 Docker 虚机的 IP,默认是:运行命令 docker-machine ip default 查看虚拟机的 IP 地址,默认为 192.168.99.100。

4.2 Win10 安装 Docker
Win10 安装 Docker 参考:Window Docker 安装。

安装完毕后,点击任务栏上的小鲸鱼,选择 Settings

enter image description here

点击 Daemon,在 Registry mirrors 输入镜像加速地址,国内选的是 DaoCloud 提供的。

地址:https://www.daocloud.io/mirror#accelerator-doc

注册一个账号或用 GitHub 账号登陆。选择 Windows,复制地址粘贴到 Registry mirrors 里

enter image description here

进入 cmd,输入 docker version,查看版本,能正常显示 Docker 版本信息就表示安装成功。

4.3 IDEA 安装 Docker 插件
点击扳手按钮

enter image description here

在输入框输入 plguin,点击 Plugins,选择 Browse

enter image description here

在输入框输入 docker,并选择安装,然后重启 IDEA

enter image description here

4.4 IDEA 连通 Docker,并指定项目生成 Docker 镜像
打开设置中心,也就是扳手按钮,在输入框输入 docker,点击 + 号

enter image description here

需要注意的是 Win7 的地址输入,是 https,并且是 2376 端口

enter image description here

Win7 下 IP 一般是 192.168.99.100,Win7 下需要通过 Oracle VM VirtualBox 开一个 Linux 系统,会给个默认 IP。

设置 Docker,点击小鲸鱼,选择 Settings,General,勾选最后一项,就打通了 Docker 与 IDEA 的连接。

enter image description here

4.5 IDEA 运行镜像
新建一个简单的 Spring Boot 项目,设置端口号为 8761

server.port= 8761
建一个 Spring Boot 测试项目,结构如下

enter image description here

新建一个文件夹 docker,src/main/docker,在 docker 里新建一个 Dockerfile 文件,配置文件内容

 

编辑 Dockerfile 文件

enter image description here

前面两个是镜像名字和容器名字,Bind ports 前面那个是我们启动后访问的端口,后面那个是 Dockerfile 里设置的端口

enter image description here

点击 Run 运行:到 doc 窗口输入 docker ps 查看进程

enter image description here

可以看到,程序已运行,然后我们访问:localhost:8123 (Win10

enter image description here

(Win7)访问:http://192.168.99.100:8123/hello

enter image description here

当然也可以在 Windows 下用命令生成镜像,并运行容器(命令和 Linux 一样的,我就直接在 Linux 环境下介绍了)。

  1. Linux 下安装 Docker 及运行 Springboot 项目
    5.1 Docker 安装
    #安装
    yum -y install docker-io
    #运行docker服务
    service docker start
    #再运行查看版本
    docker -v
    enter image description here

5.2 运行容器
学 Java 的都知道 hello world,Docker 也有 hello world 镜像,看下 Docker 如何运行 hello-world 的。

 

enter image description here

从结果可以看出本地没有 hello-world 镜像,尝试去远程仓库去拉,然后运行,其实刚才运行了两个命令

 

enter image description here

 

5.4 更改 Docker 镜像仓库地址
#编辑文件
vim /etc/docker/daemon.json
添加如下内容(还是用 DaoCloud

 

重启服务

 

5.5 Docker 运行 Spring Boot 项目
5.5.1 上传服务器
把在 Windows 下打包的 Jar 包和 Dockerfile 文件上传到 Linux 服务器上

enter image description here

enter image description here

5.5.2 创建影像
语法:docker build -t 要生成的镜像名 .

 

5.5.3 查看镜像
语法:docker images

enter image description here

5.5.4 运行镜像
docker run -d -p 8086:8761 --name spring-dockertest spring/dockertest

 

运行结果看下面图,一起截的。

5.5.4 查看镜像
enter image description here

5.5.5 访问接口
enter image description here

5.5.6 查看容器下的日志
#查看对应容器的启动日志:docker logs containerId
docker logs 46a9447ff6fb
enter image description here

到这里你就学会了在 Windows 和 Linux 下运行 Spring Boot 项目,并对 Docker 概念有了初步的认识,是不是感觉 Docker 也挺简单的,接下来说下细节。

5.5.7 容器日志挂载到磁盘中
做过开发的都知道日志的重要性,日志放容器中肯定是不安全的,等容器一删,历史日志就找不到了,所以需要持久化到磁盘上。这里拿启动 Nginx 服务来举例

 

可以看出关键字:-v,/mnt/resource/data/nginx/logs 为服务器磁盘目录,/var/log/nginx 为容器目录,查看容器目录命令

 

进入容器查看;看上面例子不仅是日志可以挂载,其他文件目录也是可以的。

  1. 详解 Dockerfile 文件
    6.1 什么是 Dockerfile
    Dockerfile 是一个包含用于组合映像的命令的文本文档。可以使用在命令行中调用任何命令。 Docker 通过读取 Dockerfile 中的指令自动生成镜像。

docker build 命令用于从 Dockerfile 构建镜像。可以在 docker build 命令中使用 -f 标志指向文件系统中任何位置的 Dockerfile

 

6.2 Dockerfile 文件结构
Dockerfile 一般分为四部分:基础镜像信息、维护者信息、镜像操作指令和容器启动时执行指令,’#’ 为 Dockerfile 中的注释。

Docker 以从上到下的顺序运行 Dockerfile 的指令。为了指定基本映像,第一条指令必须是 FROM。一个声明以#字符开头则被视为注释。可以在 Docker 文件中使用RUN、CMD、FROM、EXPOSE、ENV 等指令。

6.3 用一个完整例子说明 Dockerfile 中的关键字
# This my first nginx Dockerfile
# Version 1.0

 

上面的 DockerFile 算比较复杂的了,常用的 Spring Boot 项目的 DockerFile 几句话就能满足要求

 
  1. 上传下载镜像
    首先你得准备一个 Hub 的帐号,去 https://hub.docker.com 注册。

在 Hub 那里新建一个仓库,这个就类似于 GitHub 那边的 create —> create repository(创建知识库)然后随便搞个名字,我这里就叫 ubuntu,所以路径就是 breakli/ubuntu 了。

运行 docker ps 查看容器,这里就是要获取到 CONTAINER ID。

enter image description here

commit 一个容器的命令

docker commit CONTAINER ID breakli/ubuntu
接下来就是登录一个 Hub 帐号了。命令

docker login
将刚才的镜像 push 到你的 Hub 那里去,命令

docker push breakli/ubuntu:latest
这个 latest 其实就是一个 Tag name 会在 Hub 的 Tags 那里显示。注意:有时 push 会超时的,没关系,再 push 一次就好了。

现在验证一下,命令

docker inspect breakli/ubuntu
最后看一下你的 Hub 中的 Tags 是否有新的更新,下图就是成功了

enter image description here

下载镜像命令前面有说过

docker pull 镜像名称
当然在开发实际中,镜像一般是上传到公司私有仓库中,方便上传下载。

  1. 常用的 Docker 命令
    8.1 先了解下 Docker 关键字
    镜像:images
    镜像名:image_name
    镜像 id:image_id
    容器:container
    容器名:con_name
    容器 id:con_id
    8.2 常见命令详解
    从公网拉取一个镜像

    docker pull images_name
    查看已有的 Docker 镜像

    docker images
    查看帮助

    docker command --help
    查看镜像列表

    docker search nginx
    启动一个容器

    docker run hello-world
    导出镜像

    docker save -o image_name.tar image_name
    删除镜像

    docker rmi image_name
    启动一个容器

    docker run --name=con_name images

–name #设置容器名,基于创建好的容器自定义docker镜像

 

创建一个容器的同时进入这个容器

 

把物理机 80 端口映射到容器的80端口

 

看容器的端口映射情况

 

查看正在运行的容器

 

查看所有的容器

 

动态查看容器日志

 

进入容器

 

退出容器

 

删除容器

 

查看 Docker 网络

 

创建一个 Docker 网络 mydocker

 

利用刚才创建的网络启动一个容器

 

查看容器 pid

 

运行 Dockerfile 并给 Dockerfile 创建的镜像建立名字

 

MariaDB 容器启动前需先设置密码方法

 

Docker 修改镜像名

 

进入 Docker 容器脚本

 
  1. Docker 进一步学习
    因本篇文章主要是一个对 Docker 的入门,让大家对容器、 Docker 概念有所了解,并会在 Windows 和 Linux 下编写 Dockerfile 文件、创建镜像、运行镜像、查看容器日志、并持久化日志到磁盘中等,以及熟练使用 Docker 常用命令,基本上就达到了会用 Docker。大家想进一步学习,可以在以下几个方面深入

Docker 三剑客:Machine、Compose、Swarm
学习 Machine,你可以更方便快速地搭建 Docker 环境及节点。
学习 Compose,你可以更好地编排你的 Docker 命令,方便管理你项目中的多个容器。
学习 Swarm,你可以用 Swarm 部署微服务,Swarm 是 Docker 原生的,同时也是最简单最省资源的,比较适合中小型公司使用。
在这里写一下以前在搭建 Swarm 集群用到常用命令。

  1. 安装完 Docker 后,初始化集群(哪个节点初始,哪个是主节点,Docker 比较新的版本是带着 Swarm 的

docker swarm init
2. 设置开机启动

systemctl start dockersystemctl enable docker
3. 其他节点加入集群(后面的命令在初始化后会自动输出

$ docker swarm join --token SWMTKN-123s7yf7fmeh9zouq417u74n9vafl5me6hwwbi1xs0w7qw7jogr-9ynuvbegff0gkvho7xz5zxtky 10.1.1.1:237
4. 注意:如果集群搭建错误,直接执行以下命令离开集群

docker swarm leave -f
5. 删除集群服务

docker service rm nginx
6. Swarm 下运行集群服务,没法用前面说的 -v 来挂载日志目录等,需用数据卷来持久化,如

docker service create --mount type=volume,src=log,dst=/var/log --name test_service --publish 8080:8080 --replicas 2 test_service
这样 test_service 服务的日志就持久化到了 /var/lib/docker/volumes/log 下,这里我对应的目录比较大,可以具体细到 test_service 单独的日志目录。

Docker 与 Kubernetes(K8S
K8S:是一个用于管理集群环境中的容器化应用程序的开源系统。以正确的方式使用 Kubernetes 可帮助 DevOps 即服务团队自动扩展应用程序并以零停机时间进行更新。

学习 K8S,可以让你管理更复杂更大的容器集群,可以有更多的场景来选择应对复杂的业务逻辑。

致谢
感谢大家抽出时间看我的 Chat,希望对大家有所帮助,希望通过这一篇 Chat,大家能很快上手 Docker,可能有不少写得不好的地方,欢迎大家提出意见,我会继续努力,及时改正,写出更好的 Chat。

最新文章
提升外链实力,下载免费外链工具软件368
外链是搜索引擎优化 (SEO) 的关键因素,有助于提高网站的知名度、信任度和排名。为了帮助网站管理员和 SEO 专业人员轻松有效地建立外链,本文提供了全面的网站外链建设规划计划和执行方案,并精心挑选了免费且强大的外链工具软件下载。外链
马斯克并非狗狗唯一支点,蚂蚁L9 来特DOGE性能王者
备受政客支持的狗狗币的当前价格为0.42728美元,24小时内的涨幅为1.81%,其未来走势是被看好的。自美国选举日以来,狗狗币的价格已经上涨了惊人的153%,比特币在同一时期也上涨了30%。因为狗狗币等数字货币在短期内取得了显著的涨幅,所以
遂宁国家农业科技园区管委会 “遂宁国家农业科技园区瞿河百亿农产品加工园区总体规划”环境影响评价报批前公示
根据《中华人民共和国环境影响评价法》及《环境影响评价公众参与办法》(生态环境部令第4号)等相关规定,现公开拟报批的遂宁国家农业科技园区管委会《遂宁国家农业科技园区瞿河百亿农产品加工园区总体规划环境影响报告书》和公众参与说明
流浪猫冬天怎么帮它们保暖
冬天可以通过给猫咪提供猫窝、取暖设备、补充营养等方式来帮助猫咪过冬。1、提供温暖的猫窝:为猫咪准备一个舒适的猫窝是保暖的基础。猫窝应该选择不易透风、蓬松保暖的毛绒材质,并且尺寸要适中,以便猫咪蜷缩在其中感到温暖和安全。2、使
怎么创建小程序商店、excel怎么添加小程序商店?
网上搜索小程序推广方法,有很多,对商家而言,有的也是一脸懵,不实用或不靠谱。为此,得有店总结了下四种实用的小程序商城推广方法,希望对各位商家的运营有所启发。一、微信公众号结合小程序引流做运营的,几乎人人都有微信公众号,并积
简洁新闻资讯信息流类网站WordPress模板主题(含手机站)
简洁新闻资讯类网站wordpress网站主题模板编码:UTF-8。简洁新闻资讯类网站WordPress模板主题是含手机站模板。这是一款利于SEO的Wordpress模板,手工CSS+DIV,图片ALT,H系列标签已合理运用。并且同步手机站功能,手机站很强大,带同步数据
(一)利用人工智能编写自进化程序
英特尔实验室的两位研究人员,利用遗传算法和图灵完备语言,号称实现了首个能够自动编程的AI系统“AI Programmer”。文章共三篇,以下是网络翻译的详细内容:近年来,随着计算机技术、硬件、内存和CPU速度的进步,人工智能一直在稳步发展。
手机云电脑哪个好用 玩游戏无需买电脑
现在很多人都喜欢玩大型的电脑游戏,可是有时候在外面不方便开电脑,那么我们就可以通过手机来玩电脑游戏啦,这个主要采用的是云技术,让你不管在哪里都可以轻轻松松体验游戏了。一、极云普惠云电脑格来云电脑 V4.3.0 安卓版类别:系统安全
王者荣耀挚爱玫瑰怎么获得
王者荣耀挚爱玫瑰怎么获得?挚爱玫瑰是王者荣耀中的一个道具,可以送给自己的游戏好友,增加与好友之间的亲密度,不少玩家不是很清楚这个道具要怎么获得,这次就由8495小编来给大家讲讲王者荣耀挚爱玫瑰获取攻略,感兴趣的小伙伴一起来看看吧!
微信广告大事件直播推广解决方案升级-上虞网络公司为你呈现
产品升级PRODUCT PROMOTION越来越多的品牌选择通过直播推广方式做大事件营销,短时间内集中曝光,高效触达目标用户并提升品牌影响。微信广告不断丰富营销触点,打造大事件直播推广解决方案,助力奢侈品、汽车、3C 等行业品牌在大事件营销中
相关文章
推荐文章
发表评论
0评