docker 学习笔记

 
更多

docker常用命令:
docker ps // 查看所有正在运行容器
docker ps -a // 查看所有容器

docker ps -a -q // 查看所有容器ID

docker stop containerId // containerId 是容器的ID

docker stop $(docker ps -a -q) // stop停止所有容器
docker rm $(docker ps -a -q) // remove删除所有容器
docker restart 容器id  //重启容器
docker run -d -p 8008:80 –name nginx-name nginx:1.1.1 启动一个新docker实例(nginx:1.1.1是版本号)

目录映射:
docker run -p 8079:80 –name nginx-test –privileged=true -v /testdocker/default.conf:/etc/nginx/conf.d/default.conf  -v /testdocker/html:/usr/share/nginx/html -d nginx:1.14
命令解读:
-p: 指定端口映射,格式为:主机(宿主)端口:容器端口
–privileged=true 关闭安全权限,否则你容器操作文件夹没有权限
-v 挂载目录,主机目录:容器目录,在创建前容器是没有指定目录时,docker 容器会自己创建

docker 映射多个连续端口

docker run -d –name 容器 -it –privileged=true -p9600-9700:9600-9700 镜像名称

查看docker 版本号信息

docker version

docker info

查看自己服务器中docker 镜像列表

docker images

搜索镜像

docker search 镜像名docker search –filter=STARS=9000 mysql 搜索 STARS>9000的 mysql 镜像

拉取镜像 不加tag(版本号) 即拉取docker仓库中 该镜像的最新版本latest 加:tag 则是拉取指定版本
docker pull 镜像名
docker pull 镜像名:tag
拉取最新版 mysql
docker pull mysql:last
docker pull mysql 不加tag 则拉取最新镜像 即last

删除镜像 ——当前镜像没有被任何容器使用才可以删除

#删除一个
docker rmi -f 镜像名/镜像ID

#删除多个 其镜像ID或镜像用用空格隔开即可
docker rmi -f 镜像名/镜像ID 镜像名/镜像ID 镜像名/镜像ID

#删除全部镜像  -a 意思为显示全部, -q 意思为只显示ID
docker rmi -f $(docker images -aq)

强制删除镜像

docker image rm 镜像名称/镜像ID

保存镜像
将我们的镜像 保存为tar 压缩文件 这样方便镜像转移和保存 ,然后 可以在任何一台安装了docker的服务器上 加载这个镜像

命令:
docker save 镜像名/镜像ID -o 镜像保存在哪个位置与名字
exmaple:
docker save tomcat -o /myimg.tar

导入镜像
docker load -i 镜像保存文件位置

从文件导入并恢复为镜像

docker 容器命令

查看正在运行容器列表
docker ps

查看所有容器 —–包含正在运行 和已停止的
docker ps -a

容器怎么来呢 可以通过run 镜像 来构建 自己的容器实例
运行一个容器
# -it 表示 与容器进行交互式启动 -d 表示可后台运行容器 (守护式运行)  –name 给要运行的容器 起的名字  /bin/bash  交互路径
docker run -it -d –name 要取的别名 镜像名:Tag /bin/bash

例如我们要启动一个redis 把它的别名取为redis001 并交互式运行 需要的命令 —我这里指定版本号为5.0.5
#1. 拉取redis 镜像
docker pull redis:5.0.5

#2.命令启动
docker run -it -d –name redis001 redis:5.0.5 /bin/bash
docker run -it -d –name redis -p 6379:6379 redis:lates
docker run -it -d –name nginx -p 80:80 -p 443:443 -v /opt/nginx/:/etc/nginx/ nginx
docker run -it -d –name mysqlserver -p 3306:3306 -v /opt/mysql:/etc/mysql/ -v /opt/mysql/logs:/logs -v /opt/mysql/data:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=Gdlt#mysql2022 mysql:latest

#3.查看已运行容器
docker ps #查看已运行容器
docker ps -a #查看所以容器及容器的启动情况

