当前位置:   article > 正文

Docker运维技术最佳实践_容器运维最佳实践

容器运维最佳实践

目录

01-Docker入门

Docker技术简介

概述

版本说明

Docker 核心对象

镜像(Image)

容器(Container)

Docker 应用架构分析

架构图

Docker运行机制

总结(Summary)

02-Docker 安装实践

Docker安装实践

准备工作

开启虚拟机系统

卸载Docker

在线安装Docker

离线安装Docker

总结(Summary)

03-Docker服务基本操作实践

Docker服务基本操作

启动docker服务

查看Docker状态

设置Docker开机自启

禁用Docker开机自启

重新启动Docker服务

查看Docker信息

停止docker服务

Docker镜像加速

总结(Summary)

 04-Docker 镜像操作实践

Docker镜像操作实践

下载镜像

浏览镜像文件

查看镜像详情

查看镜像历史

导出镜像文件

删除镜像文件

导入镜像操作

运行镜像文件

总结(Summary)

05-Docker 容器操作实践

Docker 容器操作实践

下载镜像(Image)

创建并启动容器(Container)

查看Docker中的容器(Container)

查看容器日志(logs)信息

停止(stop)或重启(Restart)容器(Container)

进入(exec)指定容器(Container)

从容器(Container)中退出(exit)

删除(rm)容器(Container)

总结(Summary)

06-Docker数据管理实践

Docker数据管理实践

概述

数据卷

数据卷操作

挂载主机目录

总结(Summary)

 07-Dockerfile及镜像制作实践

Dockerfile及镜像制作实践

背景

镜像制作分析

制作JDK镜像

准备工作

创建Dockerfile文件

创建JDK镜像文件

运行JDK镜像(image)文件

基于JDK镜像启动sentinel

制作Sentinel镜像(练习)

准备工作

构建Sentinel镜像

总结(Summary)

08-Docker 镜像安装实践

安装MySql数据库

安装步骤

登陆mysql服务

停止和启动mysql服务

安装Redis数据库

安装步骤

访问redis服务器

停止和启动redis服务

安装Nginx代理

安装步骤

访问nginx服务

停止和nginx服务

安装Nacos组件

安装步骤

访问nacos服务

Nacos 与 MySQL 通讯分析

停止和启动nacos服务

总结(Summary)

09-Docker 容器互联实践

简介

概述

解决方案

初始化网路

架构设计

新建网络

查看网络信息

实现容器互联

创建容器

测试网络互通

总结(summary)

重难点分析

FAQ分析

Bug分析

 10-Docker 课程问题总结

Day01

Docker 基本架构

查看Docker信息

查看Docker启动状态

删除Docker镜像失败

运行Docker镜像

进入Docker镜像失败

Docker 目录挂载失败

Day02

Docker 核心对象分析

Docker 常用指令分析

JDK:8 容器内编写java程序

启动容器提示端口被占用

Docker 镜像制作分析

MySQL 容器内执行SQL脚本

Nacos启动连接mysql

Nacos 启动日志异常

Nacos 不可访问

容器网络互联

总结(Summary)

Docker 基本操作

Docker 镜像操作

Docker 数据卷操作

Docker 容器操作

Docker 网络操作


01-Docker入门

Docker技术简介



概述

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

在这里插入图片描述

现阶段,很多应用软件的安装都在向基于docker方式的安装进行实现。例如mysql,那么为什么不直接在操作系统中安装一个mysql,而是用容器呢?因为,安装MySql过程并不简单,要配置安装源,安装依赖包,对mysql进行配置…如果要在多台主机上安装,每台主机都要进行这些繁琐的操作,万一服务器挂了,这一系列操作还要再重来一遍,但有了docker,一个安装配置好的mysql容器,可以直接拿到另一台主机上启动,而不必重新安装mysql。另外,docker还有一重要的用处,就是可以保证开发,测试和生产环境的一致.



版本说明

Docker分成了两个版本:Docker EE (企业版)和Docker CE(社区版本),其中,Docker EE由公司支持,可在经过认证的操作系统和云提供商中使用。Docker CE是免费的Docker产品的新名称,Docker CE包含了完整的Docker平台,非常适合开发人员和运维团队构建容器APP。



Docker 核心对象



镜像(Image)

