什么是容器
依托于linux内核的虚拟化技术
什么是Docker
能够把应用程序自动部署到容器的开源引擎
Docker的基本组成
Docker Client客户端
Docker Daemon守护进程
Docker Image镜像
容器的基石
层叠的只读文件系统
联合加载
Docker Container容器
通过镜像启动
启动和执行阶段
写时复制
Docker Registry仓库
共有
Docker Hub
私有
Docker在线演示地址
Docker的C/S模式
Docker的守护进程
- 查看守护进程
ps -ef | grep docker
systemctl status docker
- 使用service命令管理
sudo service docker start/stop/restart
- Docker 的启动选项
docker -d [OPTIONS]
- 运行相关:
-D,–debug=false
-e,–exec-driver=‘native’
-g,–graph=’/var/lib/docker’
-icc=true
-l,–log-level=‘info’
–label=[]
-p,–pidfile=’/var/run/docker.pid - Docker服务器连接相关
-G,–group=‘docker’
-H,–host=[]
-tls=false
-tlsverify=false - Remote API相关
–api-enable-cors=false - 存储相关
-s,–storage-driver=’’
–selinux-enabled=false
–storage-opt=[] - Registry 相关
–insecure-registry=[]
–registry-mirror=[]
- 启动配置文件
/etc/default/docker/
Docker的远程访问
守护进程设置
修改配置文件 /etc/default/dcoker
DOCKER_OPTS=" --label name=docker_server_1 -H tcp://0.0.0.0:2375"
重启docker service docker resart
客户端配置
- 使用环境变量
export DOCKER_HOST='tcp://ip:端口'
(这里的ip是要连接的远程主机IP)
Dcoker的容器
容器的基本操作
- 启动容器
docker run IMAGE [COMMAND][ARG...]
run 在新容器中执行命令
eg :docker run centos echo 'hello world'
- 启动交互式容器
docker run -i -t IMAGE /bin/bash
要开启以下设置 为容器始终打开标准输入
-i --interactive=true|false 默认是false
为创建的容器分配一个tty终端
-t --tty=true|false 默认是false
- 查看容器
docker ps [-a] [-l]
- 查看容器的信息
docker inspect ID/NAMES
eg:docker inspect 71f344799cfc
- 自定义容器名字
docker run --name=自定义名字 -i -t IMAGE /bin/bash
- 重新启动已经停止的容器
docker start [-i] 容器名
- 删除容器
docker rm 容器名
Docker 守护式容器
什么是守护式容器?
- 能够长期运行
- 没有交互式会话
- 适合运行应用程序和服务
启动守护式容器
方法1
docker run --name=容器名 -i -t /bin/bash
使用Ctrl + p Q
退出,不使用exit
附加到运行中的容器:
docker attach 容器名
方法2
docker run -d 镜像名 [COMMAND] [ARG...]
查看容器日志
docker logs [-f] [-t] [--tail] 容器名
-f --follows=true 默认为false
-t --timestamps=true 默认为false
–tail=“all”
查看容器内进程
docker top 容器名
在运行中的容器中启动新进程
docker exec [-d] [-i] [-t] 容器名 [COMMAND] [ARG...]
停止守护式容器
docker stop 容器名
给运行中的容器发送一个停止信号,等待容器停止后,命令会返回容器的名字。docker kill 容器名
立刻杀死
可以使用man命令查看docker具体命令的详细介绍
例如:`man docker exec`
在Dokcer中部署静态网站
设置容器的端口映射
docker run [-P]
大写P 为容器暴露的所有端口进行映射。端口映射命令:
docker run -P -i -t centos /bin/bash
docker run [-p]
指定映射哪些端口- 容器端口 containerePort
docker run -p 80 -i -t centos /bin/bash
- 宿主机端口:容器端口 HostPort:containerPort
docker run -p 8080:80 -i -t centos /bin/bash
- IP::容器端口 IP:containerPort
docker run -p 0.0.0.0:80 -i -t centos /bin/bash
- IP:宿主机端口:容器端口 ip:HostPort:containerPort
docker run -p 0.0.0.0:8080:80 -i -t centos /bin/bash
- 容器端口 containerePort
Nginx 部署流程
- 创建映射80端口的交互式容器
docker run -p 80 --name web -i -t centos /bin/bash
- 安装Nginx
yum install nginx
- 安装文本编辑器Vim
yum install vim
- 创建静态页面
- 修改Nginx配置文件
- 运行Nginx
- 验证网站访问
Docker 镜像
容器的基石
层叠的只读文件系统
联合加载技术
列出镜像
docker images [OPTIONS] [REPOSITORY]
-a ,–all=false 显示所有镜像
-f ,–filter=[]
–no-trunc=false 不使用截断的方式显示数据
-q, --quiet=false 只显示镜像的唯一ID
- REPOSITORY 一系列镜像的集合
Registry 仓库 是docker镜像的存储服务 - TAG
镜像的标签。
创建容器时可以指定 镜像标签,不指定默认使用latest
查看镜像
docker inspect [OPTIONS] CONTAINER | IMAGE [CONTAINER | IMAGE]
既支持容器的查看,也支持镜像的查看。
删除镜像
docker rmi [OPTIONS] IMAGE [IMAGE] ...
-f, --force=false
–no-prune=false
查找镜像
- Docker Hub 官网
- https://registry.hub.docker.com
docker search [OPTIONS] TERM
- –automated=false
- –no-trunc=false
- -s,–stars=0 星级 最低几个星星
拉取镜像
docker pull [OPTIONS] NAME [:TAG]
-a, --all-tags=false
如果慢的话可以使用国内的docker仓库镜像服务器拉取
使用 --registry-mirror 选项
- 修改:/etc/default/docker
- 添加:DOCKER_OPTS="–registry-mirror=http://xxxx" xxx从daocloud获取
推送镜像
docker push [REPOSITORY NAME]
如何在本地构建镜像?
- 保存对容器的修改,并再次使用
- 自定义镜像的能力
- 以软件的形式打包并分发服务及其运行环境
docker commit
通过容器构建
docker commit [OPTINOS] CONTAINER [REPOSITORY[:TAG]]
-a,–author=""
-m,–message=""
-p,–pause=true
docker build
通过Dockerfile文件构建
创建第一个Dockerfile#First Dockerfile FROM ubuntu:14.04 MAINTAINER liunan "youremail@outlook.com" RUN apt-get update RUN apt-get install nginx EXPOSE 80
- 创建目录
mkdir -p dockerfile/df_test
- 编写 dockerfile文件
- 执行
docker build
命令
docker build [OPTIONS] PATH | URL | -
–force-rm=false
–no-cache=false
–pull=false
-q,–quiet=false
–rm=true
-t,–tag="" 指定构建的镜像的名字
- 使用刚才build 的镜像
docker run -d --name nginx_use_df -p 80 ln/df_test nginx -g "daemon off;"
- 创建目录
Dockerfile指令
注释 #
指令 命令大写
FROM
- 已经存在的镜像
- 基础镜像
- 必须是第一条非注释的指令
FROM <image>
FROM <image>:<tag>
MAINTAINER
指定镜像的作者信息,包含镜像的所有者和联系信息
MAINTAINER liunan "liunan@gmail.com"
RUN
指定当前镜像中运行的命令
- RUN (shell模式)
/bin/sh -c command
RUN echo hello
- RUN [“executable” ,“param1”,“param2”] (exec模式)
RUN ["/bin/bash" , "-c" ,"echo hello"]
EXPOSE
指定运行该镜像的容器使用的端口
EXPOSE <port> [<port> ...]
使用EXPOSE指定了端口,启动容器的时候 也要指定端口
docker run -p 80 -d youimages nginx -g "daemon off;"
CMD
指定在容器运行时执行的命令
ENTERYPOINT
指定在容器运行时执行的命令
ADD
设置镜像的目录文件
ADD包含类似tar的解压功能
COPY
设置镜像的目录文件
如果单纯的复制文件,Docker推荐使用COPY
VOLUME
设置镜像的目录文件
VOLUME["/data"]
WORKDIR
镜像在构建 及 运行时的环境设置
WORKDIR /path/to/workdir
ENV
镜像在构建 及 运行时的环境设置
ENV<key><value>
ENV<key>=<value>....
USER
镜像以什么样的用户运行
USER daemon
USER nginx (使用哪个用户启动docker)
USER user:group
USER user:gid
ONBUILD
镜像触发器
当一个镜像被其他镜像作为基础镜像时执行
会在构建过程中插入指令
Dockerfile的构建过程
Dockerfile的执行过程
- 从基础镜像运行一个容器
- 执行一条指令,对容器作出修改
- 执行类似 docker commit 的操作,提交一个新的镜像层
- 再基于刚提交的镜像运行一个新容器
- 执行 Dockerfile 中的下一条指令,直至所有指令执行完毕
构建镜像的中间层调试
以上步骤中,中间层容器会在执行完后删除,但中间层镜像不会被删除。
中间层镜像的优点:
- 使用中间层镜像进行调试
- 查找错误
Dockerfile 的镜像缓存
Dockerfile构建过程中可以 构建缓存
- 构建缓存
use cache
- 不使用缓存
$ docker build --no-cache
# 在 dockerfile 文件中 添加 ENV REFRESH_DATE 2015-04-01 # 利用环境变量标记 缓存刷新的时间 这句命令后面的语句不会使用缓存
查看镜像的构建过程
$ docker history [image]
Docker容器的网络基础
- Liunx 虚拟网桥特点
- 可以设置IP地址
- 相当于拥有一个隐藏的虚拟网卡
# 安装网桥管理工具
sudo yum install bridge-utils
sudo brctl show