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 docker使用

FROM docker使用:

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功能

docker使用

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实现跨主机容器连接

docker使用

GRE:通用路由协议封装

隧道技术( Tunneling)是一种通过使用互联网络的基础设施在网络之间传递
数据的方式。使用隧道传递的数据(或负载)可以是不同协议的数据帧或包。隧道协议将其它协议的数据 帧或包重新封装然后通过隧道发送。新的帧头提供路由信息,以便通过互联网传递被封装的负载数据。

操作

建立ovs网桥

添加gre连接

配置docker容器虚拟网桥

为虚拟网桥添加ovs接口

添加不同Docker容器网段路由

3.4使用weave实现跨主机容器连接

docker使用

操作

安装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模式

docker使用
docker使用
docker使用