Docker 镜像是一个特殊的文件系统(https://hub.docker.com/),除了提供容器运行时所需的程序、库、资源、配置等文件外,还包含了一些为运行时准备的一些配置参数(如匿名卷、环境变量、用户等)。例如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. 执行用户指定的应用程序



总结(Summary)

本小节主要对Docker有一个初步的认识,掌握Docker是什么,基本架构是怎样的,有哪些核心对象以及其运行机制。

02-Docker 安装实践

Docker安装实践

准备工作

第一步:准备CentOS(用课前资料中的CentOS7964),本次以CentOS7为例进行安装。
第二步:基于vmvare打开CentOS

在这里插入图片描述

第三步:克隆CentOS(选择链接克隆-更省空间),命名为CentOS7964-docker

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述


开启虚拟机系统

第一步:启动虚拟机,默认账号密码为root/root
在这里插入图片描述

第二步:在系统中右键,打开终端,通过ifconfig指令检查网络,

  1. [root@centos7964 ~]# ifconfig
  2. ens33: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
  3. inet 192.168.227.129 netmask 255.255.255.0 broadcast 192.168.227.255
  4. inet6 fe80::20c:29ff:fee9:918a prefixlen 64 scopeid 0x20<link>
  5. ether 00:0c:29:e9:91:8a txqueuelen 1000 (Ethernet)
  6. RX packets 287398 bytes 419668874 (400.2 MiB)
  7. RX errors 0 dropped 0 overruns 0 frame 0
  8. TX packets 127375 bytes 8442701 (8.0 MiB)
  9. TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
  10. ....
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10

第三步:通过MobaXterm工具链接虚拟机系统

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述


卸载Docker

假如已经有docker,可通过执行如下指令卸载Docker(一般只针对于线上安装情况),例如:

  1. sudo yum remove docker-ce \
  2. docker-ce-client \
  3. docker-client-latest \
  4. docker-common \
  5. docker-latest \
  6. docker-latest-logrotate \
  7. docker-logrotate \
  8. docker-engine
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8


在线安装Docker

第一步:安装一组工具

sudo yum install -y yum-utils 
  • 1

第二步:设置 yum 仓库地址

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

第三步:更新 yum 缓存

sudo yum makecache fast #yum 是包管理器
  • 1

第四步:安装新版 docker

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


离线安装Docker

推荐使用课前资料中已经下载好的资源(docker-setup.zip),也可以按如下步骤自己下载,然后将资源放到一个目录再安装,例如:

第一步:下载docker离线包

https://download.docker.com/linux/static/stable/x86_64/docker-20.10.6.tgz
  • 1

说明,也可以从https://download.docker.com/linux/static/stable/网址下载指定版本

第二步:下载离线安装工具

https://github.com/Jrohy/docker-install/
  • 1

在这里插入图片描述
说明,将下载好的这个工具解压。

第三步:将下载好的资源放在一个目录,例如:

在linux环境下,创建/root/setup/docker目录,然后拷贝下载好的资源到此目录(可通过MobaXterm工具直接上传到linux目录),例如

  1. [root@centos7964 docker]# pwd
  2. /root/setup/docker
  3. [root@centos7964 docker]# ls -l
  4. 总用量 68132
  5. -rw-r--r--. 1 root root 69637582 84 13:04 docker-20.10.6.tgz
  6. -rw-r--r--. 1 root root 114793 84 13:04 docker.bash
  7. -rwxr-xr-x. 1 root root 7546 84 13:04 install.sh
  8. [root@centos7964 docker]#
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8

第四步:执行安装操作

  1. # 进入/root/setup/docker 文件夹
  2. cd /root/setup/docker
  3. # 为 install.sh添加执行权限
  4. chmod +x install.sh
  5. # 安装
  6. ./install.sh -f docker-20.10.6.tgz
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8

第五:安装成功以后,检查安装状态

docker info
  • 1


总结(Summary)

本章节主要是讲解了Linux平台下Docker的安装过程,重点掌握在线安装,假如网络不好,可以尝试离线安装。

03-Docker服务基本操作实践

Docker服务基本操作


启动docker服务

 systemctl start docker
  • 1


查看Docker状态

查看docker是否启动了,是否是运行状态.

systemctl status docker
  • 1

例如:
在这里插入图片描述


设置Docker开机自启

systemctl enable docker
  • 1


禁用Docker开机自启

systemctl disable docker
  • 1


重新启动Docker服务

 systemctl restart docker
  • 1


查看Docker信息

docker info
  • 1

查看docker info中具体key的信息,例如:

docker info | grep 'Docker Root Dir:'
  • 1


停止docker服务

systemctl stop docker
  • 1


Docker镜像加速

由于国内网络问题,需要配置加速器来加速。修改配置文件 /etc/docker/daemon.json

下面命令直接生成文件 daemon.json

  1. cat <<EOF > /etc/docker/daemon.json
  2. {
  3. "registry-mirrors": [
  4. "https://docker.mirrors.ustc.edu.cn",
  5. "http://hub-mirror.c.163.com"
  6. ],
  7. "max-concurrent-downloads": 10,
  8. "log-driver": "json-file",
  9. "log-level": "warn",
  10. "log-opts": {
  11. "max-size": "10m",
  12. "max-file": "3"
  13. },
  14. "data-root": "/var/lib/docker"
  15. }
  16. EOF
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16

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


总结(Summary)

本小节重点讲解了Docker服务的启动,停止,重启、镜像加速、查看docker信息等基本操作。

 04-Docker 镜像操作实践

Docker镜像操作实践


下载镜像

语法:docker pull 镜像名
案例:

docker pull hello-world
  • 1


浏览镜像文件

语法:

docker images
  • 1


查看镜像详情

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

docker inspect hello-world
  • 1


查看镜像历史

一个镜像是由多个层(layer)组成的,那么,我们要如何知道各个层的具体内容呢?通过 docker history 命令,可以列出各个层(layer)的创建信息,例如:

docker history hello-world
  • 1


导出镜像文件

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

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


删除镜像文件

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

docker image rm hello-world
  • 1


导入镜像操作

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

docker load < hello-world.tar.gz  
  • 1


运行镜像文件

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

docker run hello-world
  • 1


总结(Summary)

本小节重点讲解了Docker中核心对象-镜像(image)的基本操作,例如下载镜像、查看下载的镜像、查看镜像详细信息,构建历史等。

05-Docker 容器操作实践

Docker 容器操作实践

本次以CentOS镜像为例,讲解容器的基本操作。


下载镜像(Image)

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

docker pull centos:7
  • 1

说明,官方镜像仓库地址为https://hub.docker.com/

下载完以后,查看centos7镜像文件。

docker images
  • 1


创建并启动容器(Container)

基本语法解析:

docker run -it xxxx bash
  • 1

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

案例:通过docker启动运行 centos7镜像

docker run -it centos:7 bash
  • 1

在这里插入图片描述


查看Docker中的容器(Container)

查看docker运行中的容器(要在宿主机执行docker指令)

docker ps
  • 1

说明,假如在容器中执行docker指令会出现如下问题,例如:
在这里插入图片描述
查看docker运行中的所有容器

docker ps -a
  • 1

其中,-a表示全部(all)。


查看容器日志(logs)信息

查看容器启动运行日志时,这个指令非常重要,假如容器没有启动,要通过此指令去看一下错误日志。

docker container logs 802  #802为自己的容器id(一般写前三位即可)
  • 1

说明,查看容器的运行日志时,容器应该处于一种运行状态.


停止(stop)或重启(Restart)容器(Container)

停止运行的容器,代码如下:

docker container stop 802  #802为容器自己的id
  • 1

重新启动容器,代码如下:

docker container restart 802 #802位容器自己的id
  • 1


进入(exec)指定容器(Container)

当容器处于运行状态,要进入容器,可以使用 docker exec 命令,例如:

docker exec -it 802 bash #802为容器id
  • 1

说明,假如容器处于一种非运行状态,此时你执行docker exec进入容器会出现如下问题:

在这里插入图片描述


从容器(Container)中退出(exit)

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

exit
  • 1


删除(rm)容器(Container)

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

docker container rm 802 #802为容器id
  • 1

说明,假如容器正在运行执行删除,会出现如下问题,例如:
在这里插入图片描述

其中,如果删除运行中的容器,需要添加 -f 参数执行强制删除,例如:

docker container rm -f 802 #802为容器id
  • 1

清理所有处于终止状态容器,例如:

docker container prune
  • 1

说明,执行完这个指令以后,可以通过docker ps -a 再查看容器,看看是否有删除.


总结(Summary)

本章节重点讲解了容器的基本操作,例如容器的启动、运行、停止、删除等基本操作。

06-Docker数据管理实践

Docker数据管理实践

概述

在容器中管理数据主要有两种方式:

  • 数据卷(Volumes)
  • 挂载主机目录 (Bind mounts)


数据卷

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


数据卷操作

第一步:创建数据卷,例如:

docker volume create container-vol
  • 1

第二步:查看所有数据卷,例如:

docker volume ls
  • 1

查看指定 数据卷 的信息

docker volume inspect container-vol
  • 1

查询的结果:

  1. [
  2. {
  3. "Driver": "local",
  4. "Labels": {},
  5. "Mountpoint": "/var/lib/docker/volumes/container-vol/_data",
  6. "Name": "container-vol",
  7. "Options": {},
  8. "Scope": "local"
  9. }
  10. ]
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10

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

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

或者采用如下简写方式

docker run -it -v container-vol:/root centos:7 bash
  • 1

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

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

docker volume rm container-vol
  • 1

清理无主数据卷

docker volume prune
  • 1


挂载主机目录

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

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

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

例如:

在这里插入图片描述

查看挂载目录信息

docker inspect 91a #91a 为容器id
  • 1

显示结果:

  1. ...
  2. "Mounts": [
  3. {
  4. "Type": "bind",
  5. "Source": "/usr/app",
  6. "Destination": "/opt/app",
  7. "Mode": "",
  8. "RW": true,
  9. "Propagation": "rprivate"
  10. }
  11. ],
  12. ...
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14


总结(Summary)

本章节重点讲解了容器中的数据管理操作,例如数据卷操作,目录的挂在操作

 07-Dockerfile及镜像制作实践

Dockerfile及镜像制作实践

背景

我们从基于docker pull指令可以从远程仓库下载我们需要的一些镜像(image),但是镜像仓库中的镜像是从哪里来的呢,假如镜像仓库中没有我们需要的镜像呢,所以本小结我们会讲解我们自己如何制作镜像.


镜像制作分析

Dockerfile 是一个用来构建镜像的文本文件,文本内容包含了一条条构建镜像所需的指令和说明。我们通常会基于此文件创建docker镜像,例如:
在这里插入图片描述


制作JDK镜像

准备工作

  1. centos:7镜像 (所有的镜像文件创建时都需要有一个空的centos镜像,就类似通过一个空的光盘或u盘创建一个系统启动盘是一样的)
  2. jdk压缩包 jdk-8u51-linux-x64.tar.gz(可以从课前资料获取),基于此压缩包,制作jdk镜像。

例如:JDK 拷贝的目录
在这里插入图片描述


创建Dockerfile文件

在创建新的镜像时都需要有一个Dockerfile文件(文件名一定要注意大小写),这个文件中定义镜像制作过程,这一小结以JDK镜像制作过程为例,讲解Dockerfile文件以及文件内容.

第一步:进入jdk-8u51-linux-x64.tar.gz文件所在目录,基于vim创建Dockerfile文件,例如

vim  Dockerfile
  • 1

说明,这里一定要注意文件的大小写.

第二步:按键盘上的"i"进入编辑模式

第三步:拷贝如下代码到你的Dockerfile中,例如:

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

第四步:拷贝完成,按ESC进入命令行模式(又叫最后一行模式)
第五步:然后按shift+冒号,输入wq保存退出.目录结构如下:
在这里插入图片描述


创建JDK镜像文件

在Dockerfile所在目录执行docker build指令.例如:

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

在这里插入图片描述
注意末尾的点,表示构建过程中从当前目录寻找文件,jdk:8为我们创建的镜像名。


运行JDK镜像(image)文件

在宿主机中执行如下指令,启动JDK容器,例如:

docker run -it jdk:8 bash
  • 1

进入容器以后,可以通过echo $PATH查看环境变量(注意单词大小写),并可以通过java –version查看JDK版本信息。

在这里插入图片描述


基于JDK镜像启动sentinel

JDK镜像创建以后,如何通过此镜像运行一个web服务呢,例如sentinel等。

第一步:将sentinel拷贝宿主机指定目录,例如/root/servers目录(servers目录不存在可以自己创建)。
在这里插入图片描述
第二步:启动镜像容器,通过java执行运行web服务

基于jdk:8镜像启动运行sentinel服务(服务启动后可在宿主机通过localhost:8180进行访问)

  1. docker run -d -p 8180:8080 --name sentinel \
  2. -v /root/servers:/usr/sca \
  3. jdk:8 java -jar /usr/sca/sentinel-dashboard-1.8.0.jar
  • 1
  • 2
  • 3

在这里插入图片描述
其中:

  1. -d 表示后台运行
  2. -p 用于实现端口映射(假设外部要访问这个容器,必须要做端口映射)
  3. –name 表示为启动的容器起一个名字

这里,服务启动后可通过docker ps 指令查看启动的服务,假如看不到服务,可能服务启动失败,可通过如下指令查看具体日志

docker container logs  689 #这里689为容器id,也可以为你的容器名
  • 1

我们访问sentinel服务时需要通过宿主机进行访问,不可以直接访问,所以要做端口映射,例如

在这里插入图片描述

第三步:打开浏览器,访问sentinel服务.
在windows中打开浏览器,输入你的ip地址(这个ip为远端宿主机的ip地址),端口号为宿主机的端口号.例如
在这里插入图片描述


制作Sentinel镜像(练习)



准备工作

  1. centos:7镜像(课前资料中的)
  2. jdk-8u51-linux-x64.tar.gz(可以从课前资料获取)
  3. sentinel-dashboard-1.8.0.jar

说明,通过docker images指令查看centos:7是否存在,然后将 jdk-8u51-linux-x64.tar.gz,sentinel-dashboard-1.8.0.jar放在/root/setup/sentinel目录(目录不存在的话自己创建)



构建Sentinel镜像

第一步:在sentinel所在目录创建Dockerfile文件,并添加如下内容

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

其中,EXPOSE表示对外暴露的服务端口,ENTRYPOINT中写的是你容器启动时候要执行的指令.

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

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

第三步:后台运行sentinel容器

docker run -d --name sentinel8181 -p 8181:8080 sentinel:8  #-d 表示后台运行,-p用于指定端口映射,sentinel:8为镜像文件名
  • 1

第四步:查看sentinel容器

docker ps
  • 1

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

第五步:访问sentinel服务

可以在window中访问时你的linux系统中启动的sentinel服务,ip地址应该为宿主机的ip地址,端口号为宿主机的端口号.例如
在这里插入图片描述



总结(Summary)

本章节重点讲解了Dockerfile编写及镜像制作的过程,以及基于制作的镜像启动运行相关程序的过程。

08-Docker 镜像安装实践

安装MySql数据库

安装步骤

第一步:在hub.docker.com上搜索mysql镜像
在这里插入图片描述

第二步:拉取指定版本的mysql,也可以指定拉取版本,例如:

 docker pull mysql:8.0.23
  • 1

第三步:检查mysql镜像

 docker images
  • 1

第四步:启动运行mysql镜像 (docker run 用于启动一个容器)

  1. sudo docker run -p 3306:3306 --name mysql \
  2. -v /usr/local/docker/mysql/mysql-files:/var/lib/mysql-files \
  3. -v /usr/local/docker/mysql/conf:/etc/mysql \
  4. -v /usr/local/docker/mysql/logs:/var/log/mysql \
  5. -v /usr/local/docker/mysql/data:/var/lib/mysql \
  6. -e MYSQL_ROOT_PASSWORD=root \
  7. -d mysql:8.0.23
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7

假如安装过程中失败了,则可通过docker ps -a 查看以前的容器,假如已存在,则通过docker rm 镜像id 删除再重新安装即可。


登陆mysql服务

第一步:进入容器 (退出容器用exit)

sudo docker exec -it mysql bash
  • 1

第二步:登陆(默认密码root),一定要先进入mysql容器。

mysql -uroot -proot
  • 1


停止和启动mysql服务

停止mysql服务(可选)

docker stop mysql
  • 1

启动mysql服务

docker start mysql
  • 1

假如希望查看mysql启动时的日志,可以执行 docker container logs mysql 这个指令。

设置mysql开机自启动(可选)

docker update mysql --restart=always
  • 1


安装Redis数据库


安装步骤

第一步:下载镜像文件

docker pull redis
  • 1

第二步:准备配置文件

创建redis配置文件目录

mkdir -p /usr/local/docker/redis01/conf
  • 1

在配置文件录下创建redis.conf配置文件(这个文件一定要创建,否在我们进行目录挂载时默认生成的是一个目录)

touch /usr/local/docker/redis01/conf/redis.conf
  • 1

第三步:创建redis实例并启动

  1. sudo docker run -p 6379:6379 --name redis01 \
  2. -v /usr/local/docker/redis01/data:/data \
  3. -v /usr/local/docker/redis01/conf/redis.conf:/etc/redis/redis.conf \
  4. -d redis redis-server /etc/redis/redis.conf
  • 1
  • 2
  • 3
  • 4

第四步:查看正在运行的进程

docker ps
  • 1


访问redis服务器

第一步:控制台直接连接redis测试

docker exec -it redis01 bash
  • 1

第二步:检测redis 版本

redis-server  -v
  • 1

或者

redis-cli -v
  • 1

第三步:登录redis(默认不需要密码)

redis-cli
  • 1

或者直接将上面的两个步骤合为一个步骤执行也可以,指令如下:

docker exec -it redis01 redis-cli
  • 1


停止和启动redis服务

停止redis服务?

docker stop redis01
  • 1

启动redis服务?

docker start redis01
  • 1

重启 redis 服务?

docker restart redis01
  • 1


安装Nginx代理


安装步骤

第一步:拉取nginx镜像 (从这里hub.docker.com去查找)

docker pull nginx
  • 1

第二步:查看images镜像

docker images
  • 1

第三步:创建数据卷(这个对象会在宿主机直接创建一个目录)

docker volume create nginx-vol
  • 1

说明:查看数据卷对应的宿主机目录,可以通过如下指令:

docker inspect nginx-vol
  • 1

第四步:启动nginx服务

docker run --name nginx  -p 80:80 -v nginx-vol:/etc/nginx -d nginx
  • 1

其中:/etc/nginx 为nginx容器启动时,nginx镜像文件默认的解压目录

说明:假如以后想修改nginx配置,可以直接去nginx-vol数据卷对应的目录去修改.


访问nginx服务

进行访问检测,如图所示:
在这里插入图片描述


停止和nginx服务

停止nginx服务

docker stop nginx
  • 1

启动nginx服务

docker start nginx
  • 1

重启nginx服务

docker restart nginx
  • 1


安装Nacos组件



安装步骤

第一步:拉取nacos(hub.docker.com)

docker pull nacos/nacos-server:1.4.1
  • 1

第二步: mysql中执行nacos的sql脚本文件

1)将此文件nacos-mysql.sql(这个文件可从code服务器下载)拷贝到mysql容器的宿主机对应的挂载目录(可通过docker inspect mysql查看你mysql的挂载目录)

