一、Docker 设置和镜像源
1.1、设置
#查看 Docker 信息
docker version
docker info#守护线程启动:
systemctl daemon-reload 重启Docker服务:
systemctl restart docker#关闭Docker服务
sudo systemctl stop docker#启动Docker服务
systemctl start docker#设置容器开机自启动
#法一 创建容器、使用docker run命令时,添加参数--restart=always,表示该容器随docker服务启动而自动启动
docker run --name mysqlLatest -p 3307:3306 --restart=always -d mysql#若容器已启动,希望设置开机自启动
docker update 容器名/容器ID --restart=always#清理未使用的容器
docker container prune#清理未使用的镜像
docker image prune#清理未使用的网络
docker network prune#清理构建缓存
docker builder prune
1.2、Docker镜像源配置
{"registry-mirrors": ["https://q5qydbjv.mirror.aliyuncs.com","https://docker.m.daocloud.io","https://dockerproxy.com","https://docker.mirrors.ustc.edu.cn","https://docker.nju.edu.cn"]
}
二、镜像、容器
2.1、镜像
#查看Docker 镜像
docker images
docker images -a#查看Docker进程信息
docker ps#查看日志
docker logs -f a21ad4af2d71
docker logs --tail 1000 47c2dfdcbc2c#保存镜像(精简版)
docker commit 7ca736d99653 my_image#加载本地镜像并设置标签
docker load -i my_image.tar
docker tag my_image:latest my_image:v1#从Docker Hub查找/搜索镜像
docker search [options] TERM
docker search -f STARS=9000 mysql #搜索stars收藏数不小于10以上的mysql镜像#拉取nginx镜像
docker pull nginx:latest
拉取指定版本镜像
docker pull 镜像名:tag #删除镜像
docker rmi 镜像名/镜像ID #删除镜像
docker rmi -f 镜像名/镜像ID #强制删除
docker rmi -f 镜像名 镜像名 镜像名 #删除多个 其镜像ID或镜像用用空格隔开即可
docker rmi -f $(docker images -aq) #删除全部镜像,-a 意思为显示全部, -q 意思为只显示IDdocker image rm 镜像名称/镜像ID #强制删除镜像#查看Docker镜像内的文件:
docker run -it --rm 镜像名称 /bin/sh#从容器内拷贝文件到主机上
docker cp 容器ID:容器内路径 目的主机路径
docker cp 3065f084c80d:a.txt a.txt#拉取镜像 镜像源网不通:
Error response from daemon: Get "https://registry-1.docker.io/v2/":dial tcp 108.160.165.139:443: i/o timeout#运行 Nginx 并挂在目录/文件
docker run -d --name nginx-test -p 8080:80 -v
/mnt/nginx-mnt/nginx.conf:/etc/nginx/nginx.conf -v
/mnt/nginx-mnt/logs:/var/log/nginx -v
/mnt/nginx-mnt/html:/usr/share/nginx/html -v
/mnt/nginx-mnt/conf:/etc/nginx/conf.d --privileged=true nginx
2.2、容器
#显示正在运行的容器
docker ps
#-a,--all 显示全部容器,包括已停止的(默认只显示运行中的容器)
docker ps -a#容器怎么来? docker run 创建并运行一个容器,处于运行状态。
#--name 给要运行的容器起的名字; -p 将宿主机端口与容器端口映射,冒号左侧是宿主机端口,右侧是容器端口; -d 表示可后台运行容器 (守护式运行)。具体样例见下
docker run --name containerName -p 80:80 -d nginx#让一个运行的容器暂停
docker pause 容器名/容器ID
#让一个容器从暂停状态恢复运行
docker unpause name
#停止一个运行的容器(杀死进程、回收内存,仅剩文件系统)
docker stop name
#让一个停止的容器再次运行
docker start name
#重启容器
docker restart name
#docker stop与docker kill的区别:都可以终止运行中的docker容器。类似于linux中的kill和kill -9这两个命令,docker stop与kill相似,docker kill与kill -9类似
#杀掉一个运行中的容器
docker kill 容器名
#更换容器名
docker rename 容器名 新容器名#删除容器
#删除容器
docker rm 容器名/容器ID
#强制删除
docker rm -f CONTAINER#删除多个容器 空格隔开要删除的容器名或容器ID
docker rm -f 容器名 容器名 容器名
#删除全部容器
docker rm -f $(docker ps -aq)#查看容器运行日志
docker logs 容器名
#持续跟踪日志
docker logs -f 容器名
#查看末尾多少行
docker logs -f --tail=20 容器名#进入容器执行命令,两种方式 docker exec 和 docker attach,推荐docker exec
#方式一 docker exec。
docker exec -it 容器名/容器ID bash
#方式二 docker attach,推荐使用docker exec
docker attach 容器名/容器ID#从容器退到自己服务器中(不能用ctrl+C)
exit #直接退出。未添加-d(持久化运行容器)时,执行此参数 容器会被关闭
ctrl+p+q #优雅退出。无论是否添加-d参数,执行此命令容器都不会被关闭
三、其它操作
3.1、Linux的一些操作
#登录 149 服务器
ssh -p 9133 root@**.**.*.149#退出149服务器
Ctry + D1.编辑文本
vim
# 不保存-退出
:q
# 不保存-强制退出
:q!
# 保存-退出
:wq安装 rar
wget https://www.rarlab.com/rar/rarlinux-x64-6.0.2.tar.gz
tar xf rarlinux-x64-6.0.2.tar.gz
tar -zxvf rarlinux-x64-6.0.2.tar.gz
cd rar
make
make install
解压文件:
unrar x ***.rar
unrar x dist.rar
3.2、重建 Overlay2 目录
#停止 Docker 服务:首先停止 Docker 服务,以防止数据的进一步损坏。
sudo systemctl stop docker#重建 Overlay2 目录:可以通过重新初始化 Docker 数据目录来重建 Overlay2 目录。
sudo rsync -a /var/lib/docker /var/lib/docker-backup
sudo rm -rf /var/lib/docker
sudo rsync -a /var/lib/docker-backup /var/lib/docker#启动 Docker 服务:重新启动 Docker 服务,确保 Overlay2 目录已经被重建。
sudo systemctl start docker
sudo systemctl restart docker
3.3、常用Shell脚本
1.
#!/bin/bash
data_path="/data"
data_rar_path="/data/web"
web_html_path="/mnt/nginx-mnt/html"cd $data_path# 删除 data/dist.rar
rm -f /data/dist.rar# 删除 dist 文件
rm -rf /mnt/nginx-mnt/html/dist# 移包
mv $data_rar_path/dist.rar $data_path# 解包
unrar x dist.rar# 移包
mv dist/ $web_html_path# 删除 dist.rar
rm -f $data_rar_path/dist.rar
2.
#!/bin/bash
dir="/data"
dockerfile_path="/data"cd $dir
service_name="sdp"
service_prot=8679
#查看镜像id
IID=$(docker images | grep "$service_name" | awk '{print $3}')
echo "IID $IID"
CID=$(docker ps -a | grep "$service_name" | awk '{print $1}')
echo "CID $CID"
if [ -n "$CID" ]
thenecho "exist $SERVER_NAME CONTAINER,CID=$CID"#删除容器echo "stop CONTAINER..."docker stop $CIDecho "REMOVE CONTAINER..."docker rm $CID
fi
if [ -n "$IID" ]
thenecho "exist $SERVER_NAME image,IID=$IID"#删除镜像docker rmi -f $service_nameecho "delete $SERVER_NAME image"#构建docker build -f $dockerfile_path/Dockerfile -t $service_name .echo "build $SERVER_NAME image"
elseecho "no exist $SERVER_NAME image,build docker"#构建#cd docker build -f $dockerfile_path/Dockerfile -t $service_name .echo "build $SERVER_NAME image"
fi
#启动
echo "配置完成启动中..."
docker run --user=0:0 --hostname dlsdp --add-host dlsdp:127.0.0.1 -d --name $service_name --net=host -p $service_prot:$service_prot -v /data/logs:/etc/sdp/logs $service_name