生产环境部署与协同开发 Docker(一)

本文涉及的产品
日志服务 SLS,月写入数据量 50GB 1个月
简介: 生产环境部署与协同开发 Docker(一)

一、Docker介绍和安装

1.1 什么是docker

Docker 是一个开源的应用容器引擎,基于 Go 语言 并遵从 Apache2.0 协议开源。

logo解释:

标志是一头鲸鱼携带着一堆容器。它正在向您发送这些信息的途中。Docker直译过来是码头工人,然而Docker给人的第一感觉是容器,容器技术英译为Linux Container, Container的直译有集装箱,容器两个意思。

什么是"集装箱技术"

我们都知道码头里的集装箱是运载货物用的,它是一种按规格标准化的钢制箱子。集装箱的特色,在于其格式划一,并可以层层重叠, 集装箱与集装箱之间互不影响于是乎,IT领域借鉴了这一理念,大家就在想,有没有可能大家 只需要关注程序本身?

我们都知道码头里的集装箱是运载货物用的,它是一种按规格标准化的钢制箱子。集装箱的特色, 「在于其格式划一,并可以层层重叠, 集装箱与集装箱之间互不影响」

Docker是一个开源的应用容器引擎,开发者可以打包他们的应用及依赖到一个可移植的容器中,发布到流行的Linux机器上,也可实现虚拟化。

重心:

Docker其实就是可以打包程序和运行环境,把环境和程序一起发布的容器。

1.2 为什么要使用Docker

Docker容器虚拟化的好处

开发者需要能方便高效构建应用,并且任何时间任何地点都可以获取。就比如我在本地将jdk和tomcat打包直接放到阿里云平台上,就不需要在阿里云上配置环境了。这样可以节省时间和降低风险,提高开发效率。

Docker在开发和运维中的优势

对开发和运维( DevOps)人员来说,可能最梦寐以求的就是一次性地创建或配置,可以在任意环境、任意时间让应用正常地运行。而Docker恰恰是可以实现这一终极目标的瑞士军刀。

优势:

  • 更快速的交付和部署
  • 更高效的资源利用
  • 更轻松的迁移和扩展
  • 更简单的更新管理

Docker与虚拟机比较

作为一种轻量级的虚拟化方式,Docker在运行应用上跟传统的虚拟机方式相比具有显著优势。

特性 容器 虚拟机
启动速度 秒级 分钟级
磁盘使用 一般为MB 一般为GB
性能 接近原生 弱于
系统支持量 单机支持上千个容器 一般几十个
隔离性 完全隔离 完全隔离

1.3 虚拟化与Docker

虚拟化技术是一个通用的概念,在不同领域有不同的理解。在计算领域,一般指的是计算虚拟化或通常说的服务器虚拟化。

简单的说,「虚拟化」,顾名思义,就是「虚拟」的,是「假」的,是形而上的,是观念上、逻辑上的划分。

举栗说明

假设你现在手头上有一套房子,并且你要把它给租出去,租金的市场价是2000元/月。那么有没有办法把它租得更贵,获得6000元的租金呢?你想到了两个办法:

  1. 找一个不差钱的傻X租户,让他每月交6000元,但是这种人不大好找。
  2. 把房子拆成4个小房子租给4个单身狗,租金为1500元/人/月。

这些房子其实就是一些电脑资源,例如服务器啊、内存啊、网络啊等等。虚拟化技术就是将一套房子划分为4个功能完善的小房子,提高资源的使用效率。

虚拟化分类:

  • 完全虚拟化(VMware)
  • 硬件辅助虚拟化
  • 部分虚拟化
  • 超虚拟机化
  • 操作系统虚拟化 (docker)

什么是物理机

什么是虚拟机

什么是Docker

1.4 Docker的核心概念

Docker技术的三大核心概念,分别是:

  • 镜像(Image)
  • 容器 (Container)
  • 仓库 (Repository)

Docker镜像

当我们使用 Docker 运行一个应用程序的时候,我们需要首先定义一个 Docker 镜像。Docker 镜像是一个只读模板,包含运行应用程序所需的所有内容,例如代码、库文件、运行环境等等。也可以把它看作是一个容易复制和分享的“快照”。