2)在linux环境下启动并登录mysql

进入mysql容器(前提是mysql已启动)

docker exec -it mysql bash
  • 1

登录mysql

mysql -uroot -p
  • 1

3)通过source指令运行容器目录下的sql文件

source  /etc/mysql/nacos-mysql.sql  #这里的/etc/mysql为容器中的一个目录(要选择你自己挂载的目录)
  • 1

例如:

第三步:创建并启动nacos容器(拷贝下面内容时,账号和密码要用自己宿主机ip,自己数据库的账号密码)

  1. docker run \
  2. -e TZ="Asia/Shanghai" \
  3. -e MODE=standalone \
  4. -e SPRING_DATASOURCE_PLATFORM=mysql \
  5. -e MYSQL_DATABASE_NUM=1 \
  6. -e MYSQL_SERVICE_HOST=192.168.126.129 \
  7. -e MYSQL_SERVICE_PORT=3306 \
  8. -e MYSQL_SERVICE_USER=root \
  9. -e MYSQL_SERVICE_PASSWORD=root \
  10. -e MYSQL_SERVICE_DB_NAME=nacos_config \
  11. -p 8848:8848 \
  12. --name nacos \
  13. --restart=always \
  14. -d nacos/nacos-server:1.4.1
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14

参数说明

  • 单节点模式
    MODE=standalone
  • 数据库地址
    MYSQL_SERVICE_HOST
  • 数据库用户名
    MYSQL_SERVICE_USER
  • 数据库密码
    MYSQL_SERVICE_PASSWORD
  • 需连接的数据库名称
    MYSQL_SERVICE_DB_NAME
  • 端口映射
    -p 8848:8848
  • 任意时候重启容器,开机就能自动启动容器(需设置docker为开机自启)
