该博客会及时更新
现在是2022年12月18日,我已经成社畜将近半年时间了,毕业了之后的时间过得好快啊。。。;w;
言归正传,我们公司内一般使用Centos7.9对前后端程序进行前后端程序的打包,打包成tar包之后再部署到甲方服务器上面(一般都是一些比较简单的产品和项目),docker就是给我们的项目或者进程单独存放到一个封闭的位置,提供程序以及程序需要的所有环境,防止程序移植到不同的系统中出现一些兼容性的错误
首先需要一个Dockerfile文件来帮助docker将前后端程序打包成镜像、然后在打包成tar包。
#查看原有的yum源
rpm -qa | grep yum
#删除原有的yum源
rpm -qa | grep yum | xargsrpm -e -nodeps
#删除之后再确认下
rpm -qa | grep yum
#使用wget下载阿里yum源repo文件
wget http://mirrors.aliyun.com/repo/Centos-7.repo
#备份当前yum源防止出现意外还可以还原回来
cd /etc/yum.repos.d/
cp /CentOS-Base.repo /CentOS-Base-repo.bak
#清理旧包
yum clean all
#把下载下来阿里云repo文件设置成为默认源
mv Centos-7.repo CentOS-Base.repo
#生成阿里云yum源缓存并更新yum源
yum makecache
yum update
2、安装docker命令或者docker-ce命令
安装docker命令
yum install -y docker
安装docker-ce命令
yum install -y docker-ce
这里推荐安装docker-ce,新版本的docker(截至2022年12月18日)不安全。其中-y是指安装过程中全部选择yes,可以不添加。
结束后输入
docker version
若出现版本则说明安装成功。
显示系统信息,包括镜像、容器数量
docker info
查看docker镜像(Docker镜像就是一种轻量级、可执行的独立软件包,它包含运行某个软件所需的所有内容)
docker images
查看正在运行的docker进程
docker ps
查看全部docker进程,这里-a是现实所有的包括在运行的或者出错的容器
docker ps -a
删除docker镜像
docker rmi 镜像名[:Tag] #根据名字删除镜像
docker rmi 镜像ID #根据镜像ID删除
docker rmi -f 镜像ID #强制删除镜像(如果容器已经启动则需先停止后方可删除)
docker rmi -f $(docker images -aq) #批量删除所有镜像
docker rmi $(docker images -f "dangling=true" -q --no-trunc) #删除悬浮镜像(Tag值为)
docker image prune -a --force --filter "until=48h" #删除48小时之前的镜像
docker image inspect --format='{{.RepoTags}} {{.Id}} {{.Parent}}' $(docker image ls -q --filter since=镜像id) #查找镜像被哪些镜像引用了
拉取镜像
docker pull 镜像名[:Tag] #下载镜像到本地,不指定Tag,默认为latest
创建镜像
docker build -f /opt/Dockerfile -t 镜像名:Tag /opt
-f #指定Dockerfile文件,不指定默认为当前路径的Dockerfile
-t #指定新生成的镜像名:Tag
/opt #代表构建镜像的上下文,通常使用点(.)表示在当前路径
#最常用命令
docker build -t 镜像名:Tag .
构建时拉取最新镜像
docker build --pull -t 镜像名:Tag .
发布镜像
docker login -u 用户名 -p密码 镜像仓库地址 #登录镜像仓库
docker tag 镜像名:Tag 镜像仓库地址/镜像名:Tag #给镜像打Tag
docker push 镜像仓库地址/镜像名:Tag #推送镜像到远程镜像仓库
镜像常用命令
docker history 镜像ID #查看镜像分层信息
docker history --format {{.CreatedBy}} --no-trunc=true 镜像ID #查看镜像完整构建命令
docker inspect 镜像ID #查看镜像详细信息
docker search 镜像名 #搜索镜像,默认从官方镜像仓库搜索
docker save 镜像名:Tag > nginx.tar #把镜像打成一个tar包
docker load -i nginx.tar #导入nginx镜像
docker system df #查看docker磁盘使用情况
docker system prune -f #删除停止的容器、至少一个容器未使用的所有网络、悬浮镜像、悬浮构建缓存;-f表示强制删除
docker system prune -a #在上述基础上再删除没有任何容器使用的镜像、构建缓存
查询容器日志
docker logs -f -t --tail 20 nginx
-f #动态查看
-t #显示时间戳
--tail 20 #显示最近的20行
查看指定时间后的日志,只显示最后100行:
docker logs -f -t --since=“2018-02-08” --tail=100 CONTAINER_ID
查看最近30分钟的日志:
docker logs --since 30m CONTAINER_ID
查看某时间之后的日志:
docker logs -t --since=“2018-02-08T13:23:37” CONTAINER_ID
查看某时间段日志:
docker logs -t --since=“2018-02-08T13:23:37” --until “2022-12-18T12:23:37” CONTAINER_ID
容器常用命令
docker ps #显示正在运行的容器
docker ps -a #显示所有容器
docker ps -l #显示最近的一个容器
docker ps -n2 #显示最近创建的两个容器
docker ps -q #显示容器ID
docker start 容器名 #启动容器
docker restart 容器名 #重启容器
docker stop 容器ID或容器名 #停止容器
docker kill 容器名 #强制停止容器
docker rm 容器ID或容器名 #删除容器
docker rm -f 容器名 #强制删除容器,可以删除运行中的容器
docker rm -v 容器名 #删除容器的同时也删除与之关联的volume
docker top 容器名 #查看容器里面的进程
docker stats 容器名 #查看容器资源使用情况(不指定容器,会查看所有容器的使用情况)
docker inspect 容器名 #查看容器元数据
docker exec -it 容器ID bash #进入容器,并分配一个新的终端
exit #退出容器
docker cp /etc/hosts 容器名:/opt #拷贝宿主机的hosts文件到容器的/opt目录下
docker cp 容器名:/opt/a.sh /tmp #拷贝容器的a.sh文件到宿主机的/tmp路径下
docker pause 容器名 #暂停容器
docker unpause 容器名 #取消暂停容器
docker commit -m="提交信息" -a="作者" 容器id 新镜像名:[Tag] #基于容器生成一个镜像(不推荐)
docker inspect -f '{{.HostConfig.LogConfig}}' 容器名 #查看容器日志策略
docker inspect --format "{{ .State.Pid }}" 容器名 #查看容器在宿主机对应的PID
创建容器
docker run [OPTIONS] IMAGE [COMMAND] [ARG...]
-a stdin: 指定标准输入输出内容类型,可选 STDIN/STDOUT/STDERR 三项;
-d: 后台运行容器,并返回容器ID;
-i: 以交互模式运行容器,通常与 -t 同时使用;
-P: 随机端口映射,容器内部端口随机映射到主机的端口
-p: 指定端口映射,格式为:主机(宿主)端口:容器端口
-t: 为容器重新分配一个伪输入终端,通常与 -i 同时使用;
--name="nginx-lb": 为容器指定一个名称;
--dns 8.8.8.8: 指定容器使用的DNS服务器,默认和宿主一致;
--dns-search example.com: 指定容器DNS搜索域名,默认和宿主一致;
-h "mars": 指定容器的hostname;
-e username="ritchie": 设置环境变量;
--env-file=[]: 从指定文件读入环境变量;
--cpuset="0-2" or --cpuset="0,1,2": 绑定容器到指定CPU运行;
-m :设置容器使用内存最大值;
--net="bridge": 指定容器的网络连接类型,支持 bridge/host/none/container: 四种类型;
--link=[]: 添加链接到另一个容器;
--expose=[]: 开放一个端口或一组端口;
--volume , -v: 绑定一个卷
数据卷
#数据卷默认路径:/var/lib/docker/volumes/
docker volume
docker volume ls #查看本地数据卷
docker inspect 卷名 #查看数据卷信息
docker的网络相关命令
#创建docker01网络,-o指定通过ifconfig命令查看到的名字
docker network create docker01 --subnet=10.10.10.0/24 -o com.docker.network.bridge.name=docker01
docker network ls #列出docker网络
docker network inspect 网桥名字或ID #查看网桥的详细信息
docker network rm 网桥名 #移除网络
docker network connect 网桥名 容器名 #将容器与网桥关联,表现形式为一个容器多个IP
Dockerfile这么写(Dockerfile的编写与解释详情可见其他博客)
前后端的Dockerfile并不一样,同时如果是想创建前端镜像,只需要项目打出来的包即可;后端程序需要打包编译好后将全部项目放在自己的Linux系统中进行打包
在自己的服务器上创建镜像
一般使用
docker build -t xxxx:1.0.0 .
-t 指的是使用后台守护程序创建镜像
1.0.0 指的是版本号
. 指的是使用的Dockerfile的位置,即当前目录下,使用其他路经也可以
导出镜像到tar包
docker save > XXXX.tar XXXX:1.0.0
或者
docker save - XXXX.tar XXXX:1.0.0
将tar包放到目标服务器上,一般先使用df -h
查询哪一个地方存储空间更多
将tar包导出镜像到目标服务器中
docker load < XXXXX.tar
就会自动生成镜像
根据镜像创建容器
docker run [OPTIONS] IMAGE [COMMAND] [ARG...]
-a stdin: 指定标准输入输出内容类型,可选 STDIN/STDOUT/STDERR 三项;
-d: 后台运行容器,并返回容器ID;
-i: 以交互模式运行容器,通常与 -t 同时使用;
-P: 随机端口映射,容器内部端口随机映射到主机的端口
-p: 指定端口映射,格式为:主机(宿主)端口:容器端口
-t: 为容器重新分配一个伪输入终端,通常与 -i 同时使用;
--name="nginx-lb": 为容器指定一个名称;
--dns 8.8.8.8: 指定容器使用的DNS服务器,默认和宿主一致;
--dns-search example.com: 指定容器DNS搜索域名,默认和宿主一致;
-h "mars": 指定容器的hostname;
-e username="ritchie": 设置环境变量;
--env-file=[]: 从指定文件读入环境变量;
--cpuset="0-2" or --cpuset="0,1,2": 绑定容器到指定CPU运行;
-m :设置容器使用内存最大值;
--net="bridge": 指定容器的网络连接类型,支持 bridge/host/none/container: 四种类型;
--link=[]: 添加链接到另一个容器;
--expose=[]: 开放一个端口或一组端口;
--volume , -v: 绑定一个卷