docker是一个装应用的容器(类似于虚拟机高于虚拟机)
软件容器化
解决了:
- 运行环境不一致的问题
- 每个容器独立不影响(LXC容器虚拟化-linux下)
- 增加容器简便
- 不用记录存储位置
- 启动速度慢
时势造英雄:
统一云计算/敏捷开发(PaaS平台即服务,平台提供了存储,数据库,网络,负载均衡,自动扩展的功能)
将软件或web应用build构建出镜像 ship运输 run运行中的镜像叫容器
宿主机host:
镜像image:(集装箱)存储格式:联合文件系统,分层,只有最顶层是可写的
容器container:一个进程,想象为虚拟机(OOP思想:镜像是类,容器是对象,只有在镜像run后才能叫容器)
仓库registry:国外仓库太慢,国内网易蜂巢c.163.com Registry是注册的意思
守护程序daemon:
download
mac下载官网下载 dmg文件
linux下安装
sudo wget -qO- https://get.docker.com |sh
把用户放docker组 sudo usermod -aG docker zhaojianyu
问题解决 :https://blog.csdn.net/zxzxzxzx2121/article/details/61914870
http://www.runoob.com/docker/docker-hello-world.html
Registry操作
国内仓库:daocloud/时速云/aliyun
镜像redis的检索
docker search redis
镜像的下载(从仓库)
docker pull [options] name[:tag]
实例:docker pull redis
构建自己的镜像之后提交到远程仓库hub.docker.com
docker login
docker push 镜像名
image镜像操作
查看本地镜像列表
docker images
删除镜像
docker rmi 镜像id
删除所有镜像
docker rmi ${docker images -q}
容器操作
运行容器
docker run -p 8080:80 --name 容器名 -d 镜像名 // 【返回唯一id标识】 -d后台运行
docker run -d -p 8080:80 hub.c.163.com/library/nginx
在运行的容器上拷贝文件(host宿主上与container容器之间)
docker cp index.html 容器id://usr/share/nginx/html
保存修改的镜像(产生新的镜像)
docker commit -m '提交注释' 容器id nginx-name
查看正在运行的容器/查看运行的和停止的容器
docker ps
-a :显示所有的容器,包括未运行的。
-q :静默模式,只显示容器编号。
-n 5 :列出最近创建的5个容器。
启动容器///停止容器
docker stop 容器名/或容器id
docker start 容器名/或容器id
重启容器
docker restart
在容器里运行命令
docker exec -it 容器id或容器名 /bin/bash
docker file创建镜像(常用,自创镜像)
第一个docker file(from 基础镜像 MAINTAINER 告诉其他人作者 CMD 执行命令)
文件名:Dockerfile /约定成俗/
alpine 专门为docker做的极小的linux环境
FROM alpine:latest
MAINTAINER zhaojianyu
CMD echo 'hello lcy'
构建 -t标签 .(这里有个点)路径名
docker build -t hello_docker .
执行过程
Dockerfile常用:
FROM 基础镜像
RUN 执行命令
ADD 添加文件
COPY 拷贝文件
CMD 执行命令
EXPOSE 暴露端口
USER
1 格式
USER <user>[:<group>] or
USER <UID>[:<GID>]
2 作用
指定运行时的用户名或UID,后续的RUN也会使用指定的用户。
当服务不需要管理权限时,可以通过该命令指定运行用户。并且可以在之前创建所需要的用户
3 说明
要临时获取管理权限可以使用gosu,而不推荐sudo。
WORKDIR
1 格式
WORKDIR /path/to/workdir
2 作用
为后续的RUN、CMD、ENTRYPOINT指令配置工作目录。
可以使用多个WORKDIR指令,后续命令如果参数时相对路径,则会基于之前命令指定的路径。例如
WORKDIR /a
WORKDIR b
WORKDIR c
RUN pwd
则最终路径为/a/b/c
docker网络类型
1bridge(默认的模式)独立的network namespace
2host -p -P开放所有端口并随机
3none