docker安装
不知道为什么docker官网没有centos的文档了。。。
# 移除旧版本 yum remove docker* # docker必须安装的一些必备的工具 yum install -y yum-utils # 配置docker yum源地址 yum-config-manager \ --add-repo \ https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
docker分为两个版本,,一个是ce:社区版本 ,一个是ee :企业版
#安装最新版本docker ... docker-ce是社区版 ,docker-ce-cli:docker的客户端 #我们发的命令就是在客户端发的,客户端发送到 docker-daemon服务端,服务端再根据收到的命令调用docker内部接口。。。 containerd.io : Docker 使用的一个核心组件,它是一个容器运行时接口(CRI)的实现 yum install docker-ce docker-ce-cli containerd.io # 展示docker-ce的yum源 yum list docker-ce --showduplicates | sort -r # 安装指定版本的docker yum install docker-ce-3:19.03.14-3.el8.x86_64 ... 还有docker-ce-cli指定版本,, containerd.io ,, 我安装docker-ce-cli-xxx提示版本找不到 如果只指定docker-ce版本,,docker-ce-cli会用最新版本 # 查看版本 docker version
docker常用命令:
systemctl start docker # 开启启动 systemctl enable docker
docker配置阿里云镜像加速地址: 打开阿里云官网,搜索容器镜像服务,,将里面的脚本执行一遍,,这个脚本就会将阿里云镜像加速地址配置到/etc/docker/daemon.json
中,,这个文件是docker的核心配置文件
docker images docker image ls docker pull docker pull redis:latest # 删除镜像,, 如果镜像有容器存在,删除不掉。 -f强制删除, docker rmi redis:latest docker ps -a docker rmi --help docker rmi -f $(docker images -aq) # 移除游离镜像,, 比如说在将容器commit成一个镜像的时候,,重复commit,后面的会把前面的覆盖掉,而前面的变成了没有名字的游离镜像 docker image prune # image复制并且命名 docker tag 原镜像:标签 新镜像:标签
容器的状态:
# 创建容器 docker create 镜像名字 docker create [控制项] 镜像名 启动命令[启动参数] docker create -p 主机端口:容器端口 -P : 随机端口 #暂停容器 docker pause #恢复暂停 docker unpause # 优雅的停止 docker stop # 强制退出 docker kill # 一个容器可以映射多个 主机端口 docker run -p 6379:6379 -p 8888:6379 redis # 打印日志 docker logs # 日志follow docker logs -f # 绑定容器控制台 docker attach docker exec -i : 交互模式 interactive -t : tty 重新开启一个终端 -u : 以哪一种用户身份进去 # 以0号用户,0号组进去,,也就是root docker exec -it -u 0:0 mynginx /bin/bash # --privileged 最高权限进去 docker exec -it --privileged mynginx /bin/bash # 进去之后控制台输入id,, 查看uid:用户ID,gid :用户组ID,groups 用户所属的其他用户组。 # 查看状态 docker inspect docker inspect images # 拷贝内容 docker cp # 复制index.html 到 mynginx容器里面的 /usr/share/nginx/html 目录下: 如果这个不是目录,,不会自动创建目录,而是直接拷贝 docker cp index.html mynginx:/usr/share/nginx/html # 将容器总的文件复制到 虚拟机中 docker cp mynginx:/etc/nginx/nginx.conf nginx.conf # 比较容器和最开始镜像生成的容器有什么不同,, 检查容器的 增删改 docker diff D: delete. C : change. A:add # 修改了容器之后,可以将容器变成一个新的镜像 docker commit # -a :作者是谁 -m:提交的message 容器名字。 镜像名字:标签 docker commit -a waterkid -m "first" mynginx waterkid:v1 当容器发生变化之后,如果我们后来还要以新的容器为准,就需要提交一个镜像,,多次提交,会覆盖掉之前提交的镜像,,之前的镜像会变成游离镜像,,docker image prune 清除
将镜像放在docker hub 中:
需要在docker hub 上注册一个账号,镜像名就是仓库名,,,
docker hub中一个完整官方镜像的全路径是 docker.io/library/redis:alpine
我们的镜像是将中间的library变成自己的用户名docker.io/waterkid01/mynginx:v1
官方的镜像名字,,前面不需要带用户名,,而自己写的镜像,需要带自己的用户名,如果要上传到docker hub中的话,,
首先需要将镜像改成waterkid01/mynginx
docker tag waterkid:v1 waterkid01/mynginx:v1 # 登录docker hub docker login # 推送 docker push waterkid01/mynginx:v1
我的推送总是重试,,
docker导入导出,有两种方式:
第一种是将容器变成tar,, docker export,,,docker import
第二种是将镜像变成tar。。。 docker save,,, docker load
# 将 nginx01容器 ===》 nginx.tar -o :output docker export -o nginx.tar nginx01 # 将tar变成镜像 docker import nginx.tar mynginx:v6 这样生成的镜像,,直接启动容器是不行的,,缺少启动命令。。需要查看之前容器的启动命令 docker inspect nginx01
# 不截断输出,也可以看到启动命令 docker ps --no-trunc 运行import导入的镜像,,需要将原来容器的启动命令,,加在这个启动容器后面 docker run -P mynginx:v6 /docker-entrypoint.sh nginx -g 'daemon off;'
# 将镜像保存成tar ,,可以是多个镜像 docker save -o waterkid.tar waterkid:v1 # 将tar导出为镜像 docker load -i waterkid.tar
每一个镜像,一启动都会有镜像默认干的活,,,在cmd中
从0到1制作镜像
编写Dockerfile
from busybox CMD ping baidu.com
# 自己做一个镜像 ,打包成mybusy:v6镜像 -f:指定是那个Dockerfile ./ 这里面的所有操作都是在 ./ 这个路径下执行 docker build -t mybusy:v6 -f Dockerfile ./