netstat -untlp

# 停止容器
docker stop 容器名/容器ID

然后删除容器
#删除一个容器
docker rm -f 容器名/容器ID
#删除多个容器 空格隔开要删除的容器名或容器ID
docker rm -f 容器名/容器ID 容器名/容器ID 容器名/容器ID
#删除全部容器
docker rm -f $(docker ps -aq)

容器端口与服务器端口映射

命令:

-p 宿主机端口:容器端口
还是使用前方的 redis 镜像 尝试 将6379端口 映射到服务器的8888 如果成功了的话 那么咱们访问服务器的8888端口就会访问到咱们的 docker 中 的容器 redis002

-p 8888:6379 解析 将容器内部的 6379端口与docker 宿主机(docker装在哪太服务器 那台服务器 就是其宿主机)8888 端口进行映射 那通过外部访问宿主机8888端口 即可访问到 docker 容器 6379 端口了
docker run -itd –name redis002 -p 8888:6379 redis:5.0.5 /bin/bash

进入容器方式一
docker exec -it 容器名/容器ID /bin/bash

#进入 前面的 redis001容器   
docker exec -it redis001 /bin/bash

可以看到 我已经从主机alibyleilei 跳到了容器ID 对应下的 /data 已经是进入到容器内部了

进入容器方式二 —推荐使用 exec 方式
docker attach 容器名/容器ID

那怎么退出容器呢 ?

从容器内 退出到自己服务器中 需注意 两个退出命令的区别
#—–直接退出  未添加 -d(持久化运行容器) 时 执行此参数 容器会被关闭  
exit
# 优雅提出 — 无论是否添加-d 参数 执行此命令容器都不会被关闭
Ctrl + p + q

停止容器
docker stop 容器ID/容器名

重启容器
docker restart 容器ID/容器名

启动容器
docker start 容器ID/容器名

kill 容器
docker kill 容器ID/容器名

容器文件拷贝 —无论容器是否开启 都可以进行拷贝
#docker cp 容器ID/名称:文件路径  要拷贝到外部的路径 | 要拷贝到外部的路径  容器ID/名称:文件路径
#从容器内 拷出
docker cp 容器ID/名称: 容器内路径  容器外路径
#从外部 拷贝文件到容器内
docker  cp 容器外路径 容器ID/名称: 容器内路径

查看容器日志
docker logs -f –tail=要查看末尾多少行 默认all 容器ID

容器开机自启动容器
启动容器时,使用docker run命令时 添加参数–restart=always 便表示,该容器随docker服务启动而自动启动

ex:
docker run -it -d –name redis001 redis:5.0.5 /bin/bash –restart=always

docker restart nginx  #重启docker nginx

docker restart mysqlserver  #重启docker mysql

docker restart redis  #重启docker redis

docker log nginx #查看 doker nginx 启动日志 用于排除错误

docker log mysqlserver #查看 doker mysqlserver 启动日志 用于排除错误

docker log redis #查看 doker redis 启动日志 用于排除错误

docker exec -it nginx bash #进入容器

docker持久化(数据挂载)

简单来讲,就是将容器内的数据与外部宿主机文件绑定起来,类似一个双持久化,当容器删除时,宿主机文件数据目录仍在,下次启动容器只要将数据目录指向宿主机数据所在位置即可恢复!

具体请参考:docker 文件分层与数据卷挂载

命令:
-v 宿主机文件存储位置:容器内文件位置
如此操作,就将 容器内指定文件挂载到了宿主机对应位置,-v命令可以多次使用,即一个容器可以同时挂载多个文件

-v 宿主机文件存储位置:容器内文件位置 -v 宿主机文件存储位置:容器内文件位置 -v 宿主机文件存储位置:容器内文件位置
示例:
# 运行一个docker redis 容器 进行 端口映射 两个数据卷挂载 设置开机自启动
docker run -d -p 6379:6379 –name redis505 –restart=always  -v /var/lib/redis/data/:/data -v /var/lib/redis/conf/:/usr/local/etc/redis/redis.conf  redis:5.0.5 –requirepass “password”

