IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 系统运维 -> Docker基础应用 -> 正文阅读

[系统运维]Docker基础应用

目录

前言

一、Docker简介

概述

Docker核心对象

镜像(Image)

容器(Container)

Docker应用架构分析

架构图

Docker运行机制

二、Docker安装及基本操作

卸载Docker

安装Docker

在线安装

Docker基本操作

启动服务

查看Docker状态

设置Docker开机自启

禁用Docker开机自启

重新启动Docker服务

查看Docker信息

停止docker服务

三、Docker常用操作

Docker镜像操作

下载镜像

浏览镜像文件

查看镜像详情

查看镜像历史

导出镜像文件

删除镜像文件

导入镜像文件

运行镜像文件

Docker容器操作

下载镜像

创建并启动容器

查看Docker中的容器

查看容器日志信息

停止或重启容器

进入指定容器

退出容器

删除容器

Docker数据卷操作

数据卷

数据卷操作

挂载主机目录

四、Dockerfile镜像制作

概述

准备工作

Dockerfile文件

运行镜像文件

示例:制作Sentinel镜像

五、Docker容器互联

简介

解决方案

创建网络

查看网络信息

实现容器互联

测试网络互通


前言

????????本文为学习笔记,记录一些doker的简单操作和流程,目的是方便开发,和便于后期查找、回忆。


一、Docker简介

概述

