CentOS7-部署指令集

1. systemd、systemctl 服务管理

字母 d 是守护进程(daemon)的缩写。 systemd 这个名字的含义,就是它要守护整个系统。

systemd 是用于管理 Linux 所有系统资源。在 systemd 中,所有的服务、套接字、设备等都被视为 Unit,翻译为 单元

systemctl 是用于与 systemd 交互的 命令行工具systemctlCentOS7 的服务管理工具,用于管理这些 Unit,启动、停止、重启、查看状态以及管理 Unit

systemctl 提供了一组子命令来管理单个的 unit,其命令 格式 为:

systemctl [command] [unit]

📌 command 主要有:

  • start:启动 unit
  • stop:关闭 unit
  • restart:重启 unit
  • reload:不关闭 unit 的情况下,重新载入 unit 的配置文件,让设置生效。
  • daemon-reload:重载所有修改过的配置文件。
  • enable:设置 unit 开机启动
  • disable:设置 unit 开机不被启动
  • status:查看 unit 的状态,会列出是否正在运行、是否开机启动等信息。
  • is-active:查看 unit 是否正在运行
  • is-enable:查看 unit 是否开机启动
  • kill :不要被 kill 这个名字吓着了,它其实是向运行 unit 的进程 发送信号
  • show:列出 unit 的配置
  • mask:注销 unit,注销后你就无法启动这个 unit 了。
  • unmask:取消对 unit 的注销

查看服务状态

systemctl status sshd

启动服务

systemctl start sshd

停止服务

systemctl stop sshd

重启服务

systemctl restart sshd

重新加载服务

重新加载服务的配置文件,而无需重新启动,不会更改与各种服务进程关联的进程ID。

systemctl reload sshd

开机自启动

systemctl enable sshd

开机解除自启动

systemctl disable sshd

重载systemd

systemctl daemon-reload

reload 作用是重新加载 某个服务 程序的配置文件。

daemon-reload 作用是重新加载系统管理守护进程 (systemd) 的配置文件,而所有的 unit 配置文件都是作为 systemd 程序的配置文件存在的,所以会 重载所有修改过的配置文件。所以结论是:

  • 新添加 unit 配置文件时需要执行 daemon-reload
  • 有 unit 的配置文件发生变化时也需要执行 daemon-reload

daemon-reload 命令会做很多的事情,其中之一是重新生成依赖树(也就是 unit 之间的依赖关系),所以当你修改了 unit 配置文件中的依赖关系后如果不执行 daemon-reload 命令是不会生效的。

2. firewalld、firewalld-cmd 防火墙

CentOS6 及以前版本采用 iptablesCentOS7 采用新的 firewalld,不过 firewalld 底层仍然调用的是 iptables

firewalld-cmdfirewalld命令行工具

⚠️注: firewall-cmd 命令需要 firewalld 进程处于 运行 状态。

2.1 firewalld 防火墙服务相关操作

防火墙服务 firewalld 通过 systemctl 操作,命令如下:

## 显示防火墙状态
systemctl status firewalld

## 开启防火墙
systemctl start firewalld

## 关闭防火墙
systemctl stop firewalld

## 重启防火墙
systemctl restart firewalld

## 开机启用
systemctl enable firewalld

## 开机禁用
systemctl disable firewalld

## 查看服务是否开机启动
systemctl is-enabled firewalld

## 查看已启动的服务列表
systemctl list-unit-files|grep enabled

2.2 firewall-cmd 防火墙端口管理

开启端口

firewall-cmd --zone=public --add-port=443/tcp --permanent
  • –zone:作用域
  • –add-port=443/tcp:添加端口,格式为:端口 / 通讯协议
  • –permanent:永久生效,没有此参数重启后失效

关闭端口

firewall-cmd --zone=public --remove-port=80/tcp --permanent

重启生效防火墙

firewall-cmd --reload

查看端口列表

firewall-cmd --permanent --list-port

查看指定端口开通情况

firewall-cmd --query-port=80/tcp

显示当前系统中的默认区域

firewall-cmd --get-default-zone