--restart=always
  • 1

第四步:检查nacos服务

docker ps
  • 1

假如启动失败,检查启动日志,例如:

docker container logs nacos
  • 1

其中,nacos的启动日志在/home/nacos/logs/start.out文件中。



访问nacos服务

启动nacos,然后在windows中输入http://ip:port/nacos方式进行访问测试

在这里插入图片描述
说明,nacos登录时,默认用户名和密码都是nacos.



Nacos 与 MySQL 通讯分析

在这里插入图片描述



停止和启动nacos服务

停止nacos服务

docker stop nacos
  • 1

启动nacos服务

docker start nacos
  • 1

重启nacos服务

docker restart nacos
  • 1



总结(Summary)

本章节重点讲解了常用镜像服务的安装和基础配置,需要掌握镜像操作的基本过程和问题的解决方案。

09-Docker 容器互联实践

简介

概述

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


解决方案

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

初始化网路


架构设计

在这里插入图片描述


新建网络

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

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

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


查看网络信息

列出所属有网络

docker network ls
  • 1

查看网络信息

docker inspect 67d #67d 为创建的网络id
  • 1


实现容器互联

创建容器

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

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

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

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


测试网络互通

在两个终端中分别执行:

ping app1
  • 1
ping app2
  • 1

显示如下:

  1. [root@35569c623c4c /]# ping app1
  2. PING app1 (172.18.0.2) 56(84) bytes of data.
  3. 64 bytes from 35569c623c4c (172.18.0.2): icmp_seq=1 ttl=64 time=0.577 ms
  4. 64 bytes from 35569c623c4c (172.18.0.2): icmp_seq=2 ttl=64 time=0.061 ms
  5. 64 bytes from 35569c623c4c (172.18.0.2): icmp_seq=3 ttl=64 time=0.066 ms
  6. ......
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6


