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即可删除