显示默认区域的所有规则

firewall-cmd --list-all

查看所有区域的所有规则

firewall-cmd --list-all-zones

伪装IP

防火墙可以实现 伪装IP 的功能,端口转发 就会用到这个功能。

## 检查是否允许伪装IP
firewall-cmd --query-masquerade

## 允许防火墙伪装IP
firewall-cmd --add-masquerade --permanent

## 禁止防火墙伪装IP
firewall-cmd --remove-masquerade --permanent

端口转发

端口转发 可以将指定地址访问指定的端口时,将流量 转发 至指定地址的指定端口。如果转发的目的不指定 IP 的话就默认为本机 IP,如果指定了 IP 却没指定端口,则默认使用来源端口。

📌 如果配置好端口转发之后不能用,可以检查下面两个问题:

  • 比如我将 80 端口转发至 8080 端口,首先检查本地的 80 端口和目标的 8080 端口是否开放监听
  • 其次检查是否允许 伪装IP,若没允许的话要 开启伪装IP
##  80 端口的流量转发至 8080
firewall-cmd --add-forward-port=port=80:proto=tcp:toport=8080 --permanent

##  80 端口的流量转发至 192.168.0.1:80
firewall-cmd --add-forward-port=port=80:proto=tcp:toaddr=192.168.0.1 --permanent

##  80 端口的流量转发至 192.168.0.1  8080 端口
firewall-cmd --add-forward-port=port=80:proto=tcp:toaddr=192.168.0.1:toport=8080 --permanent

## 删除端口转发
firewall-cmd --remove-forward-port=port=80:proto=tcp:toaddr=192.168.0.1:toport=8080 --permanent

📌 端口转发 用途:

  • 当我们想把某个端口隐藏起来的时候,就可以在防火墙上阻止那个端口访问,然后再开一个不规则的端口,之后配置防火墙的端口转发,将流量转发过去。
  • 端口转发还可以做流量分发,一个防火墙拖着好多台运行着不同服务的机器,然后用防火墙将不同端口的流量转发至不同机器。

redis默认端口是 6379,mysql默认端口是 3306,如果不想外部访问,就会考虑将这些端口隐藏。

  1. 通过端口转发将 96379 端口转发至 6379,将 93306 端口转发至 3306。
  2. 防火墙关闭端口 6379、3306,打开端口 96379、93306。

这样,外部就不能直接通过端口 6379、3306 访问redis、mysql,只能通过 自定义 的端口 96379、93306 访问。

案例:📖 centos7 firewall-cmd主机之间端口转发

📌 引申: 微服务还可以通过网关 gateway 控制

微服务通过 gateway 端口转发,比如,gateway端口为 9080,manager-server端口为 8081,pay-server端口为 9081,我们不想外部直接访问服务manager-server、pay-server。

  1. 通过 gateway URL转发不同的微服务。
  2. 防火墙关闭端口 8081、9081,打开端口 9080。

这样,外部只能通过网关 gateway 的端口 9080 访问服务,再由gateway配置的路由规则进行服务转发。

IP黑名单

firewall-cmd --add-rich-rule='rule family=ipv4 source address=14.18.16.0/24 reject' --permanent

3. 服务管理 Unit 配置文件

Unit 一共分成12种。

  • Service unit:系统服务
  • Target unit:多个 Unit 构成的一个组
  • Device Unit:硬件设备
  • Mount Unit:文件系统的挂载点
  • Automount Unit:自动挂载点
  • Path Unit:文件或路径
  • Scope Unit:不是由 Systemd 启动的外部进程
  • Slice Unit:进程组
  • Snapshot Unit:Systemd 快照,可以切回某个快照
  • Socket Unit:进程间通信的 socket
  • Swap Unit:swap 文件
  • Timer Unit:定时器

3.1 查看系统上的 Unit

systemctl 提供了子命令可以查看系统上的 unit,其命令 格式 为:

systemctl [command] [–type=TYPE] [–all]