????????Docker是一个虚拟化平台(官网 https://www.docker.com/),诞生于 2013 年初,基于 Google 公司的 Go 语言进行实现。可以通过虚拟化方式,为应用提供可运行的容器。基于这种方式,可更快地打包、测试以及部署应用程序。

Docker核心对象

镜像(Image)

????????Docker 镜像是一个特殊的文件系统,除了提供容器运行时所需的程序、库、资源、配置等文件外,还包含了一些为运行时准备的一些配置参数(如匿名卷、环境变量、用户等)。例如JDK镜像、Centos镜像、MySQL镜像等。

容器(Container)

????????Docker容器可以将其理解为一个运行镜像的载体,镜像(Image)和容器(Container)的关系,就像是光盘和光驱。容器基于镜像创建、启动,然后运行镜像的中的文件。

Docker应用架构分析

架构图

Docker 是一种Client/Server架构的应用程序,如图所示:
(参考docker官网 https://docs.docker.com/get-started/overview/)

  • Docker Host是我们的docker宿主机(就是安装了docker的操作系统)
  • Registry是docker拉取镜像的远程仓库,提供大量的镜像供下载,下载完成之后保存在Images中。
  • Docker Daemon是docker的服务线程,处理Docker客户端命令。
  • Images 是Docker本地的镜像仓库,可以通过docker images查看镜像文件。

Docker运行机制

docker pull 执行过程:

(1)客户端将指令发送给docker daemon
(2)docker daemon 先检查本地images中有没有相关的镜像
(3)如果本地没有相关的镜像,则向镜像服务器请求,将远程镜像下载到本地

docker run 执行过程:

(1)检查本地是否存在指定的镜像,不存在就从公有仓库下载
(2)利用镜像创建并启动一个容器
(3)分配一个文件系(简版linux系统),并在只读的镜像层外面挂载一层可读写层
(4)从宿主机配置的网桥接口中桥接一个虚拟接口到容器中去
(5)从地址池配置一个 ip 地址给容器
(6)执行用户指定的应用程序

二、Docker安装及基本操作

卸载Docker

假如已经有docker,可通过执行如下指令卸载Docker:

sudo yum remove docker-ce \
                docker-ce-client \
                docker-client-latest \
                docker-common \
                docker-latest \
                docker-latest-logrotate \
                docker-logrotate \
                docker-engine

安装Docker

在线安装

第一步:安装一组工具

sudo yum install -y yum-utils 

?第二步:设置 yum 仓库地址

sudo yum-config-manager \
    --add-repo \
    https://download.docker.com/linux/centos/docker-ce.repo
sudo yum-config-manager \
     --add-repo \
     http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo

第三步:更新 yum 缓存

sudo yum makecache fast 

第四步:安装新版 docker

sudo yum install -y docker-ce docker-ce-cli containerd.io

第五步:查看docker 安装状态

docker info

第六步:启用Docker镜像加速(选做)

由于国内网络问题,需要配置加速器来加速。修改配置文件 /etc/docker/daemon.json
下面命令直接生成文件 daemon.json

cat <<EOF > /etc/docker/daemon.json
{
  "registry-mirrors": [
    "https://docker.mirrors.ustc.edu.cn",
    "http://hub-mirror.c.163.com"
  ],
  "max-concurrent-downloads": 10,
  "log-driver": "json-file",
  "log-level": "warn",
  "log-opts": {
    "max-size": "10m",
    "max-file": "3"
    },
  "data-root": "/var/lib/docker"
}
EOF

?说明:在执行如上指令时,保证你的登录用户为root管理员用户,并且设置好以后重启docker服务。

Docker基本操作

启动服务

 systemctl start docker

查看Docker状态

systemctl status docker

设置Docker开机自启

systemctl enable docker

禁用Docker开机自启

systemctl disable docker

重新启动Docker服务

 systemctl restart docker

查看Docker信息

docker info

停止docker服务

systemctl stop docker

三、Docker常用操作

Docker镜像操作

下载镜像

语法:docker pull 镜像名

docker pull hello-world

浏览镜像文件

docker images

查看镜像详情

语法:docker inspect 镜像名或镜像id

docker inspect hello-world

查看镜像历史

docker history hello-world

导出镜像文件

镜像导出(linux系统中的镜像文件下载到本地,例如window),导出后给他人使用。

docker save  hello-world | gzip > hello-world.tar.gz  

删除镜像文件

语法:docker image rm 镜像名或镜像id

docker image rm hello-world

导入镜像文件

镜像导入(要在hello-world.tar.gz 文件所在目录下执行)

docker load < hello-world.tar.gz  

运行镜像文件

基于镜像,启动容器运行。

docker run hello-world

Docker容器操作

以CentOS镜像为例,来测试容器的基本操作。

下载镜像

通过docker pull指令下载CentOS镜像:

docker pull centos:7

注:官方镜像仓库地址为 https://hub.docker.com/
下载完以后,查看centos7镜像文件。

docker images

创建并启动容器

基本语法解析:

docker run -it xxxx bash

其中:
1)xxxx 镜像名,或 image id 的前几位。
2)-it 这是两个参数(-i表示交互式操作, -t 表示终端)。
3)bash 表示进入操作终端,基于交互式进行相关操作(例如执行linux相关指令)。

通过docker启动运行 centos7镜像:

docker run -it centos:7 bash

查看Docker中的容器

查看docker运行中的容器:

docker ps

查看docker运行中的所有容器:

docker ps -a

查看容器日志信息

查看后台运行的容器输出结果,假如容器没有启动,要通过此指令去看一下错误日志。

docker container logs xxx  #xxx为容器id

停止或重启容器

停止运行中的容器:

docker container stop xxx  #xxx为容器id

重新启动容器:

docker container restart  #xxx为容器id

进入指定容器

当需要进入容器进行操作时(容器运行着),可以使用 docker exec 命令:

docker exec -it xxx bash  #xxx为容器id

退出容器

假如从宿主机进入了启动的容器,退出容器需要使用exit指令:

exit

删除容器

假如容器不用了,可执行删除操作:

docker container rm xxx  #xxx为容器id

注:如果删除运行中的容器,需要添加 -f 参数。

清理所有终止状态容器:

docker container prune

Docker数据卷操作

数据卷

????????数据卷是一个可供一个或多个容器使用的特殊目录,可以在容器之间共享和重用,默认会一直存在,即使容器被删除。

