学习内容:
一、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表示没有错误,其他任何值表明有错误 |