📌 command 主要有:

  • list-units:列出当前已经启动的 unit,如果添加 --all 选项会同时列出没有启动的 unit。
  • list-unit-files:根据 /lib/systemd/system/ 目录内的文件列出所有的 unit。
  • type=TYPE:可以过滤某个类型的 unit。

⚠️注: systemctl 不加参数,其实等同于 systemctl list-units

3.1.1 查看 Unit

## 列出正在运行的 Unit
systemctl list-units

## 列出所有Unit,包括没有找到配置文件的或者启动失败的
systemctl list-units --all

这个列表显示每个配置文件的状态,一共有四种。

  • enabled:已建立启动链接
  • disabled:没建立启动链接
  • static:该配置文件没有[Install]部分(无法执行),只能作为其他配置文件的依赖
  • masked:该配置文件被禁止建立启动链接

3.1.2 按类型查看 unit

## 列出所有正在运行的、类型为 service  Unit
systemctl list-units --type=service --all

指令执行输出详见:📖 linux systemctl命令详解

3.2 Unit 依赖关系

Unit之间存在 依赖关系:A 依赖于 B,就意味着 Systemd 在启动 A 的时候,同时会去启动 B。

3.2.1 查看 Unit 依赖

systemctl list-dependencies 命令列出一个 Unit 的所有依赖。

systemctl list-dependencies nginx.service

上面命令的输出结果之中,有些依赖是 Target 类型,默认不会展开显示。如果要展开 Target,就需要使用 --all 参数。

systemctl list-dependencies --all nginx.service

3.3 配置文件格式

每一个 Unit 都有一个配置文件,告诉 Systemd 怎么启动这个 Unit

Systemd 默认从目录 /etc/systemd/system/ 读取配置文件。但是,里面存放的大部分文件都是符号链接,指向目录 /usr/lib/systemd/system/,真正的配置文件存放在那个目录。

⚠️注: 我们自己创建 unit 配置文件时,既可以把配置文件放在 /usr/lib/systemd/system/ 目录下,也可以放在 /etc/systemd/system/ 目录下。

systemctl cat 命令可以查看配置文件的内容。

$ systemctl cat atd.service

[Unit]
Description=ATD daemon

[Service]
Type=forking
ExecStart=/usr/bin/atd

[Install]
WantedBy=multi-user.target
  • [Unit]:主要是描述和规定启动前后的顺序依赖关系
  • [Service]:主要是核心的控制语句
  • [Install]:主要是定义服务启动相关

⚠️注: 配置文件的区块名和字段名,都是大小写敏感的。而且,键值对的等号两侧不能有空格

详细参数见 📖 Linux基础 - 服务管理 Unit配置文件,本篇只做项目常用相关参数说明。

📌 manager.service文件

[Unit]
Description=manager
After=syslog.target network.target

[Service]
User=root
WorkingDirectory=/mnt/jar/manager
ExecStart=/mnt/jdk/jdk1.8.0_281/bin/java -jar -javaagent:/mnt/jar/skywalking-agent/skywalking-agent.jar -Dskywalking.agent.service_name=manager -Dskywalking.collector.backend_service=172.31.48.4:11800 -Dcom.sun.management.jmxremote.port=8991 -Dcom.sun.management.jmxremote.authenticate=false -Dcom.sun.management.jmxremote.ssl=false -Xms2g -Xmx2g -XX:MetaspaceSize=512m -XX:MaxMetaspaceSize=512m -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=/mnt/dump/heapdump_manager.hprof /mnt/jar/manager/manager.jar
SuccessExitStatus=143
TimeoutStopSec=10
Restart=on-failure
RestartSec=5

[Install]
WantedBy=multi-user.target

3.3.1 [Unit]

[Unit]: 用来定义 Unit 的元数据,以及配置与其他 Unit 的依赖关系。

  • Description:简短描述
  • Before:如果该字段指定的 Unit 也要启动,那么必须在当前 Unit 之后启动
  • After:如果该字段指定的 Unit 也要启动,那么必须在当前 Unit 之前启动

3.3.2 [Service]

