2021-04-26

本文档介绍了在CentOS7上安装Docker时遇到的selinux冲突问题及解决方法,包括更换国内镜像源和配置insecure-registries。此外,还详细讲解了Shell脚本的基础知识,如脚本创建、执行权限设置、变量定义与引用,以及参数传递。最后展示了如何修改脚本来接收和打印传入参数。
摘要由CSDN通过智能技术生成

学习内容:

一、docker安装以及拉镜像

docker安装基于centos7,首先进入到yum目录下,并将yum更新到最新版本;检查系统中并没有docker,直接yum install docker;报错:docker-ce-selinux conflicts with 2:container-selinux-2.119.2-1.911c772.el7_8;docker-ce-selinux与container-selinux冲突,将docker-ce-selinux删除后,yum install docker,安装成功;

docker安装成功后,拉hello-world失败,报错:Get https://registry-1.docker.io/v2/: net/http: request canceled while waiti,首先解决思路是将docker镜像库换成国内镜像,

# vi /etc/docker/daemon.json
{
    "registry-mirrors": ["http://hub-mirror.c.163.com", "https://docker.mirrors.ustc.edu.cn"]
}
systemctl restart docker.service
Docker中国区官方镜像
https://registry.docker-cn.com

网易
http://hub-mirror.c.163.com

ustc 
https://docker.mirrors.ustc.edu.cn

中国科技大学
https://docker.mirrors.ustc.edu.cn

换成国内镜像后依旧加载失败,考虑是公司有线内网,故上公司社区网站搜索方法:

-------------------------------------

1.增加域名和IP的映射:

-------------------------------------

vi /etc/hosts增加:

10.41.103.97 public-docker-virtual.artnj.zte.com.cn

 

----------------------------------------------------

2.增加"insecure-registries":["0.0.0.0/0"] 配置项

----------------------------------------------------

修改daemon.json:  推荐使用这个方法

/etc/docker/daemon.json

# locate daemon.json

/etc/docker/daemon.json

# cat /etc/docker/daemon.json

{

"storage-driver":"overlay2",

"storage-opts":["overlay2.override_kernel_check=true"]

}

 

# vi /etc/docker/daemon.json

末尾增加一个配置项:

"insecure-registries":["0.0.0.0/0"]

重新加载daemon以及重启docker后,拉镜像依旧加载不出来,后询问师傅:

docker官方网站查找docker镜像的路径前需要加上公司镜像内网地址,成功解决。

 

二、shell脚本

Shell是一个用C语言编写的程序,通过Shell用户可以访问操作系统内核服务,类似于DOS下的command和后来的cmd.exe。Shell既是一种命令语言,又是一种程序设计语言。作为命令语言,它交互式地解释和执行用户输入的命令;作为程序设计语言,它定义了各种变量、参数、函数、流程控制等等。它调用了系统核心的大部分功能来执行程序、建立文件并以并行的方式协调各个程序的运行。因此,对于用户来说,shell是最重要的实用程序,深入了解和熟练掌握shell的特性极其使用方法,是用好Unix/Linux系统的关键。
Linux的Shell脚本解释器种类众多,一个系统可以存在多个shell脚本解释器,可以通过cat /etc/shells 命令查看系统中安装的shell脚本解释器。

cat /etc/shells //查看系统中安装的shell脚本解释器;

touch helloworld.sh //h helloworld.sh //新建helloworld.sh

vim helloworld.sh //进入helloworld.sh文件 ,添入以下内容:

#!/bin/bash

echo "helloworld"

#!是约定系统此脚本需要用bash解释器来执行;

echoecho是shell的一个内部指令,用于屏幕上打印出指定的字符串。

chmod u+x helloworld.sh //d u+x helloworld.sh //赋予当前用户helloworld.sh的执行权限;

./helloworld.sh  //执行helloworld.sh脚本方式之一

/bin/sh helloworld.sh //执行helloworld.sh脚本方式之二

这种运行方式是,直接运行解释器,其参数就是shell脚本的文件名,当使用这种方式时,脚本中的#!/bin/bash指定的解释器是不生效的,当前使用什么解释器就是什么解释器

语法格式:变量名=变量值

shell变量定义的严格语法限制:

1. 变量名和等号之间不能有空格
2. 变量名首个字符必须为英文字母
3. 不能包含标点符号但能够使用下划线(_)
4. 不能使用空格
5. 不能使用 bash 里的关键字

变量类型

类型    解释
局部变量    局部变量在脚本或命令中定义,仅在当前shell实例中有效,其他shell启动的程序不能访问局部变量
环境变量    所有的程序,包括shell启动的程序,都能访问环境变量,有些程 序需要环境变量来保证其正常运行。可以用过set命令查看当前环境变量
shell变量    由shell程序设置的特殊变量。shell变量中有一部分是环境变量,有一部分是局部变量,这些变量保证了shell 的正常运行
 

定义以及引用变量

name="xufnag"

echo ${name}

已定义变量可被重新定义

使用readonly命令可以将变量定义为只读变量,只读变量值不能被改变

uunset name //删除变量 

unset命令可以删除变量,变量被删除后不能再次使用,同时unset命令不能删除只读变量

参数传递:

执行Shell脚本时,可以向脚本传递参数。脚本内获取参数的格式为:$n。n代表一个数字,1为执行脚本的第一个参数,2为执行脚本的第二个参数,以此类推…
$0 表示当前脚本名称

修改helloworld.sh为

#!/bin/bash

echo  $1

echo $2

echo $3

执行携带参数

./helloworld.sh ha na la

 

helloworld.sh ha na la

 

字符意义
$#传递到脚本的参数个数
$*以一个单字符串显示所有向脚本传递的参数
$$脚本运行的当前进程ID号
$!后台运行的最后一个进程的ID号
$@与$*相同,但是使用时加引号,并在引号中返回每个参数
$?显示最后命令的退出状态。0表示没有错误,其他任何值表明有错误

    

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值