数据卷操作

第一步:创建数据卷

docker volume create container-vol

第二步:查看所有数据卷

docker volume ls

查看指定 数据卷 的信息:

docker volume inspect container-vol

查询的结果:

[
    {
        "Driver": "local",
        "Labels": {},
        "Mountpoint": "/var/lib/docker/volumes/container-vol/_data",
        "Name": "container-vol",
        "Options": {},
        "Scope": "local"
    }
]

第三步:启动挂载数据卷的容器

docker run -it --mount source=container-vol,target=/root centos:7 bash

#或者采用如下简写方式
docker run -it -v container-vol:/root centos:7 bash

注:-v container-vol:/root 是把数据卷 container-vol 挂载到容器的 /root 目录

第四步:删除数据卷(如果数据卷被容器使用则无法删除)

docker volume rm container-vol

清理无主数据卷:

docker volume prune

挂载主机目录

我们还可以在启动容器时,以目录直接挂载的方式进行数据操作:

docker run -it -v /usr/app:/opt/app centos:7 bash

其中:
1)/usr/app:为宿主机目录
2)/opt/app:为启动容器的一个目录
3)-v 用于指定挂载目录,如果本地目录(宿主机目录)不存在, Docker 会自动为你按照挂载目录进行目录的创建。

查看挂载目录信息:

docker inspect xxx  #xxx为容器id

显示结果:

...

"Mounts": [
    {
        "Type": "bind",
        "Source": "/usr/app",
        "Destination": "/opt/app",
        "Mode": "",
        "RW": true,
        "Propagation": "rprivate"
    }
],

...

四、Dockerfile镜像制作

概述

????????Dockerfile 是一个用来构建镜像的文本文件,文本内容包含了一条条构建镜像所需的指令和说明。我们通常会基于此文件创建docker镜像。

准备工作

1、centos:7镜像,(所有的镜像文件创建时都需要有一个空的centos镜像,就类似通过一个空的光盘或u盘创建一个系统启动盘是一样的)

2、jdk压缩包,jdk-8u51-linux-x64.tar.gz(可以从官网去下载:oracle.org),基于此压缩包,制作jdk镜像。

Dockerfile文件

????????在创建新的镜像时都需要有一个Dockerfile文件(文件名一定要注意大小写),这个文件要与资源放在一起(例如下载好的jdk),我们可以通过linux系统中的touch指令创建此文件(touch Dockerfile)

????????现在,以centos7为基础,构建oracle jdk8的镜像,首先通过Vim打开Dockerfile,这个文件不存在会自动创建。然后进入编辑模式(i),在编辑模式下可以拷贝如下语句(确保写的单词正确,大小写,空格)。

第一步:编写FROM语句(关键字一定要大写,例如FROM不能小写)

FROM centos:7

第二步:通过ADD命令将宿主机中的压缩包传入镜像容器中的指定目录,并同时解压缩(可以添加多个压缩包)

ADD jdk-8u51-linux-x64.tar.gz /usr/local/docker

第三步:设置环境变量(通过ENV关键字实现,目录启动容器中的目录)

ENV JAVA_HOME=/usr/local/docker/jdk1.8.0_51 \
    PATH=/usr/local/docker/jdk1.8.0_51/bin:$PATH

第四步:指定命令行操作(所有指令与后面内容要有空格)

CMD ['bash']

完整示例如下:

FROM centos:7
ADD jdk-8u51-linux-x64.tar.gz /usr/local/docker
ENV JAVA_HOME=/usr/local/docker/jdk1.8.0_51 \
    PATH=/usr/local/docker/jdk1.8.0_51/bin:$PATH
CMD ['bash']

使用 Dockerfile 构建镜像(Dockerfile所在目录执行docker指令):

docker build -t jdk:8 .  #不要丢掉这里的点,-t表示镜像标识(镜像名),是tag单词的缩写

注:末尾的点,表示构建过程中从当前目录寻找文件,jdk:8为我们创建的镜像名。