[Service]:只有 Service 类型的 Unit 才有这个区块。

  • User:指定运行服务的用户
  • WorkingDirectory:指定服务的工作目录
  • ExecStart:启动当前服务的命令
  • SuccessExitStatus:表示正常退出的 SIGHUP, SIGINT, SIGTERM, SIGPIPE 信号。如果容器使用 SIGTERM 正常终止,则为 143
  • TimeoutStartSec:启动服务时等待的秒数,如果超过这个时间服务任然没有执行完所有的启动命令,则 systemd 会认为服务自动失败。这一配置对于使用 Docker 容器托管的应用十分重要,由于 Docker 第一次运行时可以能会需要从网络下载服务的镜像文件,因此造成比较严重的延时,容易被 systemd 误判为启动失败而杀死。通常对于这种服务,需要将 TimeoutStartSec 的值指定为 0,从而关闭超时检测。
  • TimeoutStopSec:停止服务时等待的秒数,如果超过这个时间服务仍然没有停止,systemd 会使用 SIGKILL 信号强行杀死服务的进程。
  • Restart:定义何种情况 Systemd 会自动重启当前服务。值包括:
    • no:默认,退出后无操作
    • always:不管什么退出原因,都会重启
    • on-success:只有正常退出时(退出状态码为0),才会重启
    • on-failure:非正常退出时,才会重启,包括信号终止和超时。如果正常停止(比如执行systemctl stop),它就不会重启。kill -9 pid杀死进程后,还会重启服务,只有执行systemctl stop,服务才会停止。
    • on-abnaomal:只有信号终止或超时,才会重启
    • on-abort:只有在收到没有捕捉到信号终止时,才会重启
    • on-watchdog:超时退出时,才会重启
  • RestartSec:自动重启当前服务间隔的秒数
  • ExecStop:停止服务所需要执行的主要命令。
  • ExecReload:重新加载服务所需执行的主要命令。

3.3.3 [Install]

[Install]:用来定义如何启动,以及是否开机启动。这部分配置通过 systemctl enable 命令来激活,通过 systemctl disable 命令禁用。

  • WantedBy:它的值是一个或多个 Target,当前 Unit 激活时(enable)符号链接会放入 /etc/systemd/system 目录下面以 Target 名 + .wants后缀构成的子目录中
  • RequiredBy:它的值是一个或多个 Target,当前 Unit 激活时,符号链接会放入 /etc/systemd/system 目录下面以 Target 名 + .required后缀构成的子目录中

📌 WantedBy=multi-user.target:指定服务所在的 Target 是 multi-user.target

这个设置非常重要,因为执行systemctl enable manager.service时,manager.service 的一个符号链接,就会放在 /etc/systemd/system 目录下面的 multi-user.target.wants 子目录之中。
Systemd 默认的启动 Target 就是 multi-user.target。在这个组里的所有服务,都将 开机启动。这就是为什么 systemctl enable 命令能设置开机启动的原因。

4. java -jar 参数详解

java -jar 命令用于执行打包成可执行 JAR 文件的 Java 应用程序。

  • -jar JAR文件:指定要执行的 JAR 文件。示例:java -jar manager.jar
  • -D 参数:设置 系统属性,这些属性可以在应用程序中通过 System.getProperty("propertyName") 获取。示例:java -jar -Dmy.property=value manager.jar
  • -X 参数:设置 JVM 参数。示例:java -jar -Xmx512m manager.jar
  • --spring.profiles.active:指定 Spring 配置文件中的特定 Profile。示例:java -jar --spring.profiles.active=dev manager.jar
  • --spring.config.name:指定 Spring Boot 配置文件的名称。
  • --spring.config.location:指定 Spring Boot 配置文件的位置。示例:java -jar --spring.config.name=myconfig --spring.config.location=file:/path/to/config/ manager.jar
  • 命令行参数:可以在应用程序的 public static void main(String[] args) 方法中使用 args 数组 获取这些参数。示例:java -jar manager.jar arg1 arg2 arg3

4.1 JVM常用参数

主要分为 k-v键值型Boolean 两种类型。 详细参数见 📖 Java JVM常用参数

