Docker基础
1.Docker介绍
Docker
的英文翻译是“搬运工”的意思,他搬运的东西就是我们常说的集装箱 Container,Container 里面装的是任意类型的 App,我们的开发人员可以通过 Docker 将App 变成一种标准化的、可移植的、自管理的组件,我们可以在任何主流的操作系统中开发、调试和运行。
Docker Engine
是一个 C/S架构的应用程序,主要包含下面几个组件:
- 常驻后台进程 Dockerd
- 一个用来和 Dockerd 交互的 REST API Server
- 命令行 CLI 接口,通过和 REST API 进行交互(我们经常使用的 docker 命令)
2.安装Docker
去官方有详细安装办法
3.基础命令
4.Dockerfile 定制镜像
5.Docker 私有仓库
首先DockerHub的使用
官网 https://hub.docker.com/ 注册账号
命令行登录 :docker login 输入UserName、PassWord 显示Login Succeeded 登录成功
搜索镜像命令:docker search centos 搜索centos镜像
将本地镜像推送到dockerHub上面
- 推送前镜像名字必须是 userName/nginx:v3 修改镜像名称命令:docker tag 原镜像名称:tag 目标镜像名称:tag 例如 docker tag nginx:v3 anker/test-nginx:v3
- 推送上去 docker push anker/test-nginx:v3
- 速度太慢 使用镜像加速器 地址 http://docker-cn.com/ 也可以配置阿里云加速器 配置完下载镜像就比较快了 记得重新启动
创建本地仓库只供自己使用(官方 Docker Registry)
- docker run --name myregistry -d -p 5000:5000 registry:2.6.2 本地没有就会去网上拉 运行起来私有仓库就创建好了
- 将nginx:v3 push到私有仓库
- 修改tag名字 :docker tag nginx:v3 127.0.0.1:5000/nginx:v3
- push到私有仓库:docker push 127.0.0.1:5000/nginx:v3
- 本地地址 可以查看私有仓库 镜像情况 127.0.0.1:5000:v2/_catalog 显示{"repositories":["nginx"]} 上传成功
- 删除本地 镜像:docker rmi -f 127.0.0.1:5000/nginx:v3 -f强制删除
- 拉去私有仓库镜像:docker pull 127.0.0.1:5000/nginx:v3
- push到仓库里面的路径会默认放到 /var/lib/registry
- 使用数据挂在-v参数 docker run --name myregistry -d -p 5000:5000 -v /Users/ych/devs/mynginx:/var/lib/registry registry:2.6.2 如果不挂在 registry仓库移除了 仓库里面东西都被删掉了
Docker
容器被删除后默认会将容器里面的所有文件都给删除掉的,但是有的时候我们有数据共享或者持久化的需求,比如数据库,希望下一次启动容器的时候数据依然保留,这就需要用到Docker
中的数据卷功能了,另外一个就是挂载宿主机目录到容器中去,这个无论是在开发阶段还是生产环境都非常有用的一个功能。
docker run -d -p 3306:3306 -e MYSQL_ALLOW_EMPTY_PASSWORD=true mysql:5.7
docker volume ls 查看数据卷 docker inspect mysql01 查看信息 docker volume inspext VOLUME NAME
进入容器里面 docker exec -it mysql01 /bin/bash 里面 创建一个docker库 退出来 exit docker rm -f mysql01
第三个是mysql默认的数据卷 里面有刚创建的docker库 就是 使用-v 参数
docker run -d --name mysql 100 -v mysql:/val/lib/mysql -e MYSQL_ALLOW_EMPTY_PASSWORD=true mysql:5.7
删除全部的数据卷 docker volume prune
7. Docker网络模式
link模式
bridge模式
docker network create -d bridge deme 创建一个bridge模式的demo
docker network ls 查看
docker network inspect demo
用bridge创建两个容器
docker run --name test 1--network demo mysql
docker run --name test2 --network demo mysql
docker exec -it test1 bash
ping test1 可以通
建议使用compose