Docker环境安装

news2024/11/9 9:44:30

Docker环境安装

      • Docker简介
        • Docker工作原理
        • Docker的应用场景
        • Docker 的优点
      • CentOS Docker 安装与配置
        • Docker 安装
        • Docker 配置
      • Docker容器概念
        • Docker容器操作
          • 拉取镜像
          • 删除镜像
          • 容器相关命令
          • 创建并启动容器
          • 停止和恢复容器
          • 删除容器

Docker简介

  • Docker 是一个开源的应用容器引擎,基于 Go 语言并遵从 Apache2.0 协议开源;
  • Docker 可以让开发者打包他们的应用以及依赖包到一个轻量级、可移植的容器中,然后发布到任何流行的 Linux 机器上,也可以实现虚拟化;
  • 容器是完全使用沙箱机制,相互之间不会有任何接口,更重要的是容器性能开销极低;
  • Docker 从 17.03 版本之后分为 CE(Community Edition-社区版)和 EE(Enterprise Edition-企业版)

Docker工作原理

在这里插入图片描述

docker引擎是一个C/S结构的应用

Server是一个常驻进程

REST API实现了client和server间的交互协议

CLI实现容器和镜像的管理,用户通过命令行对其操作

Docker的应用场景

  • Web 应用的自动化打包和发布。
  • 自动化测试和持续集成、发布。
  • 在服务型环境中部署和调整数据库或其他的后台应用。
  • 从头编译或者扩展现有的 OpenShift 或 Cloud Foundry 平台来搭建自己的 PaaS 环境。

Docker 的优点

Docker 是一个用于开发,交付和运行应用程序的开放平台。能够将应用程序与基础架构分开,从而可以快速交付软件。借助 Docker,可以与管理应用程序相同的方式来管理基础架构。通过利用 Docker 的方法来快速交付,测试和部署代码,大大减少编写代码和在生产环境中运行代码之间的延迟。

CentOS Docker 安装与配置

Docker 安装

使用官方安装脚本自动安装,借助阿里云镜像进行加速

curl -fsSL https://get.docker.com | bash -s docker --mirror Aliyun

或使用国内 daocloud 一键安装命令

curl -sSL https://get.daocloud.io/docker | sh

安装成功后,可以通过docker --version查看docker版本

Docker 配置

配置docker国内源

cd /etc/docker 进入该目录下,使用ls 命令查看该目录下是否有daemon.json文件,如果没有,使用vim daemon.json编辑文件,插入内容

{
  "registry-mirrors": [
    "https://docker.mirrors.ustc.edu.cn",
    "https://registry.docker-cn.com",
    "https://hub-mirror.c.163.com",
    "https://mirror.ccs.tencentyun.com",  
    "https://reg-mirror.qiniu.com"
 ]
}

保存成功后,执行systemctl daemon-reload进行重载,然后执行systemctl start docker重新启动docker

Docker服务

systemctl status docker   #查看docker状态
systemctl enable docker   #设置默认开机启动
systemctl start docker    #启动docker
systemctl restart docker  #重新启动docker
systemctl stop docker     #停止docker

Docker容器概念

镜像(Images):容器的模板,包括容器运行时所需要的数据

容器(Container):运行的进程,依赖镜像运行,镜像的具体化

容器类似于WMware虚拟机,WMware虚拟机可以根据CentOS镜像创建多个CentOS系统,一个镜像可以创造出多个容器。而容器内可以创建对应的环境,如容器1:Tomcat+Java;容器2:PHP+Mysql。容器之间互不影响

Docker容器操作

拉取镜像

想要运行容器必须提前下载好对应的镜像,比如想运行一个mariadb10.7版本的容器,需要先在本地有这个镜像才能运行。

镜像需要在镜像仓库上去下载,就像代码是托管在代码仓库上的,默认情况下需要从公有仓库,也就是dockerhub上下载镜像,dockerhub上有海量的镜像提供选择,构建环境的时候可以直接下载其中的镜像来使用

从镜像仓库拉取镜像:docker pull 镜像:Tag,Tag相当于镜像工具的版本,可省略,省略则默认为拉取最新版本

docker pull mariadb:10.7
docker pull mysql:8.0
docker pull nginx

/var/lib/docker/目录下,有个iamge目录,该目录下存放的,则是从镜像仓库上下载下来的镜像

可以通过docker imagesdocker image ls命令查看本地有哪些镜像

[root@localhost ~]# docker images
REPOSITORY   TAG       IMAGE ID       CREATED       SIZE
nginx        latest    6efc10a0510f   3 days ago    142MB
mariadb      10.7      4a632f970181   4 weeks ago   401MB
mysql        8.0       412b8cc72e4a   8 days ago    531MB
删除镜像

