初识Docker

初识Docker

https://www.docker.com

什么是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容器

底层都是只读的,只有最上层的是可读可写的

Docker仓库

实践:

  • 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

  1. docker pull
    1. docker 从 docker daemon 拉取镜像
    2. docker daemon 从本机检查是否有镜像,没有则从远端docker 仓库 拉取对应镜像
  2. docker run
    1. 把本地命令发送到docker daemon 先检测本地是否存在 如果不存在,先pull 然后在运行变成docker 容器
  3. docker ps
    1. 查看当前运行的容器
  4. 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 网络

初识Docker

  • 网络类型
    • Bridge
    • Host
    • None
  • 端口映射

docker run --help

初识Docker

docker run -d -p 8080:80 nginx:latext

制作自己的镜像

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                   # 运行镜像库中的镜像