总结(summary)


重难点分析

  • 容器互联方案
  • 创建网络方式
  • 应用网络


FAQ分析

  • 什么是容器互联?
  • 为什么需要创建网络?
  • 如何创建网络?
  • 如何应用网络?
  • 如何测试网络是否是通的?


Bug分析

 10-Docker 课程问题总结

Day01


Docker 基本架构

在这里插入图片描述


查看Docker信息

在这里插入图片描述


查看Docker启动状态

在这里插入图片描述

在这里插入图片描述


删除Docker镜像失败

在这里插入图片描述


运行Docker镜像

在这里插入图片描述


进入Docker镜像失败

在这里插入图片描述


Docker 目录挂载失败

在这里插入图片描述


Day02


Docker 核心对象分析

在这里插入图片描述


Docker 常用指令分析

在这里插入图片描述


JDK:8 容器内编写java程序

在这里插入图片描述

在这里插入图片描述

启动容器提示端口被占用

在这里插入图片描述


Docker 镜像制作分析

在这里插入图片描述


MySQL 容器内执行SQL脚本

在这里插入图片描述


Nacos启动连接mysql

在这里插入图片描述

在这里插入图片描述


Nacos 启动日志异常

在这里插入图片描述


Nacos 不可访问

![在这里插入图片描述](https://img-blog.csdnimg.cn/a0aa68f486fe4154be69a0cb0c6dd2b0.png



容器网络互联

在这里插入图片描述



总结(Summary)



Docker 基本操作

  1. systemctl start docker
  2. systemctl stop docker
  3. systemctl restart docker
  4. systemctl enable docker
  5. systemctl disable docker
  6. systemctl status docker
  7. docker info
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7



Docker 镜像操作

  1. docker pull centos:7
  2. docker images
  3. docker image rm centos:7
  4. docker save centos:7 | gzip>centos7.tar.gz
  5. docker load < centos7.tar.gz
  6. docker inspect centos:7
  7. docker history centos:7
  8. docker build -t jdk:8 .
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8



Docker 数据卷操作

  1. docker volume create 数据卷名称
  2. docker volume ls
  3. docker volume rm 数据卷名称
  4. docker volume inspect
  • 1
  • 2
  • 3
  • 4



Docker 容器操作

  1. docker run -d --name xxx -p 8090:8090 -v ... --always .... -e .......
  2. docker ps
  3. docker ps -a
  4. docker logs 容器id
  5. docker inspect 容器id
  6. docker stop 容器id
  7. docker start 容器id
  8. docker restart 容器id
  9. docker rm -f 容器id
  10. docker exec -it 容器id bash
  11. docker container prune (移除所有exit状态的容器)
  12. exit
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12



Docker 网络操作

  1. docker network create t-net(网络名称)
  2. docker network inspect t-net
  3. ....

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/盐析白兔/article/detail/702849
推荐阅读
相关标签
  

闽ICP备14008679号