docker

常用指令

创建容器:docker run -i -t -d -p 32181:32181 - -name zookeeper zookeeper /bin/bash

退出容器:exit,会停止容器运行

启动容器:docker start

重启容器:docker restart

停止容器:docker stop

进入后台运行容器:docker attach 退出容器停止

进入后台运行容器:docker exec -it 243c32535da7 /bin/bash 退出容器不停止 停止

导出容器:docker export > **.tar

导入容器快照: docker import

删除容器:docker rm -f 1e560fca3906

查看镜像:docker images

Docker 仓库管理

登录和退出:docker login

退出:docker logout

搜索镜像:docker search

下载镜像:docker pull

删除镜像:docker rmi

查询所有容器:docker ps -a

查看容器日志:docker logs

镜像生成

FROM:基础镜像 RUN:为启动的容器指定默认要运行的程序 命令行命令 shell,exec格式,每执行一次构建一层,docker build时运行 CMD:为启动的容器指定默认要运行的程序 docker run时运行

docker build -t nginx:test .

COPY:从上下文目录复制文件或目录到容器指定路径 COPY [–chown=:] <源路径1>... <目标路径> 例:COPY hom?.txt /mydir/

ENV:设置环境变量 例 ENV NODE_VERSION 7.2.0

ARG:ARG 设置的环境变量仅对 Dockerfile 内有效,也就是说只有 docker build 的过程中有效 例 ARG <参数名>[=<默认值>]

VOLUME:定义匿名数据卷。在启动容器时忘记挂载数据卷,会自动挂载到匿名卷 例 VOLUME [“<路径1>", "<路径2>"...]

EXPOSE:声明端口 例 EXPOSE <端口1> [<端口2>...]

WORKDIR:指定工作目录 例 WORKDIR <工作目录路径>

USER: 指定执行后续命令的用户和用户组 USER <用户名>[:<用户组>]

HEALTHCHECK:指定某个程序或者指令来监控 docker 容器服务的运行状态 HEALTHCHECK [选项] CMD <命令>:设置检查容器健康状况的命令

ONBUILD:延迟构建命令的执行 例 :ONBUILD <其它指令>

提交容器副本:docker commit -m=”提交的描述信息” -a=”镜像作者” <容器 ID=""> <创建的目标镜像名>

docker容器间通信

IP 通信

新建网络

docker network create -d bridge -d:参数指定 Docker 网络类型,有 bridge、overlay。

连接网络

容器创建时通过 –network 指定相应的网络 或者通过 docker network connect 将现有容器加入到指定网络

Docker DNS Server

启动时用 –name 为容器命名 只能在 user-defined 网络中使用

joined 容器

使两个或多个容器共享一个网络栈,共享网卡和配置信息,joined 容器之间可以通过 127.0.0.1 直接通信

配置 DNS 打开宿主机的 /etc/docker/daemon.json 文件,添加以下内容

{
  "dns" : [
    "114.114.114.114",
    "8.8.8.8"
  ]
}

指定容器DNS的配置 在启动指令添加参数:–rm host_ubuntu –dns=114.114.114.114 –dns-search=test.com ubuntu

查看windows下使用docker时linux环境对应ip, docker-machine -ls docker-machine ip default

自建docker容器

Docker Dockerfile

  1. 新建一个名为 Dockerfile 文件
  2. 添加以下内容
FROM centos
RUN echo '这是一个本地构建的centos镜像' > /usr/share/centos/html/index.html

RUN yum install wget
RUN wget -O redis.tar.gz "http://download.redis.io/releases/redis-5.0.3.tar.gz"
RUN tar -xvf redis.tar.gz

:Dockerfile 的指令每执行一次都会在 docker 上新建一层