2、Docker镜像和容器使用
2.1、镜像常用命令
01)、查找镜像:docker search 镜像名
02)、拉取镜像:docker pull 镜像名:版本号
03)、删除镜像:docker rmi 镜像名
04)、获取本地镜像列表:docker images
2.1.1、虚悬镜像
虚悬镜像:没有镜像名,也没有标签的镜像;
导致原因:构建和删除镜像时发生错误,可能会导致;
查询命令:docker images -f dangling=true
删除命令:
方式一:docker image prune
方式二:docker rmi $(docker images -q -f dangling=true)
2.2、容器常用命令
01)、启动容器:
docker run --name <容器名称> -d -p <主机端口:容器端口> <镜像名称>
-d:后台运行
-p:端口映射
举例:docker run --name nginx-test -d -p 80:80 nginx
02)、进入docker容器内部
方式1:docker exec -it <容器名称、容器 ID> /bin/bash
方式2:docker attach <容器 ID>
注意:使用 attach 的方式进入容器内部,如果从这个容器退出,会导致容器停止,所以不推荐使用该方式。
方式3:交互式启动进入容器内部
docker run -it [镜像名称、镜像id] /bin/bash
注意使用该方式启动并进入容器内部,退出方式有2种,
exit退出,容器停止;
ctrl+p+q退出,容器不会停止;
03)、查看容器
查看所有的容器(包括启用和未启用)命令:docker ps -a
查看启用的容器命令:docker ps
04)、启动已停止运行的容器
docker start <容器 ID、容器名称>
05)、停止容器
docker stop <容器 ID、容器名称>
06)、重启容器
docker restart <容器 ID、容器名称>
07)、删除容器
方式1:普通删除,容器在启动状态无法删除
docker rm <容器 ID、容器名称>
方式2:强制删除,容器在启动状态会强制删除并关闭
docker rm -f <容器 ID、容器名称>
方式3:批量删除
docker rm 容器1 容器2
docker rm ${docker ps -a -q}
08)、复制容器文件到主机
docker cp <容器id、容器名称>:<容器文件路径> <主机文件路径>
举例:docker cp nginx-test:/usr/share/nginx/html/50x.html /usr/local/nginx/html/50x.html
09)、复制主机文件到容器
docker cp <主机文件路径> <容器id、容器名称>:<容器文件路径>
举例:docker cp /usr/local/nginx/html/50x.html nginx-test:/usr/share/nginx/html/50x.html
10)、获取容器的元数据
docker inspect <容器id、容器名称>
2.3、目录和文件挂载
2.4、docker commit
docker commit 提交容器副本使其成为一个新的镜像
命令:
docker commit -m="提交的描述信息" -a="作者" 容器id 目标镜像名:标签名
举例:
针对ubuntu容器新增vim功能
apt-get update
apt-get -y install vim
提交新镜像到本地:
docker commit -m="添加vim功能" -a="hs" 51042a48b860 hs/myubuntu:1.1
2.4、docker私有仓库(registry版)
1、下载镜像私服镜像Docker Registry
docker pull registry
2、运行私有库Registry,相当于本地有个Docker hub
docker run --name registry -d -p 5000:5000 -v /usr/local/images-registry/:/tmp/registry --privileged=true registry
3、修改配置文件【/etc/docker/daemon.json】配置镜像私有仓库地址
{
"registry-mirrors": ["http://hub-mirror.c.163.com"], # 加速镜像设置
"insecure-registries": ["10.0.24.11:5000"] # 私有仓库设置
}
注意:docker 默认不允许http方式推送镜像,通过配置“insecure-registries”取消这个限制;
修改配置注意重启docker:systemctl restart docker
4、案例演示创建一个新镜像,ubuntu安装ifconfig命令
docker run -it hs/myubuntu:1.1 /bin/bash
apt-get update
apt-get install net-tools
docker commit 提交容器副本使其成为一个新的镜像
命令格式:docker commit -m="提交的描述信息" -a="作者" 容器id 目标镜像名:标签名
容器外执行:
docker commit -m="ifconfig cmd add" -a="hs" d161a30f15af hs/myubuntu:1.2
5、将新镜像修改为符合私服规范的Tag
docker tag hs/myubuntu:1.2 10.0.24.11:5000/hs/myubuntu:1.2
6、curl验证私服库有哪些镜像
curl -XGET http://10.0.24.11:5000/v2/_catalog
7、push推送到私服
docker push 10.0.24.11:5000/hs/myubuntu:1.2
8、curl验证私服库有哪些镜像2
curl -XGET http://10.0.24.11:5000/v2/_catalog
9、pull到本地并运行
docker pull 10.0.24.11:5000/hs/myubuntu:1.2
docker run -it 镜像id、镜像名 /bin/bash
2.5、docker私有仓库(harbor版)