Docker相关命令

本文详细介绍了如何在CentOS 7上安装Docker,包括添加阿里云镜像源、安装指定版本Docker、启动和验证Docker服务、配置Docker镜像加速器,以及常用Docker命令的使用,如运行MySQL容器和处理文件挂载问题。此外,还讲解了Docker数据卷的创建、使用和管理。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1、docker相关命令
1、centos7安装docker
1.0 前提
Docker 要求 CentOS 系统的内核版本高于 3.10

uname -r # 查看系统版本

1.1 安装需要的软件包

yum install -y yum-utils device-mapper-persistent-data lvm2

yum-util 是 yum仓库管理扩展工具包,即它提供了 yum-config-manager 功能 另外两个是 devicemapper 驱动依赖的
1.2 添加yum源
配置yum源,是为了装 docker 软件 配置 阿里云镜像仓库(适合国内用户)

yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo

1.3 更新yum缓存

yum makecache fast

1.4 查看仓库中docker的版本 (可跳过)
yum list docker-ce --showduplicates | sort -r #列出并排序存储库中可用的版本。按版本号(从高到低)对结果进行排序

1.5 安装docker(二选一)
建议先运行 yum update 更新一下系统会更好
方式一:安装最新版 (推荐)

yum install -y docker-ce

方式二:安装指定版 命令为:yum install docker-ce-版本号(我选:docker-ce-20.10.1-3.el7.x86_64 )

yum install docker-ce-20.10.1-3

1.6 启动Docker

systemctl start docker

1.7 加入开机自启

systemctl enable docker

1.8 验证是否安装成功

docker version

注:有client和service两部分表示docker安装启动都成功了,命令中间不需要-
1.9 Docker 镜像加速器
配置加速器,是为了从官方拉取各种docker的镜像,生成文件

/etc/docker/daemon.json (可以用命令cat也可以用vi)
tee /etc/docker/daemon.json <<-EOF 
{ "registry-mirrors": [ "https://0obb7ez3.mirror.aliyuncs.com" ] } EOF 
systemctl daemon-reload 
systemctl restart docker

1.10 删除docker

yum remove docker-ce docker-ce-cli docker-ce-rootless-extras

2、docker命令

docker help # 检查最新Docker可用命令 
docker version # 提供docker 版本信息, -v 也可以 
docker attach # 将本地输入、输出、错误流附加到正在运行的容器 
docker commit # 从当前更改的容器状态创建新镜像 
docker exec # 在活动或正在运行的容器中运行命令 
docker history # 显示镜像历史记录 
docker info # 显示系统范围信息 
docker login # 登录到本地注册表或Docker Hub 
docker search tomcat # 在 Docker Hub 中搜索 tomcat 镜像 
docker search -f=stars=3 alpine # 查询三颗星及以上名字包含 alpine 的镜像 
docker pull tomcat # 从本地注册表或Docker Hub中提取镜像或存储库 
docker imges  # 查看本地镜像
docker ps -a # 查看所有的容器 --no-trunc : 查看详细 
docker start 容器id # 启动已停止的容器 
docker stop 容器id # 停止运行容器 
docker restart 容器id # 停止并启动容器 
docker rm 容器id # 移除容器 
docker rm -f : 强制删除 
docker rmi 镜像名 # 删除镜像 
docker run # 在隔离容器中运行命令
docker logs 容器id # 查看容器日志 
docker run -it nginx:latest /bin/bash # -it : 使用镜像nginx:latest以交互模式启动一个容器 # 在容器内执行/bin/bash 命令 # -itd : 后台运行容器,并返回容器ID (推荐方式) 
docker start $(docker ps -a -q) #启动所有的容器, 无法控制启动顺序 
docker stop $(docker ps -a -q) #关闭所有的容器 
docker inspect # 查找有关docker容器和镜像的系统级信息 
docker inspect node1 # 查看容器node1的目录对应关系 
docker system prune # 清理磁盘,删除关闭的容器、无用的数据卷和网络, -a: 可以将没有镜像 都删掉 
docker container prune # 清理所有停止运行的容器 
docker image prune # 清理所有悬挂()镜像 
docker rmi $(docker images -qf "dangling=true") docker rm $(docker ps -a | grep Exited | awk '{print $1}') #删除异常停止的docker 容器 
docker rmi -f $(docker images |grep ''|awk '{print $3}') #删除名称或标签为 none的镜像 
docker system df # 查看 Docker 的磁盘使用情况 
退出: ctrl - p , ctrl - q
docker stop `docker ps -a -q` #停止所有容器
docker rm `docker ps -a -q`  #删除所有镜像
docker rmi `docker images -q | awk '/^<none>/ { print $3 }'` #按条件删除镜像没有打标签
docker rmi --force `docker images | grep doss-api | awk '{print $3}'`   #按条件删除镜像镜像名包含关键字 //其中doss-api为关键字
docker exec -it ubuntu1 /bin/bash  #进入名称为ubuntu1的容器
docker ps --format "table {{.ID}}\t{{.Names}}\t{{.Status}}"  #显示容器的ID、名称、状态
docker logs --tail="10" mytest  #例如打印容器mytest应用后10行的内容
docker logs -f 容器名/容器ID  #实时打印docker日志
docker stats  #查看docker容器使用资源

