Category: LINUX


Docker常用命令

1.检索镜像
docker search 关键字

2. 查看镜像
docker images

3.查看运行中的容器
docker ps
查看所有已经创建的容器,包括已经停止的容器
docker ps -a
用一行列出所有正在运行的container(容器多的时候非常清晰)
docker ps | less -S
列出最近一次启动的container
docker ps -l
显示一个运行的容器里面的进程信息
docker top Name/ID
查看容器内部详情细节:
docker inspect
在容器中安装新的程序
docker run image_name apt-get install -y app_name
保存对容器的修改(commit) 当你对某一个容器做了修改之后(通过在容器中运行某一个命令),可以把对容器的修改保存下来,这样下次可以从保存后的最新状态运行该容器。
docker commit ID new_image_name

4.从dockerhub拉取镜像
这里以redis镜像为例,我们选择基于alpine基础镜像的版本,体积较小
docker pull redis:6.0.9-alpine3.12
参数:
docker pull [选项] [Docker Registry 地址[:端口号]/]仓库名[:标签]

5.运行镜像(创建容器)
启动容器并启动bash(交互方式):
docker run -i -t /bin/bash
启动容器以后台方式运行(更通用的方式)
docker run -d –rm –name myredis -p 6380:6379 redis:6.0.9-alpine3.12 redis-server
参数讲解:
–detach , -d 容器后台运行,并打印容器ID
–rm 如果已经有同名的容器,移除同名容器
–name 给容器起个名字
–publish , -p 端口映射,将宿主机的端口(冒号左边)和容器内的端口(冒号右边)映射
倒数第二个参数redis:6.0.9-alpine3.12是要执行的镜像,倒数第一个参数redis-server代表要执行的具体指令

6.进入运行的容器
docker exec -i -t myredis /bin/bash
参数讲解:
–interactive , -i Keep STDIN open even if not attached打开标准输入接受用户输入命令
–tty , -t Allocate a pseudo-TTY
-d, –detach 在容器中后台执行命令;
倒数第二个参数是容器名(也可以用容器ID),倒数第一个参数是要执行的具体指令

7.停止容器运行
docker stop myredis
这里也可以使用容器ID,一次停止多个容器,可以在后面用空格分隔

8.清理已经停止的容器
docker container prune

9.删除指定镜像
docker rmi

10.将镜像保存为归档文件
docker save

11.导入镜像
docker load

12.镜像构建
docker build

13.镜像运行,就是新建并运行一个容器。
docker run [镜像ID]

14.启动已终止容器
docker start [容器ID]

15.停止运行的容器
docker stop [容器ID]

16.杀死容器进程
docker kill [容器ID]

17.重启容器
docker restart [容器ID]

18.删除容器
docker rm [容器ID]
删除所有容器
docker rm `docker ps -a -q`

19.导出容器
#导出一个已经创建的容器到一个文件
docker export [容器ID]

20.导入容器
# 导出的容器快照文件可以再导入为镜像
docker import [路径]

21.查看日志
docker logs [容器ID]
实时查看日志输出
docker logs -f (类似 tail -f) (带上时间戳-t)
这个命令有以下常用参数 -f : 跟踪日志输出
–since :显示某个开始时间的所有日志 -t : 显示时间戳 –tail :仅列出最新N条容器日志

22.复制文件
# 从主机复制到容器
docker cp host_path containerID:container_path
# 从容器复制到主机
docker cp containerID:container_path host_path

23.显示一个镜像的历史;
docker history image_name

24.发布docker镜像
docker push new_image_name
要发布到私有Registry中的镜像,在镜像命名中需要带上Registry的域名(如果非80端口,同时需要带上端口号)比如:
docker push dockerhub.yourdomain.com:443/hello.demo.kdemo:v1.0

25.查看docker0的网络(宿主机上操作)
ip a show docker0

26.查看容器的IP地址
docker inspect -f ‘{{ .NetworkSettings.IPAddress }}’

27.附着到容器内部查看其内部ip:
ip a show eth0

==============
Dockerfile中一些常见的指令:

FROM:指定基础镜像
RUN:执行命令
COPY:复制文件
ADD:更高级的复制文件
CMD:容器启动命令
ENV:设置环境变量
EXPOSE:暴露端口

WEBLOGIC从单个模板创建域脚本

# 调用WLST来执行.py脚本
# source /$DOMAIN_HOME/bin/setDomainEnv.sh
# java weblogic.WLST xxx.py

# Read the template to use for creating the domain
readTemplate(‘oracle_home/middleware/wlserver/common/templates/wls/wls.jar’)

# Set the listen address and listen port for the Administration Server
cd(‘Servers/AdminServer’)
set(‘ListenAddress’,”)
set(‘ListenPort’, 7001)

# Enable SSL on the Administration Server and set the SSL listen address and port
create(‘AdminServer’,’SSL’)
cd(‘SSL/AdminServer’)
set(‘Enabled’, ‘True’)
set(‘ListenPort’, 7002)

# Set the domain password for the WebLogic Server administration user
cd(‘/’)
cd(‘Security/base_domain/User/’adminusername’)
cmo.setPassword(‘adminpassword’)