Docker 镜像是由一个或多个文件系统层构成,每个文件系统层都包含着一个应用程序运行所需的不同部分。例如一个镜像可能包含操作系统,另一个镜像可能只包含 Django 应用程序及其依赖项。这些文件系统层会形成一个完整镜像,供 Docker 环境使用。

镜像从何而来

  • 从Docker Hub下载 maven-> 中央仓库
  • 通过Docker file自己创建出来

Docker容器

相对于镜像,容器包含的内容要比镜像更丰富,容器除了有镜像的内容之外,还具有独立的文件系统、运行时状态和网络栈等信息。 具体来说,一个镜像只是一个只读的文件系统,其中包含了应用程序运行所需的各种文件和依赖,而容器则是一个可运行的实例,它在启动时会从镜像创建并启动,它有自己的文件系统、进程空间、网络和运行时状态,容器中的文件系统是可写的,并且可以在容器运行时随意修改。另外,容器还有独立的网络和环境变量等上下文信息。 因此,镜像和容器虽然有相似之处,但它们的作用不同,具有不同的特性和功能。镜像是一种打包和分发应用程序的标准格式,是一种“静态”的概念,而容器则是镜像的“动态”实例,是真正运行应用程序的载体。容器是镜像的运行时状态,拥有更完整的运行环境和更强的动态交互能力。

注意:

容器和镜像一样,也是若干层的叠加,唯一区别是所有只读层的最上面一层,是一层可读可写层,可以记住这个简单的公式:容器 = 容器镜像 + 可读可写层

Docker仓库

     Docker 仓库是一个集中存储、管理和分享 Docker 镜像的平台。它可以供开发者或组织存储和分享创建的 Docker 镜像,并可用作构建、测试和部署应用程序的中心化仓库。在 Docker 架构中,一个 Docker 镜像由多个层次组成的文件系统构成。而 Docker 仓库是用于存储这些 Docker 镜像的平台,并且支持创建私有或公共镜像。

     Docker 仓库分为两类:公共仓库和私有仓库。最著名的是公共 Docker Hub 仓库,它是基于互联网上的 Docker 镜像的公共服务,使得全球的开发者可以轻松地分享和获取 Docker 镜像资源,并且通过命令行很容易地访问公共仓库中的镜像。除此之外,Docker 还允许用户创建私有仓库,可以通过企业内部网络,来实现对项目特定的镜像访问和使用。私有仓库提供了更高的安全性和控制级别,让团队内部可以在不向公众公开应用和环境的情况下,更好地管理 Docker 镜像。

      总的来说,Docker 仓库是构建一个完整的 Docker 生态系统中非常重要的一环,可以方便地存储和共享 Docker 镜像,提高开发效率和部署速度。

 

注意:

Docker利用仓库管理镜像的设计理念与Maven非常相似

咱们再来理解docker的两句口号就更好理解了

  • 「Build, Ship and Run (搭建,发送,运行)」
  • 「Build once,Run anywhere (搭建一次,到处运行)」

1.5 Docker安装

1、系统环境

序号 软件 版本
1 Centos 7.5
2 Linux内核 3.8之上

解释:

CentOS是一款基于Linux操作系统的免费、开源、企业级的操作系统,它是由Red Hat Enterprise Linux源代码编译而来的。CentOS具有可靠的性能、稳定性和安全性,因此被广泛应用于服务器和企业级应用。CentOS提供了许多功能性强大的服务和软件,比如Web服务器、数据库服务器、邮件服务器等。CentOS的开发和维护由社区志愿者组成的开发团队进行。

CentOS是一个基于Linux内核的操作系统,它是开源的且免费。

Linux是一个开放源代码的操作系统内核,更像是其他许多操作系统的“底层”。以下是CentOS和Linux之间的区别:

  1. CentOS是一种Linux操作系统,但Linux并不一定是由CentOS提供。Linux是一个底层内核,而CentOS是基于这个内核的衍生操作系统。
  2. CentOS是免费的,而其他一些Linux发行版可能需要支付许可费用。
  3. CentOS是由社区管理和支持的,而Linux由一个大型社区和几个大公司支持和开发。
  4. CentOS通常在企业环境中应用得更广泛,而Linux则更广泛地应用于许多设备和场景(例如, Android手机、智能电视、路由器、计算机等)。

