欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

Docker使用、Dockerfile和Dockercompose(一)

程序员文章站 2022-03-07 22:49:19
...

参考
作者: Warm and new
原文链接: cnblogs.com/peng104/p/10296717.html

一、引言

1. docker简介

  • Docker 最初是 dotCloud 公司创始人 Solomon Hykes 在法国期间发起的一个公司内部项目,于 2013 年 3 月以 Apache 2.0 授权协议开源,主要项目代码在 GitHub 上进行维护。
  • Docker 使用 Google 公司推出的 Go 语言 进行开发实现。
  • docker是linux容器的一种封装,提供简单易用的容器使用接口。它是最流行的Linux容器解决方案。
  • docker的接口相当简单,用户可以方便的创建、销毁容器。
  • docker将应用程序与程序的依赖,打包在一个文件里面。运行这个文件就会生成一个虚拟容器。
    程序运行在虚拟容器里,如同在真实物理机上运行一样,有了docker,就不用担心环境问题了。

2. Docker的核心概念

Docker包含三大核心概念:镜像、容器、仓库,基础部分功能都是围绕他们进行展开,因此先有个简单的印象即可。

  • 镜像 (image)
    可以简单理解为一个只读的模板或者应用程序及其环境的打包,后边的容器就是通过它来进行创建。它类似于虚拟机镜像,如果你有面向对象的编程经验,也可以把它理解为一个实体类(Class)。
  • 容器 (container)
    简单理解为一个沙盒,用来运行和隔离我们开发的应用程序。你可以理解为正在运行的一个虚拟机,也可以理解为通过实体类Clss创建的一个对象。镜像是静态的,容器是动态的
  • 仓库 (repository)
    仓库就是集成存放镜像的地方,Docker仓库类似于代码仓库,如果你有Git和Maven的使用经验,那就很好理解了。
    官方提供的仓库为Docker Hub,但有时候国外网速不太理想,因此国内云厂商如阿里云、网易云等也提供了镜像仓库的本地源,当然也可以自己搭建私有仓库。

3. 为什么要用Docker?

要搞清楚我们为什么要用Docker,那就来先看看Docker都能干些啥?

  • 1.更高效的利用系统资源
    由于容器不需要硬件虚拟以及运行完整操作系统等额外开销,Docker对系统资源的利用率更高。
    无论是应用执行速度、内存损耗或者文件存储速度,都要比传统虚拟机技术更高效。因此,相比虚拟机技术,一个相同配置的主机,往往可以运行更多的应用。
  • 2.更快速的启动时间
    传统的虚拟机技术启动应用服务往往需要数分钟,而Docker容器应用由于直接运行于宿主机内核,无需启动完整的操作系统,因此可以做到秒级、甚至毫秒级的启动时间。大大的节约了开发、测试、部署的时间。
  • 3.一致的运行环境
    开发过程中一个常见的问题是环境一致性问题。由于开发环境、测试环境、生产环境不一致,导致有些bug并未在开发过程中被发现。
    而Docker的镜像提供了除内核外完整的运行时环境,确保了应用运行环境的一致性,从而不会再出现“这段代码在我机器上没问题啊”这类问题。
  • 4.持续交付和部署
    对开发和运维人员来说,最希望的就是一次创建或配置,可以在任意地方正常运行。
    使用Docker可以通过定制应用镜像来实现持续集成、持续交付、部署。开发人员可以通过Dockerfile来进行镜像构建,并结合 持续集成(Continuous Integration)系统进行集成测试,
    而运维人员则可以直接在生产环境中快速部署该镜像,甚至结合 持续部署(Continuous Delivery/Deployment) 系统进行自动部署。
    而且使用 Dockerfile 使镜像构建透明化,不仅仅开发团队可以理解应用运行环 境,也方便运维团队理解应用运行所需条件,帮助更好的生产环境中部署该镜像。
  • 5.更轻松的迁移
    由于Docker确保了执行环境的一致性,使得应用的迁移更加容易。Docker可以在很多平台上运行,无论是物理机、虚拟机、共有云、私有云,甚至是笔记本,其运行结果是一样的。
    因此用户可以很轻易的将一个在平台上运行的应用,迁移到另一个平台上,而不用担心环境变化而导致应用无法正常运行的情况。

二、Docker安装

1. Linux安装

1.1 Ubuntu 安装Docker

apt-get install docker.io

1.2 CentOS 安装Docker

yum -y install docker-io

如果 运行 docker images 命令正常, 则表示可以在本电脑使用了。

2. Docker配置加速

2.1 为什么要使用加速器

因为有GFW,它会降低我们访问外网站的速度,甚至是屏蔽掉部分外网
而且,Docker官方镜像网站的服务器在国外,距离较远,也会降低拉取镜像的速度
所以我用可以使用加速器,加快在国内获取Docker官方镜像的速度

2.2 Linux 用户配置加速器

修改 /etc/docker/daemon.json 文件并添加上registry-mirrors 键值。

{
    "registry-mirrors": ["https://registry.docker-cn.com"]
}

三、Docker使用

1. 相关网站

1.1 官网

https://www.docker.com/

从官网可以看到Docker分为社区版(CE)和企业版(EE),一般情况下使用社区版即可。

1.2 在线Docker练习

https://labs.play-with-docker.com/

该网站是Docker船长为了帮助大家学习Docker而花了几天时间开发的一款基于浏览器的产品,play-with-docker,人称PWD,它是一个Docker的演练场。
它可以让用户在几秒钟内在浏览器中体验免费的Alpine Linux虚拟机,运行Docker命令,可以构建、运行Docker容器,甚至可以在Docker Swarm模式下创建集群,除了演练场之外,PWD还包含了一个由大量Docker labs实例和测试。

2. Docker常用命令

指令 说明
docker images 查看已下载的镜像
docker rmi 镜像名称:标签名 删除已下载的镜像
docker search 镜像 从官方仓库(hub.docker.com)查找镜像
docker pull 镜像名称:标签名 标签名默认是latest,代表最新版本
docker run 创建容器
docker ps 列出运行中的容器
docker ps -a 列出所用的容器(运行、未运行)
docker rm 容器名称 删除停止的容器
docker rm -f 容器名称 删除运行中的容器
docker start 容器名称 启动容器
docker stop 容器名称 停止容器
docker restart 容器名称 重启容器
docker exec 执行容器中的命令
docker run … -v 主机目录:容器中的目录 … 挂载硬盘
docker cp 源目录 目标目录 复制文件
  • 挂载硬盘
    为了能够保存(持久化)数据以及共享容器间的数据,Docker 提出了 Volume 的概念,
    可以使用 -v 这个参数,将容器中的一个目录或者文件 和主机上的目录和文件进行绑定,绑定之后,修改主机上的这个文件就相当于修改了容器中的文件,删除容器之后,绑定的目录和文件还在主机(不会被删除)
相关标签: docker