方法二:不想删容器,又想让这个容器设置开机自启动,那么我们修改其启动配置即可!

命令:
docker  update –restart=always 容器Id 或者 容器名

docker container update –restart=always 容器Id 或者 容器名

docker容器启动时运行脚本
首先要写个一个开机脚本,脚本内容是你想要的程序。然后将其保存在根目录或者任意目录下。然后在run容器时,加上该脚本,这样每次容器启动都会运行该脚本。命令如下:

docker run  -itd –name test –restart=always amd64/ubuntu:18.04 /bin/bash /myStart.sh

需要注意的是,脚本(如myStart.sh)必须写绝对路径,而且前面必须有/bin/bash,该语句的意思就是启动容器时,使用/bin/bash来运行/myStart.sh这个脚本。
有些时候,如果我们需要使用多个脚本,可以使用一个脚本来启动其它的脚本,也可以使用下列命令

docker run  -itd –name test –restart=always amd64/ubuntu:18.04 /bin/bash /1.sh;/2.sh;/3.sh
更换容器名

docker rename 容器ID/容器名 新容器名

自己提交一个镜像
我们运行的容器可能在镜像的基础上做了一些修改,有时候我们希望保存起来,封装成一个更新的镜像,这时候我们就需要使用 commit 命令来构建一个新的镜像

docker commit -m=”提交信息” -a=”作者信息” 容器名/容器ID 提交后的镜像名:Tag
我们拉取一个tomcat镜像 并持久化运行 且设置与宿主机进行端口映射
docker pull tomcat
docker run -itd -p8080:8080 –name tom tomcat /bin/bash

查看docker工作目录
sudo docker info | grep “Docker Root Dir”

查看docker磁盘占用总体情况

du -hs /var/lib/docker/
查看Docker的磁盘使用具体情况

docker system df

删除 无用的容器和 镜像

#  删除异常停止的容器
docker rm `docker ps -a | grep Exited | awk ‘{print $1}’`
 
#  删除名称或标签为none的镜像
docker rmi -f  `docker images | grep ‘<none>’ | awk ‘{print $3}’`
清除所有无容器使用的镜像
注意,此命令只要是镜像无容器使用(容器正常运行)都会被删除,包括容器临时停止
docker system prune -a
查找大文件
find / -type f -size +100M -print0 | xargs -0 du -h | sort -nr
查找指定docker使用目录下大于指定大小文件
find / -type f -size +100M -print0 | xargs -0 du -h | sort -nr |grep ‘/var/lib/docker/overlay2/*’
ex:我这里是查找 /var/lib/docker/overlay2/* 开头的且大于100m的文件

docker 配额限制

通过docker run来限制Docker容器资源
我们可以使用docker run命令直接设置资源限制。这是一个简单的办法。但是,该限制于只适用于映像的一次特定执行任务
Memory 内存限制
例如,让我们将容器可以使用的内存限制为512mb
docker run -m 512m nginx

我们还可以设置一个软限制或者叫保留,当docker检测到主机内存不足时激活:
docker run -m 512m –memory-reservation=256m nginx

CPU 限制
默认情况下,访问主机的CPU是无限制的,我们可以使用CPUs参数设置cpu限制。例如,让我们约束容器最多使用两个cpu:

docker run –cpus=2 nginx
我们还可以指定CPU分配的优先级。默认值是1024,数字越高优先级越高:
docker run –cpus=2 –cpu-shares=2000 nginx

打赏

本文固定链接: https://www.cxy163.net/archives/1901 | 绝缘体

该日志由 绝缘体.. 于 2022年06月02日 发表在 首页 分类下,
原创文章转载请注明: docker 学习笔记 | 绝缘体

报歉!评论已关闭.