总的来说,CentOS和Linux都是可靠和可定制的操作系统,具有广泛的应用领域。差异在于CentOS是一种特定的 Linux 发行版,而 Linux 更像是一个底层内核。

2、关闭防火墙

systemctl stop firewalld

3、关闭selinux

vim /etc/selinux/config
SELINUX=disabled

4、安装docker引擎

yum install -y  docker

5、启动docker

systemctl start docker

6、设置docker自启动

systemctl enable docker

7、测试是否安装成功

docker run hello-world

二、Docker核心命令

2.1 镜像命令

Docker运行容器前需要本地存在对应的镜像,如果镜像不存在本地,Docker会尝试先从默认镜像仓库下载(默认使用Docker Hub公共注册服务器中的仓库),用户也可以通过配置,使用自定义的镜像仓库。

镜像下载

镜像是Docker运行容器的前提。

语法格式:

docker pull 镜像名字:[tag]
docker pull centos   #下载最新的centos版本

注意:

如果不指定tag,则下载Docker Hub公共注册服务器中仓库的最新版本。

查看镜像

列出本地主机上已有的镜像。

[root@localhost ~]# docker images

镜像搜索

搜索远端仓库中共享的镜像,默认搜索Docker Hub官方仓库中的镜像。

docker search  [镜像名字]

删除镜像

docker rmi  -f  源名字
docker rmi  -f image id

2.2 容器命令

当我们有了镜像,才可以创建容器, 创建一个centos容器来学习

创建容器(create -it命令)

Docker的容器十分轻量级,用户可以随时创建或者删除容器。容器的创建依赖镜像。

docker create -it 镜像名字

注意:

使用docker create命令新建的容器处于停止状态,可以使用docker start命令来启动它。

列出容器 (ps 命令)

docker ps

参数:

  • -a: 显示未启动容器
  • -q:返回容器id号

开启容器(start命令)

docker start 容器id(或者是容器id前两位)

新建并启动容器(run命令)

启动容器有两种方式,一种是基于镜像新建一个容器并启动,另外一个是将在终止状态( stopped)的容器重新启动。所需要的命令主要为docker run,等价于先执行docker create命令,再执行docker start命令。

docker run 镜像名字 /bin/echo '启动时显示的信息'

注意:这样创建的容器在输出信息后就销毁了。

Docker在后台运行的标准操作包括:

  • 检查本地是否存在指定的镜像,不存在就从公有仓库下载。
  • 利用镜像创建并启动一个容器。
  • 分配一个文件系统,并在只读的镜像层外面挂载一层可读写层。
  • 从宿主主机配置的网桥接口中桥接一个虚拟接口到容器中去。
  • 从地址池配置一个IP地址给容器。
  • 执行用户指定的应用程序。
  • 执行完毕后容器被终止。

守护态运行

更多的时候,需要让Docker容器在后台以守护态(Daemonized)形式运行。用户可以通过添加-d参数来实现。

docker run -d 镜像名字 /bin/sh -c  "while true; do echo hello world ;sleep 1 ;done"

下面命令则启动一个bash端,运行用户交互:

docker run -t -i 镜像名字  /bin/bash

终止容器(stop命令)

docker stop 容器id

处于终止状态的容器,可以通过docker start命令来重新启动:

docker start 容器id

此外,docker restart命令会将一个运行态的容器终止,然后再重新启动

docker restart 容器id