2.1 运行容器

docker run -itd --name mysql -p 3306:3306 \
-v /opt/mysql/data:/var/lib/mysql \ 
-e MYSQL_ROOT_PASSWORD=sq \ 
registry.cn-hangzhou.aliyuncs.com/sqqdcl/db:v5

当前版本: MySQL 5.7.31
在容器内sock文件为: /run/mysqld/mysqld.sock , 所以要用IP方式连接
连接容器 mysql :

mysql -h 127.0.0.1 -uroot -psq 

同步时间用:

-v /etc/localtime:/etc/localtime:ro 

参数解释
docker run : 表示创建并运行容器
d 表示是后台运行
–name mysql : 表示给容器取一个名字叫:mysql
-v : 目录挂载. -v 宿主机的目录:容器的目录
-v /opt/mysql/data:/var/lib/mysql : 表示把本地目录挂载到容器中的目录
-p : 端口映射. -p 宿主机的端口:容器的端口
-p 3306:3306 : 表示把容器的3306端口映射到宿主机的3306端口
-e MYSQL_ROOT_PASSWORD=sq : 表示设置一个环境变量 , root密码设置为sq
registry.cn-hangzhou.aliyuncs.com/sqqdcl/db:v5 : 代表镜像名称及版本
如果当前宿主系统里有mysql 进程,需要用 systemctl stop mysqld 或 kill -9 [进程号] 来停止
3、docker -v挂载文件时遇到的坑
1、挂载分为文件挂载和目录挂载
2、文件挂载时,宿主机需要自己提前创建好文件,不然会出问题。自己不创建文件的话 执行完命令后会将它创建成目录
3、挂载目录时 可以不自己创建目录,会根据目录的挂载路径将 容器内的目录下的文件夹拷贝过来
4、挂载成功后,如果修改挂载文件的内容,容器内的文件不会实时更新,需要重启容器。如果修改的是挂载目录下的文件,则会实时更新,所以推荐挂载目录
5、下面的nginx容器运行示例

docker run --name nginx100 -p 9001:80 -v /home/docker-nginx/nginx.conf:/etc/nginx/nginx.conf -v /home/docker-nginx/log:/var/log/nginx -v /home/docker-nginx/conf.d:/etc/nginx/conf.d -d nginx

如果遇到容器运行起来返回了容器id,但是docker ps 发现并没有运行,请严格按照上述步骤。

真实开发版本:
可供参考的运行命令:这是后期显示的,自己拿捏。

docker run
–name=nginx
–hostname=iZ8vbbq5i0f69sglswx8ddZ
–env=PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
–env=NGINX_VERSION=1.19.2
–env=NJS_VERSION=0.4.3
–env=‘PKG_RELEASE=1~buster’
–volume=/opt/dockervols/nginx/ssl:/etc/nginx/ssl
–volume=/opt/dockervols/nginx/logs:/var/log/nginx
–volume=/opt/dockervols/nginx/nginx.conf:/etc/nginx/nginx.conf
–volume=/opt/dockervols/nginx/html:/usr/share/nginx/html
–volume=/opt/dockervols/nginx/conf.d:/etc/nginx/conf.d
–network=host
–expose=80/tcp
–restart=always
–label=‘maintainer=NGINX Docker Maintainers docker-maint@nginx.com’
–log-opt max-size=100m
–log-opt max-file=3
–detach=true
nginx:1.19
nginx -g ‘daemon off;’

4、docker数据卷
1、新建、移除Volume

docker volume create my-vol
docker volume rm 卷名  #移除一个或多个数据卷,不能移除被容器使用的数据卷。

2、列出Volumes

docker volume ls
docker volume ls -q  #只显示数据卷名称

3、查看volume详情

docker volume inspect my-vol

volume 在host上的默认目录为:/var/lib/docker/volumes/$(VOLUME NAME)/_data
新建的volume内容为空
4、使用volume
4.1新建container
新建container myweb01并使用volume my-vol

docker run -d -p 80:80 -v my-vol:/usr/local/apache2/htdocs --name myweb01 httpd

容器myweb01的80端口被映射为主机的80端口,my-vol被挂载到apache server存放 静态文件的目录/usr/local/apache2/htdocs
4.2访问myweb01

curl 127.0.0.1:80

4.3再次查看volume内容

 ll /var/lib/docker/volumes/my-vol/_data  
 more /var/lib/docker/volumes/my-vol/_data/index.html 

更新volume中的index.html,发现容器myweb01的访问内容也一并更新。
4.5销毁volume

docker rm -f -v myweb01  #删除容器及数据卷
more /var/lib/docker/volumes/my-vol/_data/index.html
docker ps -a
docker volume ls
docker volume prune  #移除未使用的数据卷。
docker volume ls 
more /var/lib/docker/volumes/my-vol/_data/index.html

当销毁容器时,volume没有被同时消除,留下孤儿volume,通过docker volume prune即可删除

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值