# If the domain already exists, overwrite the domain
setOption(‘OverwriteDomain’, ‘true’)

# write the domain and close the template
writeDomain(‘/domains/mydomain’)
closeTemplate()

exit()

# 调用WLST来执行.py脚本
# source $DOMAIN_HOME/bin/setDomainEnv.sh
# java weblogic.WLST xxx.py

connect(“weblogic”,”weblogic21″,”t3://127.0.0.1:7001″)
edit()
startEdit()

cd(‘/SecurityConfiguration/’+domainName);

cmo.setConnectionFilter(‘weblogic.security.net.ConnectionFilterImpl’)

set(‘ConnectionFilterRules’,jarray.array([String(‘10.0.0.0/8 * * allow t3 t3s’),String(‘127.0.0.1 * * allow t3 t3s’),String(‘* * 7001 deny t3 t3s’)],String))

save()
activate()

# 调用WLST来执行.py脚本
# source /$DOMAIN_HOME/bin/setDomainEnv.sh
# java weblogic.WLST xxx.py

connect(username=”weblogic”,password=”weblogic21″,url=”t3://127.0.0.1:7001″)

domainConfig()
edit()
startEdit()

servers=cmo.getServers()
for server in servers:
cd(‘/Servers/’ + server.getName())
cmo.setIIOPEnabled(false)

save()
activate()
disconnect()
exit()

weblogic10.3.6自动打补丁脚本

#!/bin/bash

MW_HOME=”/home/weblogic/Oracle/Middleware”
PATCH_FILE=”p33172858_1036_Generic.zip”
PATCH_TO_REMOVE=”21Y4″

# echo “Empty cache_dir”
rm -f ${MW_HOME}/utils/bsu/cache_dir/*

# echo “Download patch file”
wget http://10.1.1.1/weblogic/${PATCH_FILE}
unzip ${PATCH_FILE}

PATCH=`ls *.jar | cut -d’.’ –complement -f2-`
CATALOG=`ls patch-catalog*.xml`

# echo “Patch”
echo “PATCH=$PATCH”
echo “CATALOG=$CATALOG”

cp ${PATCH}.jar ${MW_HOME}/utils/bsu/cache_dir/.
cp ${CATALOG} ${MW_HOME}/utils/bsu/cache_dir/patch-catalog.xml

cd ${MW_HOME}/utils/bsu
#./bsu.sh -view -status=applied -prod_dir=${MW_HOME}/wlserver_10.3

if [ -n “$PATCH_TO_REMOVE” ]; then
${MW_HOME}/utils/bsu/bsu.sh -remove -prod_dir=${MW_HOME}/wlserver_10.3 -patchlist=${PATCH_TO_REMOVE} -verbose
fi

${MW_HOME}/utils/bsu/bsu.sh -prod_dir=${MW_HOME}/wlserver_10.3 -patchlist=${PATCH} -verbose -install

. ${MW_HOME}/wlserver_10.3/server/bin/setWLSEnv.sh
java weblogic.version

# 假设A服务器为源文件,B服务器为接收A推送文件的目标服务器。
# A服务器创建无密码的公钥
#ssh-keygen -f ~/.ssh/id_rsa -q -P “”
# A的公钥拷贝到B服务器,实现登录免密
#scp ~/.ssh/id_rsa.pub user@10.1.1.1/home/user/.ssh/authorized_keys

if [ -f /var/tmp/rsync_updates ]; then
echo “Updates via rsync already running.”
exit 0
fi

if [ -d /home/update/centos7 ] ; then
touch /var/tmp/rsync_updates

# 同步tsinghua的centos7最新包
rsync -aqzSHP –delete –exclude “local*” –exclude “isos” –exclude “atomic” –exclude “cloud” –exclude “dotnet” –exclude “configmanagement” –exclude “cr” –exclude “fasttrack” –exclude “infra” –exclude “messaging” –exclude “nfv” –exclude “opstools” –exclude “paas” –exclude “rt” –exclude “sclo” –exclude “storage” –exclude “virt” mirrors.tuna.tsinghua.edu.cn::centos/7/ /home/update/centos7/

# 同步tsinghua的epel7最新包
rsync -aqzSHP –delete –exclude “local*” –exclude “SRPMS” –exclude “aarch64” –exclude “ppc64” –exclude “ppc64le” –exclude “source” mirrors.tuna.tsinghua.edu.cn::epel/7/ /home/update/epel7/

# 推送centos7的最新包到下游更新服务器
rsync -aqzSHP –delete -e ‘ssh -p 22 -o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null’ /home/update/centos7/ user@10.1.1.1:/home/user/www/centos7/

# 推送epel7的最新包到下游更新服务器
rsync -aqzSHP –delete -e ‘ssh -p 22 -o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null’ /home/update/epel7/ user@10.1.1.1:/home/user/www/epel7/
/bin/rm -f /var/tmp/rsync_updates
else
echo “Target directory /home/update/centos7 not present.”
fi

============BTW:rsync参数说明
-a, –archive 归档模式,表示以递归方式传输文件,并保持所有文件属性,等于-rlptgoD
-v, –verbose 详细模式输出
-q, –quiet 精简输出模式
-S, –sparse 对稀疏文件进行特殊处理以节省DST的空间
-H, –hard-links 保留硬链结
-P, -partial 保留那些因故没有完全传输的文件,以是加快随后的再次传输
-z, –compress 对备份的文件在传输时进行压缩处理

echo $JAVA_HOME

./opatch apply -silent -jre $JAVA_HOME/jre

weblogic10.3.6卸载补丁脚本

#!/bin/bash
BSU_PACH=/home/weblogic/Oracle/Middleware/utils/bsu
WLSHOME_PACH=/home/weblogic/Oracle/Middleware/wlserver_10.3

# 将获取到的补丁jar包放入临时的文件,方便后续卸载
cd ${BSU_PACH} && ./bsu.sh -prod_dir=${WLSHOME_PACH} -status=applied -verbose -view | grep jar > tmp_jar

# 将查询到的tmp_jar文件通过tac逆序取出
jar_names=($(tac tmp_jar | awk ‘{print $NF}’ | awk -F ‘.’ ‘{print $(NF-1)}’))
for jar_name in ${jar_names[@]}; do
echo “remove ${jar_name}”
cd ${BSU_PACH} && ./bsu.sh -remove -patchlist=${jar_name} -prod_dir=${WLSHOME_PACH}
done

#!/bin/bash
BSU_PACH=/home/weblogic/Oracle/Middleware/utils/bsu
WLSHOME_PACH=/home/weblogic/Oracle/Middleware/wlserver_10.3
PKG_PACH=ftp://10.1.1.1/patch/weblogic/10.3.6/
PKG_NAME=p33172858_1036_Generic.zip

# 判断清空旧文件夹中内容或创建补丁文件夹
if [ -d ${BSU_PACH}/cache_dir ];then
cd ${BSU_PACH}/cache_dir; rm -rf *
else
mkdir -p ${BSU_PACH}/cache_dir
fi

# PKG_NAME是补丁包名称
cd ${BSU_PACH}/cache_dir && curl -o ./${PKG_NAME} ${PKG_PACH}/${PKG_NAME}

# 解压补丁包
cd ${BSU_PACH}/cache_dir && unzip *.zip

#更改bsu.sh脚本中的内存参数,提高打补丁速度
if [ -f ${BSU_PACH}/bsu.sh.bak ];then
echo “bsu has changed.”
else
cp ${BSU_PACH}/bsu.sh ${BSU_PACH}/bsu.sh.bak
cd ${BSU_PACH} && sed -i ‘5c MEM_ARGS=”-Xms4096m -Xmx4096m -XX:-UseGCOverheadLimit”‘ ./bsu.sh
fi

#停服务
ps -ef | grep java| grep weblogic | grep -v “grep” 2>&1 >/dev/null
if [[ $? -eq 0 ]];then
ps -ef |grep java| grep weblogic | grep -v “grep”|awk ‘{print $2}’|xargs kill -9
else
echo “weblogic process is not exsits”
fi

#打补丁:
cd ${WLSHOME_PACH}/server/bin && source setWLSEnv.sh
cd ${BSU_PACH}/cache_dir && PK=$(ls -lt *.jar | head -n 1 | awk ‘{print $NF}’ | awk -F “.” ‘{print $1}’)
cd ${BSU_PACH} && ./bsu.sh -install -patch_download_dir=${BSU_PACH}/cache_dir -patchlist=${PK} -prod_dir=${WLSHOME_PACH}

#启动weblogic服务
#nohup /home/weblogic/Oracle/Middleware/user_projects/domains/base_domain/bin/startWebLogic.sh &

#!/bin/bash
export ORACLE_HOME=/home/weblogic/Oracle/Middleware/Oracle_Home
OP_PACH=${ORACLE_HOME}/OPatch
PKG_PATCH=ftp://10.1.1.1/patch/weblogic/12.1.3
PKG_NAME=p33172866_121300_Generic.zip
linshi=/home/weblogic/patch

# 创建新文件夹
if [[ -d ${linshi} ]];then
rm -rf ${linshi}
else
mkdir -p ${linshi}
fi

# 获取补丁包
cd ${linshi} && curl -o ./${PKG_NAME} ${PKG_PATCH}/${PKG_NAME}

# 解压
which unzip &> /dev/null
if [[ $? -eq 0 ]];then
unzip ${linshi}/*.zip -d ${linshi};
else
echo “unzip is not exsits, yum install it first, plz”
fi

# 停止weblogic服务
ps -ef | grep java| grep weblogic | grep -v “grep” &> /dev/null
if [[ $? -eq 0 ]];then
ps -ef |grep java| grep weblogic | grep -v “grep”|awk ‘{print $2}’|xargs kill -9
else
echo “weblogic process is not exsits”
fi

# 打补丁
PKG_NAME=$(cd ${linshi} && ls | grep -Ev ‘*.zip’)
cd ${linshi}/${PKG_NAME} && ${OP_PACH}/opatch apply -silent

# 启动weblogic
#nohup ${ORACLE_HOME}/user_projects/domains/base_domain/startWebLogic.sh &