删除镜像,需提前删除对应的容器:docker rmi 镜像id或者镜像名

docker rmi mariadb:10.7
docker rmi 6efc10a0510f

如果拉取镜像的时候指定了版本,指定镜像名删除镜像的时候,也需要带上版本号

容器相关命令
docker run <options> 镜像:tag commands   # 新建一个容器并启动

docker stop 容器ID或名称                  # 停止运行中的容器
docker start 容器ID或名称                 # 启动停止的容器
docker restart 容器ID或名称               # 重启容器

docker logs -f 容器ID/名称				# 查看容器日志
docekr inspect 容器ID/名称				# 查看容器详细信息
创建并启动容器

docker run <options> 镜像:tag commands

options表示选项,用于运行容器时一些额外的配置,commands表示运行在容器内部的命令,比如容器内部要运行一个python脚本,commands可以替换为 python commands。

常用的选项有:

-d 指定容器运行后台 
-i 用于控制台交互 
-t 支持终端登录,通常和-i参数一起使用 
-p 映射容器端口,用法:-p 宿主机端口:容器端口 
-v 挂载容器存储卷,用法:-v 宿主机路径:容器路径
-e 设置容器的环境变量用于容器内的应用程序进行相关配置,用法 -e 环境变量名=变量值
--name=“container_name” 指定容器的名称
--rm 退出容器时删除容器 与--restart冲突
--restart=“always” 容器停止后,docker再次启动,自动重启容器 与 --rm冲突

例如:

docker run -it -p 8888:3306 -e MARIADB_ROOT_PASSEORD=test mariadb:10.7

mariadb服务默认监听3306端口,但是容器内部的网络和宿主机不在一个网段,所以我们把该端口映射到了宿主机的3306端口,现在我们通过访问宿主机的8888端口就可以访问mariadb了

-e MARIADB_ROOT_PASSEORD=test这行指配置mariadb的root账号的密码为test

此时我们的进程是运行在前台的,如果关闭窗口就可能造成容器进程退出,所以如果想让容器一直不退出,可以在运行的时候加上-d参数,让容器进程作为守护进程。

docker run -it -d -p 9999:3306 -e MYSQL_ROOT_PASSEORD=123456 --name="db_mysql" 
mysql:8.0

如果要删除容器,但是又要备份容器的数据,可以通过-v参数指定挂载容器存储卷,设置容器目录/var/lib/mysql映射到本地目录/data/mariadb/data

mkdir -p /data/mariadb/data

docker run -it -d -p 8889:3306 -e MARIADB_ROOT_PASSEORD=123456  --name="db_mariadb"  -v /data/mariadb/data:/var/lib/mysql mariadb:10.7

还可以通过docker cp命令将docker容器内的配置文件信息复制到宿主机上,将nginx_test容器内Nginx的/etc/nginx目录下的配置文件信息,复制到宿主机的/data/nginx/config目录下

mkdir -p /data/nginx/config

docker run -it -d -p 8080:80 --name="nginx_test" nginx

docker cp nginx_test:/etc/nginx  /data/nginx/config

此时可以通过 docker ps 命令查看运行中的容器

如果没有指定容器名称,会随机分配,通常情况下,创建容器的时候都指定容器的名称,这样停止容器的时候,方便操作

[root@localhost ~]# docker ps
CONTAINER ID   IMAGE       COMMAND                   CREATED          STATUS          PORTS                                                  NAMES
75812ef6b412   mysql:8.0   "docker-entrypoint.s…"   3 minutes ago    Up 3 minutes    33060/tcp, 0.0.0.0:9999->3306/tcp, :::9999->3306/tcp   db_mysql
a21665817d61   mariadb     "docker-entrypoint.s…"   14 minutes ago   Up 14 minutes   0.0.0.0:8888->3306/tcp, :::8888->3306/tcp              busy_dirac

参数内容:CONTAINER ID指容器id;IMAGE指使用的镜像名称;COMMAND指启动容器时运行的命令;STATUS指容器状态;PORTS指容器端口映射信息;NAMES指容器名称;

停止和恢复容器

我们可以通过startstop命令 来启动或停止一个容器,参数为容器ID或者容器名

docker stop 75812ef6b412    #停止一个容器 75812ef6b412
docker stop db_mysql		#停止mysql服务的容器 
docker start 75812ef6b412   #恢复停止中的容器 75812ef6b412

若容器在运行过程中发生异常而退出,docker ps命令是看不到终止的进程的,可以通过-a参数列出所有的进程,包括已经停止的(状态为Exited)

