service docker start //启动docker daemon
docker pull[OPTIONS] NAME[:TAG] //拉取镜像,:TAG(默认 :Latest)
docker images[OPTIONS][REPOSITORY[:TAG]] //查看本地镜像
docker image ls //查看本地所有镜像
docker images node[REPOSITORY] //查看指定image
docker tag [IMAGE ID] [NEW NAME]:latest //重命名镜像名
docker run [OPTIONS]IMAGE[:TAG][COMMAND][ARG……] //启动镜像
docker run -d -P training/webapp python app.py //启动容器,-d运行这个容器在后台
docker run -d -P --name [$NAMES] training/webapp python app.py //自定义名称的启动容器
docker run ubuntu:15.10 /bin/echo "Hello world" //启动容器
docker inspect [NAMES] //检查容器,输出容器相关所有信息
docker inspect cube
docker exec [OPTIONS] CONTANIER COMMAND [ARG……] //进入容器
docker exec -it f4 bash
exit //退出容器
docker ps //查找正在运行的容器
docker ps -a //列出运行中和未运行的容器
docker port bf08b7f2cd89[CONTAINER ID] //查看容器映射端口号
docker port zealous_agnesi[NAMES] //查看容器映射端口号 0.0.0.0:32771->5000/tcp
docker stop $NAMES //停止指定容器
docker stop $CONTAINER_ID //停止指定容器
docker start $NAMES //启动指定容器
docker start $CONTAINER_ID //启动指定容器
docker restart $CONTAINER_ID //重启指定容器
docker rm `docker ps -a -q` //删除docker ps -a 查看出来的容器
docker rm $CONTAINER_ID //删除指定容器
netstat -na|grep 8080 //查看8080端口占用情况
命令 | 用途 |
---|---|
docker pull | 获取image |
docker build | 创建image |
docker images | 列出image |
docker run | 运行container |
docker ps | 列出container |
docker rm | 删除container |
docker rmi | 删除image |
docker cp | 在host和container之间拷贝文件 |
docker commit | 保存改动为新的image |
docker
:2013年横空出现。
以Docker为代表的内核容器技术不是新技术,而是将已有技术(LXC,cgroups,Union FS)进行了更好的包装和整合,并形成了一种标准镜像格式。
开源项目,它可以将任何应用以轻量级的形式打包、发布、运行
可以粗糙的理解为轻量级的虚拟机。开挂的chroot。
Docker与传统虚拟化方式不同在于,只在操作系统层实现虚拟化,只虚拟操作系统而不虚拟内核。
Docker是什么呢,白话点说,就是一个Container的管理工具。
计算机基本单元由虚拟机变为了容器,越来越多应用的构建、部署与运行选择在容器中进行。
特性 | 容器 | 虚拟机 |
---|---|---|
启动 | 秒级 | 分钟级 |
硬盘使用 | MB-GB | GB |
性能 | 接近原生 | 小于原生 |
系统支持量 | 单机支持上千个容器 | 一般几十个 |
- 集装箱
- 标准化(1.运输方式 2.存储方式 3.api接口)
- 隔离(LXC**)
- 本地运行没问题,测试环境或者生产环境有问题。docker的集装箱**解决了运行环境不一致的问题。
- 系统卡,磁盘占满。linux系统本身就是多租户的。docker的隔离**可以解决该问题,保证自己的app不被其他应用影响。
- 服务器撑不住。扩容可以解决这种问题。
en | 中文 | 作用 |
---|---|---|
host | 宿主机 | 正在使用的电脑 |
image | 镜像 | 本地建的或者远端拉去的重复使用的软件打包 |
container | 容器 | 镜像运行实际 |
registry | 仓库 | 存储很多镜像的仓库 |
daemoon | 守护程序 | 用来接收用户命令,和registry共享 |
client | 客户端 | 给daemon输送命令 |
镜像的本质就是文件
通过docker images指令来查看本地有哪些镜像
- 镜像ID: 每个镜像有一个唯一的ID;长度为64个字符。通常只使用前12个字符
- 镜像Tag:每个镜像上可以打上一个或多个TAG
- 镜像Repository:每个镜像存储在一个仓库中
- Respository:TAG 唯一标识了一个镜像
FROM alpine:latest 4e38e38c8ce0
MAINTAINER xbf fb1aabf4427b
CMD echo 'hello docker' 3df065bgdff6
镜像分层的好处是当多个dockerfile中有5个镜像分层相同时变可以减少压力
- DockerFile
- docker build
- 在docker hub上注册id
- create responsitory,例如
xiaoming/home
[root@test web]# docker tag home webcaojing/home
[root@test web]# docker push webcaojing/home:latest
The push refers to repository [docker.io/webcaojing/home]
900bef911c31: Pushed
86df2a1b653b: Mounted from library/nginx
bc5b41ec0cfa: Mounted from library/nginx
237472299760: Mounted from library/nginx
latest: digest: sha256:24ccb174ae28332c9aeb799e1ee27b6caa891dab46f716f62b286b6b631a1831 size: 1158
容器的本质是进程
如何把本地镜像传输到目的地,这时候就需要docker仓库。
步骤一:本地----->docker仓库。
步骤二:docker仓库---->拉取到目的地
docker仓库:
- hub.docker.com
- c.163.com
docker支持自己在内网内建立一个私有仓库
docker 0
:Linux虚拟网桥。
虚拟网桥的特点:
- 可以设置ip地址
- 相当于一个隐藏的虚拟网卡
- Bridge:独立的ip 端口和namespace
- Host 与主机共用,不会独立分配。启用该模式该容器不会拥有独立的networknamespace,而是和主机使用一个,容器将不会再虚拟出自己的网卡,配置自己的ip和端口
- None
容器内的端口要在主机内访问到
docker run -d -p 8080:80 nginx //启动nginx 分配8080端口号
docker run -d -P nginx //启动nginx 随意分配一个端口号
用来制作自己的镜像
类似配置文件,通过dockerfile可以构建一个image
命令 | 用途 |
---|---|
FROM | base image |
RUN | 执行命令 |
ADD | 添加文件 |
COPY | 拷贝文件 |
CMD | 执行命令 |
EXPOSE | 暴露端口 |
WORKDIR | 指定路径 |
MAINTAINER | 维护者 |
ENV | 设定环境变量 |
ENTRYPOINT | 容器入口 |
USER | 指定用户 |
VOLUME | mount point |
提供独立于容器之外的持久化存储
镜像仓库
多容器app
https://segmentfault.com/a/1190000008557309
http://www.runoob.com/docker/docker-tutorial.html