docker使用
Docker
1.docker容器的基本操作
1.1基本命令
查看镜像:
docker images [OPTIONS] [REPOSITORY]
-a,–all = false 显示所有镜像
-f,–filter = [] 显示时的过滤条件
–no-trunc = false 不使用截断的方式显示镜像ID
-q,–quiet = false 只显示镜像ID
在Docker Hub中搜索镜像:
docker search [OPTIONS] 镜像名
–automated = false 只显示自动构建的镜像
–no-trunc = false 不以截断的方式输出
-s,–stars = 0 用来限制显示星级的最低要求
****
拉取镜像:
docker pull [OPTIONS] NAME [:TAG]
-a,–all-tags = false 下载与镜像仓库中名字相同的所有镜像
推送镜像:
docker push NAME [:TAG]
删除Docker镜像,加参数-f表示强制 删除:
docker rmi [OPTIONS] IMAGE [IMAGE…]**
-f,–force 强制删除
–no-prune = false 不要删除未标记的父级
启动Docker镜像:
docker run [OPTIONS] IMAGE
列表所有运行中的Docker容器:
docker ps [-a] [-l]
参数:
-a:列出所有容器
-l:列出最新创建的容器
查看容器|镜像配置信息
docker inspect [OPTIONS] CONTAINER|IMAGE [CONTAINER|IMAGE]
-f,format = ‘’ 显示格式
查看Docker版本信息:
docker version
查看Docker系统信息:
docker info
杀死ID对应容器:
docker kill IMAGEID
启动、停止、重启指定容器:
docker start / stop / restart IMAGEID
构建Docker镜像:
docker commit 通过容器构建
docker commit [OPTIONS] CONTAINER [REPOSITORY[:TAG]]
-a,–author = ‘’ 指定镜像作者
-m,–message = ‘’ 记录镜像构建信息
-p,–pause = true 指定commit命令不停止正在执行的container
docker build 通过Dockerfile文件构建
docker build [OPTIONS] PATH | URL | -
–force-rm = false
–no-cache = false
–pull = false
-q,–quiet = false
–rm = true
-t,–tag = ‘’ 指定构建出镜像的名字
为镜像打标签:
docker tag
启动容器:
docker run IMAGE [COMMAND] [ARG…]
run 在新容器中执行命令
启动交互式容器
docker run -i -t IMAGE /bin/bash
-i --interactive = true | false 默认false
-t --tty = true | false 默认false
自定义容器名:
docker run --name=自定义名 -i -t IMAGE /bin/bash
启动守护式容器:
1.docker run -d 镜像名 [COMMAND] [ARG…]
2.交互式进入容器使用Ctrl+p+q退出
停止守护式容器:
1.docker stop 容器名
2.docker kill 容器名
运行容器
docker run [OPTIONS] IMAGE [COMMAND] [ARG…]
-d, --detach=false 指定容器运行于前台还是后台,默认为false
-i, --interactive=false 打开STDIN,用于控制台交互
-t, --tty=false 分配tty设备,该可以支持终端登录,默认为false
-u, --user="" 指定容器的用户
-a, --attach=[] 登录容器(必须是以docker run -d启动的容器)
-w, --workdir="" 指定容器的工作目录
-c, --cpu-shares=0 设置容器CPU权重,在CPU共享场景使用
-e, --env=[] 指定环境变量,容器中可以使用该环境变量
-m, --memory="" 指定容器的内存上限
-P, --publish-all=false 指定容器暴露的端口
-p, --publish=[] 指定容器暴露的端口
-h, --hostname="" 指定容器的主机名
-v, --volume=[] 给容器挂载存储卷,挂载到容器的某个目录
–volumes-from=[] 给容器挂载其他容器上的卷,挂载到容器的某个目录
–cap-add=[] 添加权限,权限清单详见:http://linux.die.net/man/7/capabilities
–cap-drop=[] 删除权限,权限清单详见:http://linux.die.net/man/7/capabilities
–cidfile="" 运行容器后,在指定文件中写入容器PID值,一种典型的监控系统用法
–cpuset="" 设置容器可以使用哪些CPU,此参数可以用来容器独占CPU
–device=[] 添加主机设备给容器,相当于设备直通
–dns=[] 指定容器的dns服务器
–dns-search=[] 指定容器的dns搜索域名,写入到容器的/etc/resolv.conf文件
–entrypoint="" 覆盖image的入口点
–env-file=[] 指定环境变量文件,文件格式为每行一个环境变量
–expose=[] 指定容器暴露的端口,即修改镜像的暴露端口
–link=[] 指定容器间的关联,使用其他容器的IP、env等信息
–lxc-conf=[] 指定容器的配置文件,只有在指定–exec-driver=lxc时使用
–name="" 指定容器名字,后续可以通过名字进行容器管理,links特性需要使用名字
–net=“bridge” 容器网络设置:
bridge 使用docker daemon指定的网桥
host //容器使用主机的网络
container:NAME_or_ID >//使用其他容器的网路,共享IP和PORT等网络资源
none 容器使用自己的网络(类似–net=bridge),但是不进行配置
–privileged=false 指定容器是否为特权容器,特权容器拥有所有的capabilities
–restart=“no” 指定容器停止后的重启策略:
no:容器退出时不重启
on-failure:容器故障退出(返回值非零)时重启
always:容器退出时总是重启
–rm=false 指定容器停止后自动删除容器(不支持以docker run -d启动的容器)
–sig-proxy=true 设置由代理接受并处理信号,但是SIGCHLD、SIGSTOP和SIGKILL不能被代理
查看容器日志:
docker logs [-f] [-t] [–tail] 容器名
-f --follows = true | false 默认false 一直跟踪日志的变化并返回结果
-t --timestamps = true | false 默认为false 在返回结果上加上时间戳
–tail = ‘all’ 返回结尾处多少数量的结果
查看容器内进程:
docker top 容器名
在运行中的容器内启动新进程:
docker exec [-d] [-i] [-t] 容器名 [COMMAND] [ARG…]
设置容器的端口映射
-p,–publish = []
containerPort
docker run -p 80 -i -t 镜像名
hostPort::containerPort
docker run -p 8080:80 -i -t 镜像名
ip::containerPort
docker run -p 0.0.0.0:80 -i -t 镜像名
ip:hostPort:containerPort
docker run -p 0.0.0.0:8080:80 -i -t 镜像名
1.2docke指令的参数选项
Options:
–config string 客户端配置文件的位置(默认值“/root/.docker”)
-D, --debug 启用调试模式
–help 打印使用
-H, --host list 要连接到的守护进程套接字(默认值[])
-l, --log-level string 设置日志级别(“debug”,“info”,“warn”,“error”,“fatal”)(默认“info”)
–tls 使用tls,隐含由–tlsverify
–tlscacert string 仅由此CA签署的信任证书(默认值为“/root/.docker/CA.pem”)
–tlscert string TLS证书文件的路径(默认为“/root/.docker/cert.pem”)
–tlskey string TLS**文件的路径(默认为“/root/.docker/key.pem”)
–tlsverify 使用TLS并验证远程
-v, --version 打印版本信息并退出
Management Commands:
container 管理容器
image 管理镜像
network 管理网络
node 管理群节点
plugin 管理插件
secret 管理Docker机密
service 管理服务
stack 管理Docker堆栈
swarm 管理集群
system 管理Docker
volume 管理卷
Commands:
attach 连接到正在运行的容器
build 从Dockerfile构建一个镜像
commit 根据容器的更改创建新镜像
cp 在容器和本地文件系统之间复制文件/文件夹
create 创建一个新容器
diff 检查容器文件系统上的更改
events 从服务器获取实时事件
exec 在正在运行的容器中运行命令
export 将容器的文件系统导出为tar存档
history 显示镜像的历史
images 镜像列表
import 从tarball导入内容以创建文件系统镜像
info 显示整个系统的信息
inspect 返回Docker对象的低级信息
kill 杀死一个或多个正在运行的容器
load 从tar存档或STDIN加载图像
login 登录到Docker注册表
logout 从Docker注册表注销
logs 获取容器的日志
pause 暂停一个或多个容器中的所有进程
port 列出端口映射或容器的特定映射
ps 列表容器
pull 从注册表中拉取镜像或存储库
push 将镜像或存储库推入注册表
rename 重命名一个容器
restart 重新启动一个或多个容器
rm 移除一个或多个容器
rmi 删除一个或多个镜像
run 在新容器中运行命令
save 将一个或多个图像保存到tar存档(默认情况下流到STDOUT)
search 在Docker Hub中搜索镜像
start 启动一个或多个停止的容器
stats 显示容器资源使用统计信息的实时流
stop 停止一个或多个正在运行的容器
tag 创建一个引用SOURCE_IMAGE的TARGET_IMAGE标记
top 显示容器的运行进程
unpause 在一个或多个容器中暂停所有进程
update 更新一个或多个容器的配置
version 显示Docker版本信息
wait 阻塞,直到一个或多个容器停止,然后打印它们的退出代码
1.3获取镜像加速
使用 --registry-mirror 选项
1.修改: /etc/default/docker
2.添加: DOCKER_OPTS = "–registry-mirror=加速网址"
您可以通过修改daemon配置文件/etc/docker/daemon.json来使用加速器
{
"registry-mirrors": [“https://3ofztb0k.mirror.aliyuncs.com”]
}
1.4docker的远程访问
修改服务器端配置
修改Docker守护进程启动选项
-H tcp://host:port
unix:///path/to/socket
fd:// or fd://socketfd*
守护进程默认配置:
-H unix:///var/run/docker.sock
修改客户端配置
修改Docker守护进程启动选项
-H tcp://host:port
unix:///path/to/socket
fd:// or fd://socketfd*
守护进程默认配置:
-H unix:///var/run/docker.sock
2.Dockerfile
2.1指令格式
#Comment
INSTRUCTION argument**
2.2指令使用
FROM
条件:
已经存在的镜像
基础镜像
必须是第一条非注释指令
FROM
FROM :
MAINTAINER
作用:
指定镜像作者的信息,包含镜像的所有者和联系信息
MAINTAINER
RUN
作用:
指定当前镜像中运行的命令
RUN (shell模式)
/bin/sh -c command
RUN echo hello
RUN [“executable”,“param1”,“param2”] (exec模式)
RUN ["/bin/bash","-c",“echo hello”]
EXPOSE […]
作用:
指定该镜像的容器使用的端口
CMD
作用:
容器开始运行时使用的命令
CMD [“executable”,“param1”,“param2”] (exec模式)
CMD command param1 param2 (shell模式)
ENTRYPOINT
作用:
容器开始运行时使用的命令
ENTRYPOINT [“executable”,“param1”,“param2”] (exec模式)
ENTRYPOINT command param1 param2 (shell模式)
可以使用docker run --entrypoint 覆盖
ADD
作用:
将文件或目录复制到镜像中
ADD …
ADD [""…""] (适用于文件路劲中有空格的情况)
src 构建镜像目录的相对路径
dest 镜像内的绝对路径
COPY
作用:
将文件或目录复制到镜像中
COPY …
COPY [""…""] (适用于文件路劲中有空格的情况)
src 构建镜像目录的相对路径
dest 镜像内的绝对路径
ADD vs. COPY
ADD包含类似tar的解压功能
如果单纯复制文件,Docker推荐使用COPY
VOLUME
作用:
提供共享数据或数据持久化的功能
VOLUME ["/data"]
WORKDIR
作用:
指定容器的工作目录
WORKDIR /path/to/workdir
ENV
作用:
设置环境变量
ENV
ENV =
USER
作用:
指定镜像会用什么用户去运行
USER daemon
ONBUILD
作用:
镜像触发器
当一个镜像被其他镜像作为基础镜像时执行
会在构建过程中插入指令
ONBUILD [INSTRUCTION]
2.3Dockerfile构建过程
从基础镜像运行一个容器
执行一条指令,对容器做出修改
执行类似docker commit的操作,提交一个新的镜像层
再基于刚提交的镜像运行一个容器
执行Dockerfile中的下一条指令,直至所有指令执行完毕
使用中间层镜像进行调试
查找错误
构建缓存
不构建缓存
docker build --no-cache
在Dockerfile中使用ENV REFRESH_DATE 2015-04-01,更改日期就会刷新
查看镜像构建的过程
docker history [image]
3.Docker网络
3.1docker0
Linux虚拟网桥
可以设置IP地址
相当于拥有一个隐藏的虚拟网卡
docker0的地址划分:
IP:172.17.42.1 子网掩码:255.255.0.0
MAC: 02:42:ac:11:00:00 到 02:42:ac:11:ff:ff
总共提供了65534个地址
自定义docker0
修改docker0地址:
sudo ifconfig docker0 192.168.200.1 netmask 255.255.255.0
自定义虚拟网桥
添加虚拟网桥
sudo brctl addbr br0
sudo ifconfig br0 192.168.100.1 netmask 255.255.255.0
更改docker守护进程的启动配置:
/etc/default/docker 中添加DOCKER_OPS值
-b=br0
允许所有容器间互联
–link:
docker run --link = [CONTAINER_NAME]:[ALIAS] [IMAGE] [COMMAND]
拒绝所有容器间互联
Docker守护进程的启动选项
–icc = false
允许特定容器间的连接
Docker守护进程的启动选项
–icc = false --iptables = true
–link
容器和外部网络的连接
–ip-forward = true 系统是否转发流量
查看系统变量是否开启
sysctl net.ipv4.conf.all.forwarding
iptables
iptables是与Linux内核集成的包过滤防火墙系统,几乎所有的linux发行版本都会包含iptables功能
3.2使用网桥实现跨主机容器连接
Docker设置
修改/etc/default/docker
-b指定使用自定义网桥
-b = br0
–fixed-cidr限制ip地址分配范围
IP地址划分(示例):
Host1:10.211.55.64/26
地址范围: 10.211.55.65~10.211.55.126
Host1:192.168.59.128/26
地址范围: 10.211.55.129~10.211.55.190
优点:
配置简单,不依赖第三方软件
缺点:
与主机在同网段,需要小心划分IP地址
需要有网段控制权,在生产环境中不易实现
不容易管理
3.3使用Open vSwitch实现跨主机容器连接
GRE:通用路由协议封装
隧道技术( Tunneling)是一种通过使用互联网络的基础设施在网络之间传递
数据的方式。使用隧道传递的数据(或负载)可以是不同协议的数据帧或包。隧道协议将其它协议的数据 帧或包重新封装然后通过隧道发送。新的帧头提供路由信息,以便通过互联网传递被封装的负载数据。
操作
建立ovs网桥
添加gre连接
配置docker容器虚拟网桥
为虚拟网桥添加ovs接口
添加不同Docker容器网段路由
3.4使用weave实现跨主机容器连接
操作
安装weave
启动weave
weave launch
连接不同主机
通过weave启动容器
4.数据卷
特点:
数据卷在容器启动时初始化,如果容器使用的镜像在挂载点包含了数据,这些数据会拷贝到新初始化的数据卷
数据卷可以在容器之间共享和重用
可以对数据卷里的内容直接进行修改
数据卷的变化不会影响镜像的更新
卷会一直存在,即使挂载数据卷的容器已经被删除
为容器添加数据卷
docker run -v 宿主机目录:容器目录[:ro|rw] -it IMAGE
ro 只读权限,默认权限可读可写
Dockerfile构建包含数据卷的镜像
Dockerfile指令:
VOLUME[’/data’]
数据卷容器
挂载数据卷容器的方法
docker run --volumes-from [CONTAINER NAME]
数据卷备份
docker run --volumes-from [container name] -v 宿主机目录:镜像目录 镜像
tar cvf 镜像目录保存路径 [container data volume]
数据还原
docker run --volumes-from [container name] -v 宿主机目录:镜像目录 镜像
tar xvf 镜像目录待解压路径 [container data volume]
5.docker的C/S模式