CONTAINER ID   IMAGE      	 COMMAND                   CREATED          STATUS                      PORTS                                       NAMES
75812ef6b412   mysql:8.0   	 "docker-entrypoint.s…"   13 minutes ago   Exited (0) 2 seconds ago                                                db_mysql
a21665817d61   mariadb:10.7	 "docker-entrypoint.s…"   24 minutes ago   Up 24 minutes               0.0.0.0:8888->3306/tcp, :::8888->3306/tcp   busy_dirac
删除容器

删除容器使用 docker rm 命令,可以通过容器名或者容器id进行删除

docker rm [OPTIONS] CONTAINER [CONTAINER...]
OPTIONS说明:
-f :通过 SIGKILL 信号强制删除一个运行中的容器。
-l :移除容器间的网络连接,而非容器本身。
-v :删除与容器关联的卷。

docker rm -f db_mysql
docker rm -f 75812ef6b412    

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/420680.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

4年外包上岸,我只能说这类公司能不去就不去

我大学学的是计算机专业&#xff0c;毕业的时候&#xff0c;对于找工作比较迷茫&#xff0c;也不知道当时怎么想的&#xff0c;一头就扎进了一家外包公司&#xff0c;一干就是4年。现在终于跳槽到了互联网公司了&#xff0c;我想说的是&#xff0c;但凡有点机会&#xff0c;千万…

ChatGPT背后的AI背景、技术门道和商业应用(万字长文,建议收藏)

作者&#xff1a;京东科技 李俊兵 各位看官好&#xff0c;我是球神&#xff08;江湖代号&#xff09;。 自去年11月30日ChatGPT问世以来&#xff0c;迅速爆火出圈。 起初我依然以为这是和当年Transformer, Bert一样的“热点”模型&#xff0c;但是当一篇篇文章/报告不断推送…

计算机网络面试八股文攻略(二)—— TCP 与 UDP

一、基础概念 TCP 与 UDP 是活跃于 运输层 的数据传输协议 TCP&#xff1a;传输控制协议 &#xff08;Transmission Control Protocol&#xff09;–提供面向连接的&#xff0c;可靠的数据传输服务。具体来说就是一种要建立双端连接才能发送数据&#xff0c;能确保传输可靠的…

Hive DDL和DML

目录 一 DDL 1.1 数据库 1.1.1 创建数据库 1.1.2 查询数据库 1.1.3 修改数据库 1.1.4 删除数据库 1.1.5 切换当前数据库 1.2 表 1.2.1 创建表 1.2.2 查看表 1.2.3 修改表 3.2.4 删除表 3.2.5 清空表 二 DML 2.1 Load 2.2 Insert 2.2.1 将查询结果插入表中 2…

C++程序设计函数部分(定义+实例)

目录 1、内联函数 2、默认形参值函数 3、重载函数 4、系统函数 1、内联函数 &#xff08;1&#xff09;定义 在函数前面加上 inline 申明 eg&#xff1a; inline double CalArea(double radius) { return 3.14*radius*radius; } void main() { double r(3.0); dou…

后缀数组的应用:[Leetcode] 321.拼接最大数(困难)

题目描述 给定长度分别为 m 和 n 的两个数组&#xff0c;其元素由 0-9 构成&#xff0c;表示两个自然数各位上的数字。现在从这两个数组中选出 k (k < m n) 个数字拼接成一个新的数&#xff0c;要求从同一个数组中取出的数字保持其在原数组中的相对顺序。 求满足该条件的…

ChatGPT 究竟在做什么?它为何能做到这些?(1)

ChatGPT能够自动生成一些表面上看起来像人类写出的文字的东西&#xff0c;是一件很厉害且出乎大家意料的事。那么&#xff0c;它是如何做到的呢&#xff1f;又是为何能做到呢&#xff1f;我在这里想大致介绍一下ChatGPT的内部机理&#xff0c;然后探讨一下为什么它能很好地生成…

ZNS 架构实现 : 解决传统SSD问题的高性能存储栈设计

声明 主页&#xff1a;元存储的博客_CSDN博客 依公开知识及经验整理&#xff0c;如有误请留言。 个人辛苦整理&#xff0c;付费内容&#xff0c;禁止转载。 内容摘要 2.2 ZNS 的架构实现 先看看 支持zone 存储的 SMR HDD 以及 支持 zonefs 的 nvme ssd 的整个存储栈形态 其中对…

前端项目-12-个人中心-二级路由配置-导航守卫-懒加载