运行镜像文件

docker run -it jdk:8 bash

进入容器以后,可以通过echo $PATH查看环境变量,并可以通过java -version查看JDK版本信息。

示例:制作Sentinel镜像

第一步:定义Dockerfile文件,同时将jdk,sentinel也要和这个文件放在同一个目录

FROM centos:7
ADD jdk-8u51-linux-x64.tar.gz  /usr/local/
ADD sentinel-dashboard-1.8.0.jar  /usr/local/
ENV JAVA_HOME=/usr/local/jdk1.8.0_51 \
    PATH=/usr/local/jdk1.8.0_51/bin:$PATH
EXPOSE 8080
ENTRYPOINT ["java","-jar","/usr/local/sentinel-dashboard-1.8.0.jar"]

第二步:使用 Dockerfile 构建镜像(在Dockerfile所在目录执行docker指令)

docker build -t  sentinel:8 .  #不要丢掉这里的点

第三步:运行sentinel容器

docker run -d -p 8180:8080 sentinel:8

如果要做目录的挂载,保存容器中的日志,可参考如下方式:

docker run -d -p 8180:8080 --name sentinel  \
-v /usr/local/docker/sentinel/logs:/root/logs/csp sentinel:8

第四步:查看sentinel容器

docker ps

如果看不到容器,可通过 "docker container logs 容器id" 方式查看容器状态。

第五步:访问sentinel服务

访问时,ip地址应该为宿主机的ip地址,端口号为宿主机的端口号。

五、Docker容器互联

简介

????????Docker 中存在多个容器时,容器与容器之间经常需要进行通讯,例如nacos访问mysql,redis集群中各个节点之间的通讯。

解决方案

Docker 中容器与容器之间进行通讯的解决方案一般有两种:
第一种:两个容器通过宿主机进行通讯(容器中的端口会映射到宿主机上)。
第二种:两个容器之间直接通过虚拟网络进行连接,但是需要我们在docker中创建网络。

创建网络

例如:创建名字为t-net的网络

docker network create -d bridge t-net  #t-net为自己起的网络名称

其中,-d driver,网络类型,默认 bridge。
说明,创建好这个网络以后,在网落上添加容器,容器就可以通讯了。

查看网络信息

列出所属有网络

docker network ls

查看网络信息

docker inspect xxx  #xxx为创建的网络id

实现容器互联

打开终端,基于centos:7这个镜像启动容器,并加入到t-net这个网络

docker run -it --name app1 --network t-net centos:7

新开终端执行,基于centos:7这个镜像再启动容器,同时也加入到t-net网络

docker run -it --name app2 --network t-net centos:7

测试网络互通

在两个终端中分别执行:

ping app2
ping app1

显示如下:

[root@35569c623c4c /]# ping app1
PING app1 (172.18.0.2) 56(84) bytes of data.
64 bytes from 35569c623c4c (172.18.0.2): icmp_seq=1 ttl=64 time=0.577 ms
64 bytes from 35569c623c4c (172.18.0.2): icmp_seq=2 ttl=64 time=0.061 ms
64 bytes from 35569c623c4c (172.18.0.2): icmp_seq=3 ttl=64 time=0.066 ms
......
  系统运维 最新文章
配置小型公司网络WLAN基本业务(AC通过三层
如何在交付运维过程中建立风险底线意识,提
快速传输大文件,怎么通过网络传大文件给对
从游戏服务端角度分析移动同步(状态同步)
MySQL使用MyCat实现分库分表
如何用DWDM射频光纤技术实现200公里外的站点
国内顺畅下载k8s.gcr.io的镜像
自动化测试appium
ctfshow ssrf
Linux操作系统学习之实用指令(Centos7/8均
上一篇文章      下一篇文章      查看所有文章
加:2021-09-08 11:09:04  更:2021-09-08 11:10:25 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/15 14:50:47-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码