Docker的使用解释

该博客会及时更新

Centos 7.9中Docker的使用

现在是2022年12月18日,我已经成社畜将近半年时间了,毕业了之后的时间过得好快啊。。。;w;
言归正传,我们公司内一般使用Centos7.9对前后端程序进行前后端程序的打包,打包成tar包之后再部署到甲方服务器上面(一般都是一些比较简单的产品和项目),docker就是给我们的项目或者进程单独存放到一个封闭的位置,提供程序以及程序需要的所有环境,防止程序移植到不同的系统中出现一些兼容性的错误
首先需要一个Dockerfile文件来帮助docker将前后端程序打包成镜像、然后在打包成tar包。

docker的安装

  1. (可选)先换源,此处演示使用阿里云镜像源,可以使得下载命令更快
#查看原有的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使用

显示系统信息,包括镜像、容器数量

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的编写与解释详情可见其他博客)


前后端的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: 绑定一个卷

你可能感兴趣的:(工作需要,docker,容器,运维)