目录 1-个人中心 1.1-个人中心路由注册 1.2-拆分二级路由组件 1.3-动态渲染我的订单页面 2-导航守卫优化 2.1-用户未登录导航守卫优化 2.2-路由独享 2.3-组件内守卫 3-懒加载 3.1-图片懒加载 3.2-路由懒加载 4-map文件处理 1-个人中心 需求&#xff1a;当用户点击支…

计算机图形学 | 实验五:模型导入

计算机图形学 | 实验五&#xff1a;模型导入计算机图形学 | 实验五&#xff1a;模型导入模型加载库AssimpAssimp简介Assimp构建Mesh && Model 类的创建MeshModel绘制模型华中科技大学《计算机图形学》课程 MOOC地址&#xff1a;计算机图形学&#xff08;HUST&#xff…

进阶C语言

1.数据的存储 1.1 为什么数据在内存中存放的是补码 因为CPU只有加法器,而使用补码&#xff0c;就可以将符号位和数值域统一处理(即统一处理加法和减法)且不会需要额外的硬件电路。 1.2 为什么会有大小端 这是因为在计算机系统中,是以字节为单位的,比如: 每个地址单元都对应着…

双指针算法初阶

前言&#xff1a;首先&#xff0c;这是不是你所了解的双指针算法&#xff1f; for (int i 0; i < n; i) {for (int j 0; j < n; j){...} } 那你就要继续往下看了&#xff0c;双指针算法可不是简单的两层的for循环暴力&#xff0c;这并不能起到时间优化的作用。 那话…

基于html+css的图片展示9

准备项目 项目开发工具 Visual Studio Code 1.44.2 版本: 1.44.2 提交: ff915844119ce9485abfe8aa9076ec76b5300ddd 日期: 2020-04-16T16:36:23.138Z Electron: 7.1.11 Chrome: 78.0.3904.130 Node.js: 12.8.1 V8: 7.8.279.23-electron.0 OS: Windows_NT x64 10.0.19044 项目…

educoder实训——数值类型

第1关:三角形周长及面积 任务描述 输入的三角形的三条边a、b、c 的长度,计算并依次输出三角形的周长和面积,结果严格保留2位小数。测试用例的数据保证三角形三边数据可以构成三角形。 三角形面积计算公式: 其中s=(a+b+c)/2。 输入格式 分三行输入 3 个浮点数,表示三…

银行数字化转型导师坚鹏:金融数字化转型助力乡村振兴及案例

金融数字化转型助力乡村振兴及案例课程背景&#xff1a; 很多银行存在以下问题&#xff1a; 不清楚如何借助数字化转型助力乡村振兴&#xff1f; 不知道普惠金融模式和产品如何有效创新&#xff1f; 不知道数字化转型助力乡村振兴的成功案例&#xff1f; 课程特色&#xff1…

【用AI写周报,“卷死”同事】打造一款自动生成周报的微信小程序

文章目录前言步骤1&#xff1a;创建一个ChatGPT账号步骤2&#xff1a;创建一个微信小程序并配置API。步骤3&#xff1a;在微信开发者工具中创建一个新的微信小程序项目步骤4&#xff1a;创建ChatGPT API云函数步骤5&#xff1a;创建UI界面步骤6&#xff1a;创建发送邮件的云函数…

Kubernetes 1.27 正式发布

Kubernetes 1.27 正式发布&#xff0c;这是 2023 年的第一个版本。这个版本包括 60 项增强功能。其中 18 项增强功能进入 Alpha、29 项进入 Beta&#xff0c;还有 13 项升级为 Stable 稳定版。 主题和标识 Kubernetes v1.27 的主题是 Chill Vibes 新内容 冻结 k8s.gcr.io镜像…

replugin宿主与插件通信小结

近来replugin开发中遇到宿主和插件间需要通信的情形&#xff0c;思来只有进程间通信(IPC)才是比较好的宿主与插件的通信方式。而Android进程间通信主要有2种方式&#xff1a;Messenger和AIDL。 AIDL&#xff08;Android Interface Definition Language&#xff09;是Android接…

矩阵和线性代数的应用

矩阵和线性代数是数学中重要的概念&#xff0c;它们被广泛应用于物理、工程、计算机科学、经济学等众多领域。本文将讨论矩阵和线性代数的一些基本概念以及它们在实际应用中的重要性和影响。 一、矩阵和线性代数的基本概念 矩阵是由数字组成的矩形数组。它可以表示线性方程组…

线程池并发服务器

线程池技术 线程池技术是一种典型的生产者-消费者模型。 线程池技术是指能够保证所创建的任一线程都处于繁忙状态&#xff0c;而不需要频繁地为了某一任务而创建和销毁线程&#xff0c;因为系统在创建和销毁线程时所耗费的cpu资源很大。如果任务很多&#xff0c;频率很高&am…