进入容器(exec命令

docker exec -it 容器id  /bin/bash

注意:

进入容器的前提是容器是开着的。容器与外面的环境是完全隔离的,容器内的目录有些可能会和外面的目录相同。

退出容器

#如果docker容器在启动的时候没有加 -d 参数
exit # 会直接停止同期并退出
Ctrt + p + q # 容器不停止 并退出

删除容器(rm命令)

docker rm 容器id

参数:

  • -f, --force=false强行终止并删除一个运行中的容器。
  • -l, --link=false删除容器的连接,但保留容器。
  • -V,--volumes=false删除容器挂载的数据卷

2.3 其他命令

查看日志

docker logs [参数] 容器id

参数:

  • -f, --follow 跟踪实时日志
  • --since string 显示自某个timestamp之后的日志,或相对时间,如42m(即42分钟)
  • --tail string 从日志末尾显示多少行日志, 默认是all
  • -t, --timestamps 显示时间戳
  • --until string 显示自某个timestamp之前的日志,或相对时间,如42m(即42分钟)

查看docker容器里面的进程

docker top 容器id

从容器拷贝文件到主机上

docker cp 容器id:容器内文件路径   目录路径

相关文章
|
6天前
|
弹性计算 运维 持续交付
探索Docker容器化技术及其在生产环境中的应用
探索Docker容器化技术及其在生产环境中的应用
36 5
|
7天前
|
人工智能 API 数据库
FastGPT一站式解决方案[1-部署篇]:轻松实现RAG-智能问答系统(含sealos云端部署、docker部署、OneAPI&Xinference模型接入)
【9月更文挑战第5天】 FastGPT一站式解决方案[1-部署篇]:轻松实现RAG-智能问答系统(含sealos云端部署、docker部署、OneAPI&Xinference模型接入)
 FastGPT一站式解决方案[1-部署篇]:轻松实现RAG-智能问答系统(含sealos云端部署、docker部署、OneAPI&Xinference模型接入)
|
17天前
|
NoSQL 关系型数据库 Redis
mall在linux环境下的部署(基于Docker容器),Docker安装mysql、redis、nginx、rabbitmq、elasticsearch、logstash、kibana、mongo
mall在linux环境下的部署(基于Docker容器),docker安装mysql、redis、nginx、rabbitmq、elasticsearch、logstash、kibana、mongodb、minio详细教程,拉取镜像、运行容器
mall在linux环境下的部署(基于Docker容器),Docker安装mysql、redis、nginx、rabbitmq、elasticsearch、logstash、kibana、mongo
|
17天前
|
虚拟化 Docker Windows
window 10专业版部署docker环境
本文介绍了如何在Windows 10专业版上部署Docker环境,包括安装步骤、配置镜像加速以及可能遇到的错误处理。
41 2
window 10专业版部署docker环境
|
5天前
|
Devops jenkins 持续交付
DevOps实践:构建和部署一个Docker化的应用
【9月更文挑战第14天】在当今快节奏的软件开发领域,DevOps已经成为提升效率、加速交付的关键。本文将引导你理解DevOps的核心概念,并通过一个实际的示例—构建和部署一个Docker化的应用—来深入探讨其实践方法。我们将从简单的应用出发,逐步实现Docker容器化,并最终通过CI/CD流水线自动化部署过程。这不仅是对DevOps流程的一次实操演练,也是对现代软件开发理念的一次深刻体验。
|
17天前
|
NoSQL 关系型数据库 数据库
JumpServer的Docker部署实战案例
JumpServer的Docker部署实战案例,详细介绍了JumpServer的概述、环境准备、基于Docker的快速部署步骤,以及如何访问JumpServer的WebUI。
20 0
|
1月前
|
运维 Java Devops
阿里云云效操作报错合集之部署docker时遇到报错,该怎么办
本合集将整理呈现用户在使用过程中遇到的报错及其对应的解决办法,包括但不限于账户权限设置错误、项目配置不正确、代码提交冲突、构建任务执行失败、测试环境异常、需求流转阻塞等问题。阿里云云效是一站式企业级研发协同和DevOps平台,为企业提供从需求规划、开发、测试、发布到运维、运营的全流程端到端服务和工具支撑,致力于提升企业的研发效能和创新能力。
|
运维 Kubernetes 前端开发
【云原生】阿里云服务器部署 Docker Swarm集群
阿里云服务器 一键部署 Docker Swarm 集群!
638 0
【云原生】阿里云服务器部署 Docker Swarm集群
|
弹性计算 数据可视化 关系型数据库
使用阿里云部署基于docker的mysql云服务
本篇文章将介绍如何使用阿里云安装docker、部署mysql服务,并远程连接至远端mysql
633 1
使用阿里云部署基于docker的mysql云服务
|
弹性计算 Linux Shell
阿里云一键部署 Docker Datacenter
使用阿里云ROS一键部署Docker Datacenter
12265 1