初识docker
Docker
什么是Docker
- 是一个用来装应用的容器,就像被子可以放水,笔筒可以放笔一样
- Docker 公司开发,开源,托管在github
历史
- 2010 dotCloud PAAS
- 2013 docker 开源
- 2014.6 Docker 1.0
- 2014.7 C轮融资 $4000万
- 2015.4 D轮 $9500万
理解Docker
Docker思想
- 集装箱
标准化
- 运输方式
- 存储方式
- API接口
- 隔离:lxc隔离了进程和资源
解决了什么问题
我本地运行没问题啊!
- 操作系统命令不一致,jdk版本不一致,tomcat版本不一致
系统好卡,哪个哥们又写死循环了?!
- 不会把别人程序占满,每个人平均了对应的cpu
双 11来了,服务器撑不住了
- 标准方式运行
核心技术
定义
镜像仓库容器(Build Ship Run)
去仓库把镜像拉到本地,使用命令运行在容器
Docker镜像
镜像存储格式:
联合文件系统(分层实现镜像存储)
- 最底层操作系统引导
- 操作系统
- 容器
- 应用代码
Docker容器
底层都是只读的,只有最上层的是可读可写的
Docker仓库
- hub.docker.com
- c.163.com
实践:
docker pull [OPTIONS] NAME:[:TAG]
docker pull hello-world
Docker images [options][REPOSITORY[:TAG]]
- 查看本机所有镜像
运行
docker run[OPTIONS] IMAGE:[:TAG][COMMAND][ARG...]
docker run hello-world
docker pull
- docker 从 docker daemon 拉取镜像
- docker daemon 从本机检查是否有镜像,没有则从远端docker 仓库 拉取对应镜像
docker run
- 把本地命令发送到docker daemon 先检测本地是否存在 如果不存在,先pull 然后在运行变成docker 容器
docker ps
- 查看当前运行的容器
- docker exec
Docker 运行 Nginx
-d, --detach Run container in background and print container ID
docker run -d nginx:latest
docker exec --help
docker exec -it 84 bash
docker stop -f [id]
docker 网络
网络类型
- Bridge
- Host
- None
- 端口映射
docker run --help
docker run -d -p 8080:80 nginx:latext
制作自己的镜像
- Dockerfile
docker build
- 执行dockerfile的事情
- Jpress:http://jpress.io/
dockerfile
from 镜像名
MAINTAINER [所有者名称] [所有者联系方式]
COPY [本地文件] [镜像地址]
运行
docker build .
.代表本地目录
docker build -t [镜像起名字]
加速
vim /etc/docker/daemon.json
{"registry-mirrors":["https://fy707np5.mirror.aliyuncs.com"]}
systemctl daemon-reload
systemctl restart docker
基础命令
docker build -t friendlyname .# 使用此目录的 Dockerfile 创建镜像 docker run -p 4000:80 friendlyname # 运行端口 4000 到 90 的“友好名称”映射 docker run -d -p 4000:80 friendlyname # 内容相同,但在分离模式下 docker ps # 查看所有正在运行的容器的列表 docker stop <hash> # 平稳地停止指定的容器 docker ps -a # 查看所有容器的列表,甚至包含未运行的容器 docker kill <hash> # 强制关闭指定的容器 docker rm <hash> # 从此机器中删除指定的容器 docker rm $(docker ps -a -q) # 从此机器中删除所有容器 docker images -a # 显示此机器上的所有镜像 docker rmi <imagename> # 从此机器中删除指定的镜像 docker rmi $(docker images -q) # 从此机器中删除所有镜像 docker login # 使用您的 Docker 凭证登录此 CLI 会话 docker tag <image> username/repository:tag # 标记 <image> 以上传到镜像库 docker push username/repository:tag # 将已标记的镜像上传到镜像库 docker run username/repository:tag # 运行镜像库中的镜像