4.1.1 k-v键值型

格式:

-XX:key=value

  • -XX:InitialHeapSize=value:初始堆内存大小。默认为物理内存的 1/64,等价于 -Xms
  • -XX:MaxHeapSize=value:最大堆分配内存。默认为物理内存的 1/4,等价于 -Xmx
  • -XX:ThreadStackSize=value:设置单个线程栈的大小。一般默认为512k~1024k,等价于 -Xss
  • -Xmm:设置年轻代的大小。
  • -XX:MetaspaceSize=value:设置元空间大小。元空间本质和永久代类似,区别在于:元空间使用本地内存,永久代使用堆内存。因此,元空间大小仅受本地内存限制
  • -XX:NewRatio=value:设置年轻代与老年代在堆结构的占比。NewRatio值就是设置老年代的占比,剩下的给新生代,-XX:NewRatio=2,老年代 2,新生代占 1,年轻代占整个堆的 1/3。
  • -XX:MaxTenuringThresold=value:设置垃圾最大年龄。Java8 中此属性在 0~15 范围取值。
  • -XX:HeapDumpPath=value:设置生成 DUMP文件 的路径。

4.1.2 Boolean类型

Boolean类型:-XX:+ 或者 -XX:-(代表一个属性,+ 表示属性开启- 表示属性关闭

  • -XX:+HeapDumpOnOutOfMemoryError:当 JVM 发生 OOM 时,导出堆的相关信息到 DUMP文件
  • -XX:+PrintGCDetails:打印输出详细的 GC 收集日志的信息

4.2 示例解读

上述 manager.service 服务配置中的启动命令 ExecStart

java -jar 
     -javaagent:/mnt/jar/skywalking-agent/skywalking-agent.jar 
     -Dskywalking.agent.service_name=manager 
	 -Dskywalking.collector.backend_service=172.31.48.4:11800 
	 -Dcom.sun.management.jmxremote.port=8991 
	 -Dcom.sun.management.jmxremote.authenticate=false 
	 -Dcom.sun.management.jmxremote.ssl=false 
	 -Xms2g -Xmx2g -XX:MetaspaceSize=512m -XX:MaxMetaspaceSize=512m 
	 -XX:+HeapDumpOnOutOfMemoryError 
	 -XX:HeapDumpPath=/mnt/dump/heapdump_manager.hprof 
	 /mnt/jar/manager/manager.jar

其中,

-javaagent:/mnt/jar/skywalking-agent/skywalking-agent.jar 
     -Dskywalking.agent.service_name=manager 
	 -Dskywalking.collector.backend_service=172.31.48.4:11800 

📅 -javaagent 指定程序代理为 skywalking,用于微服务链路追踪。单体服务不需要这些配置。

 -Dcom.sun.management.jmxremote.port=8991 
	 -Dcom.sun.management.jmxremote.authenticate=false 
	 -Dcom.sun.management.jmxremote.ssl=false 

📅 这些参数可以在运行时通过 JMX 连接远程监控和管理 Java 应用程序。一般也不需要。

-Xms2g -Xmx2g -XX:MetaspaceSize=512m -XX:MaxMetaspaceSize=512m 
	 -XX:+HeapDumpOnOutOfMemoryError 
	 -XX:HeapDumpPath=/mnt/dump/heapdump_manager.hprof 
  • -Xms2g:初始堆内存为2g
  • -Xmx2g:最大堆分配内存为2g
  • -XX:MetaspaceSize=512m:元空间大小为512m
  • -XX:MaxMetaspaceSize=512m:最大元空间大小为512m
  • -XX:+HeapDumpOnOutOfMemoryError:发生OOM时,导出堆的相关信息到DUMP文件。
  • -XX:HeapDumpPath=/mnt/dump/heapdump_manager.hprof:导出DUMP文件的路径为 /mnt/dump/heapdump_manager.hprof

5. docker

Docker可以把想跑的程序、库文件、配置文件一起“打包”。然后,在任何计算机都可以使用打好的包,做到 “一次打包,到处使用”。

Docker的三大理念是build(构建)Share(分享)run(运行),遵从apache 2.0协议。

Docker包括三个基本概念:

  • 镜像(Image):Docker 镜像(Image),就相当于是一个 root 文件系统。比如官方镜像 ubuntu:16.04 就包含了完整的一套 Ubuntu16.04 最小系统的 root 文件系统。
  • 容器(Container):容器(Container)基于镜像(Image)来创建。镜像(Image)和容器(Container)的关系,就像是面向对象程序设计中的类和对象一样,镜像是静态的定义,容器是镜像运行时的实体。容器可以被创建、启动、停止、删除、暂停等。
  • 仓库(Repository):Docker 使用 Registry 来保存用户构建的镜像。Registry 分为 公共私有 两种。

5.1 docker安装

以 CentOS 7 为例:

#安装docker服务
yum install docker 

#开机自启
systemctl enable docker 

#启动docker服务
systemctl start docker

5.2 镜像

镜像(Image)是构建 Docker 的基石。Docker 镜像是用于创建 Docker 容器的模板,用户基于镜像来运行自己的容器。镜像包含启动 Docker 容器所需的文件系统结构及内容。

5.2.1 列出镜像列表

docker images 

在这里插入图片描述

  • REPOSITORY:表示镜像的仓库源
  • TAG:镜像的标签
  • IMAGE ID:镜像ID
  • CREATED:镜像创建时间
  • SIZE:镜像大小

5.2.2 获取新的镜像

docker pull mysql:8.0

在这里插入图片描述

当我们在本地主机上使用一个不存在的镜像时 Docker 就会自动下载这个镜像。如果我们想预先下载这个镜像,我们可以使用 docker pull 命令来下载它。

5.2.3 查找镜像

docker search mysql:8.0

在这里插入图片描述

  • NAME: 镜像仓库源的名称
  • DESCRIPTION: 镜像的描述
  • OFFICIAL: 是否 docker 官方发布
  • stars: 类似 Github 里面的 star,表示点赞、喜欢的意思。
  • AUTOMATED: 自动构建。

5.2.4 删除镜像

docker rmi httpd

5.2.5 创建镜像

当我们从 docker 镜像仓库中下载的镜像不能满足我们的需求时,我们可以通过以下两种方式对镜像进行更改。

1. 从已经创建的容器中更新镜像,并且提交这个镜像
docker run -t -i ubuntu:15.10 /bin/bash

先进入容器,在运行的容器内使用 apt-get update 命令进行更新。

docker commit -m="has update" -a="runoob" e218edb10161 runoob/ubuntu:v2

通过命令 docker commit 来提交容器副本。

2. 使用 Dockerfile 指令来创建一个新的镜像
docker build -t runoob/centos:6.7 /mnt/image/Dockerfile

需要创建一个 Dockerfile 文件,其中包含一组指令来告诉 Docker 如何构建我们的镜像。然后,通过 docker build 命令来构建一个镜像。

📌 本章只做CentOS7下部署相关指令集,具体 Docker 创建镜像详见 📖 Docker 镜像使用

5.3 容器

容器(Container)是基于镜像启动的,一旦容器启动完成后,我们就可以登录到容器中安装自己需要的软件或者服务。容器中可以运行一个或一组应用。

5.3.1 启动容器

docker run -it ubuntu:15.10 /bin/bash
  • -i: 交互式操作。
  • -t: 进入终端。
  • ubuntu:15.10: 指定用 ubuntu 15.10 版本镜像为基础来启动容器。
  • /bin/bash:放在镜像名后的是命令,这里我们希望有个交互式 Shell,因此用的是 /bin/bash。

要退出终端,直接输入 exit

5.3.2 后台运行

在大部分的场景下,我们希望 docker 的服务是在后台运行的,我们可以通过 -d 指定容器的运行模式。

📌 安装mysql实例:

docker run \
 --restart=always \
 --name mysql \
 -p 3306:3306 \
 -v /mnt/mysql/conf:/etc/mysql/mysql.conf.d \
 -v /mnt/mysql/data:/var/lib/mysql \
 -v /mnt/mysql/logs:/logs \
 -e MYSQL_ROOT_PASSWORD=123456 \
 -id mysql:8.0
  • --restart=always :开机自启动。docker重启后,会自启动该容器。
  • --name :为创建的容器命名。
  • -p:表示端口映射,前者是宿主机端口后者是容器内的映射端口。可以使用多个 -p 做多个端口映射。
  • -v:表示目录映射关系(前者是宿主机目录后者是容器内映射到宿主机上的目录),可以使用多个 -v 做多个目录或文件映射。注意: 最好做目录映射,在宿主机上做修改,然后共享到容器上。
  • -d:在 run 后面加上 -d 参数,则会创建一个守护式容器在后台运行。

⚠️注: 加了 -d 参数默认不会进入容器,想要进入容器需要使用指令 docker exec

5.3.3 查看已启动容器

docker ps
  • CONTAINER ID:容器 ID ,可以通过这 id 找到唯一的对应容器。
  • IMAGE:该容器所使用的镜像。
  • COMMAND:启动容器时运行的命令。
  • CREATED:容器的创建时间。
  • STATUS:容器状态。
  • PORTS:容器的端口信息和使用的连接类型(tcp\udp)。
  • NAMES:若不指定名称,自动为容器创建名称,也唯一代表一个容器。

STATUS-容器状态:

  • created:已创建。
  • restarting:重启中。
  • running/Up:运行中。
  • removing:迁移中。
  • paused:暂停。
  • exited:退出。
  • dead:僵死。

5.3.4 查看所有容器

docker ps -a

在这里插入图片描述

5.3.5 启动一个已停止的容器

docker start <容器 ID> 

5.3.6 停止一个容器

docker stop <容器 ID>

5.3.7 进入容器

在使用 -d 参数时,容器启动后会后台运行。此时想要进入容器,可以通过以下指令进入:

  1. docker attach:如果从这个容器退出,会导致容器的停止。docker attach <容器 ID>
  2. docker exec:推荐大家使用 docker exec 命令,因为此命令会退出容器终端,但不会导致容器的停止
docker exec -it <容器 ID> /bin/bash

5.3.8 导出和导入容器

1、导出容器

docker export <容器 ID> > 文件名

2、导入到镜像

cat docker/ubuntu.tar | docker import - test/ubuntu:v1

📌 本章只做CentOS7下部署相关指令集,具体 Docker 创建镜像详见 📖 Docker 容器使用

5.3.9 删除容器

docker rm -f <容器 ID>

5.3.10 清理掉所有处于终止状态的容器

docker container prune

5.3.11 查看容器内部的标准输出

docker logs -f <容器 ID>

5.3.12 查看容器的端口映射

docker port <容器 ID>

5.4 仓库

Docker 仓库用来保存镜像,可以理解为代码控制中的代码仓库。一个 Docker Registry 中可以包含多个仓库(Repository);每个仓库可以包含多个标签(Tag)每个标签对应一个镜像

通常,一个仓库会包含同一个软件不同版本的镜像,而标签就常用于对应该软件的各个版本。我们可以通过 <仓库名>:<标签> 的格式来指定具体是这个软件哪个版本的镜像。如果不给出标签,将以 latest 作为默认标签。

5.5 容器连接

Docker 容器中可以运行一些应用,要让外部也可以访问这些应用,可以通过 -P-p 参数来指定端口映射。

  • -P:是容器内部端口 随机 映射到主机的端口。
  • -p:是容器内部端口绑定到 指定 的主机端口。

5.5.1 端口映射

docker run -d -p 5001:5000 training/webapp python app.py

这时我们可以通过浏览器访问 url:5001。

我们还可以指定容器绑定的网络地址,比如绑定 127.0.0.1。

docker run -d -p 127.0.0.1:5001:5000 training/webapp python app.py

这样我们就可以通过访问 127.0.0.1:5001 来访问容器的 5000 端口。

默认都是绑定 tcp 端口,如果要绑定 UDP 端口,可以在端口后面加上 /udp。

docker run -d -p 127.0.0.1:5001:5000/udp training/webapp python app.py

5.5.2 容器互联

docker 有一个连接系统允许将多个容器连接在一起,共享连接信息。docker 连接会创建一个父子关系,其中父容器可以看到子容器的信息。

5.5.2.1 新建网络
docker network create -d bridge test-net

参数说明:
-d:参数指定 Docker 网络类型,有 bridgeoverlay

docker network ls

查看网络列表

5.5.2.2 运行一个容器并连接到新建的 test-net 网络
docker run -itd --name test1 --network test-net ubuntu /bin/bash
5.5.2.3 再运行一个容器并加入到 test-net 网络
docker run -itd --name test2 --network test-net ubuntu /bin/bash

通过 ping 来证明 test1 容器和 test2 容器建立了互联关系。

5.6 Dockerfile

Dockerfile 是一个用来构建镜像的文本文件,文本内容包含了一条条构建镜像所需的指令和说明。通过 docker build 构建镜像。

docker build -t runoob/centos:6.7 /mnt/image/Dockerfile

需要创建一个 Dockerfile 文件,其中包含一组指令来告诉 Docker 如何构建我们的镜像。然后,通过 docker build 命令来构建一个镜像。

详见 📖 Docker Dockerfile

5.7 Compose

Compose 是用于定义和运行多容器 Docker 应用程序的工具。通过 Compose,您可以使用 YML 文件来配置应用程序需要的所有服务。然后,使用一个命令,就可以从 YML 文件配置中创建并启动所有服务。

5.8 实例

详见 📖 Docker 实例

5.9 容器和虚拟机对比

  • 更高效的利用系统资源
  • 更快速的启动时间
  • 运行开销小
  • 持续交付和部署
  • 更轻松的迁移、维护和扩展

5.10 常见问题

5.10.1 Docker官方镜像库可能无法正常访问

由于网络运营商或其他原因,Docker官方镜像库可能无法正常访问,国内有很多Docker镜像源可以选择,例如阿里云、DaoCloud等。可以通过以下命令来修改Docker镜像源:

## 1、查询安装过的docker
yum install docker-ce docker-ce-cli containerd.io

## 2、卸载 上述列出的安装过的docker
yum remove docker docker-common docker-selinux docker-engine

## 3、安装依赖包, yum-util 提供yum-config-manager功能,另外两个是devicemapper驱动依赖的 
yum install -y yum-utils device-mapper-persistent-data lvm2

## 4、设置yum源 
yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo

## 5、安装最新版本的 Docker
sudo yum install docker-ce docker-ce-cli containerd.io

## 6、重启docker
systemctl reload docker
systemctl restart docker

5.10.2 修改密码

use mysql; 

alter user 'root'@'localhost' identified by '你的密码';
alter user 'root'@'%' identified by '你的密码';

## 设置好之后,记得刷盘,进行持久化操作:
flush privileges;

localhost% 取决于你对 root 用户设置的登录权限

  • 'localhost':只能本机登录root用户
  • '%':其他机器远程登录root用户

修改后,记得 重启MySQL docker restart mysql

5.10.3 mysql修改用户加密方式

## 查看用户的加密方式,也可以将 user='root' 改成比如 user='test',来查看用户 test 的加密方式。
use mysql; 
select user,host,plugin from user where user='root';

## 修改加密方式
alter user 'root'@'localhost' identified with mysql_native_password by '你的密码';

## 设置好之后,记得刷盘,进行持久化操作:
flush privileges;

在这里插入图片描述

5.10.4 给指定用户赋访问权限

grant all privileges on *.* to 'root'@'%' identified by 'test';
  • all privileges:所有权限,也可以特指某些权限如,select,delect,insert等
  • *.*:所有数据库,也可以特指某数据库的某个表,如:dbName.tableName
  • root:指定用户
  • '%':允许除本机外的任何一台机器远程登录,也可以指定 IP,如 ‘localhost’ 本机
  • 24
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

不会叫的狼

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值