镜像(image)命令:
docker images 查看镜像信息
docker search ubuntu:16.04 从docker hub搜索ubuntu 16.04的镜像
docker pull ubuntu:16.04 从docker hub下载ubuntu 16.04的镜像
docker push 将本地镜像上传到docker hub
docker history image.name 查看构建历史
docker rmi ubuntu 删除本地的ubuntu镜像
docker tag 给镜像打tag
构建镜像的两种方式:
1. docker commit container_name image_name
2. 通过Dockerfile 构建
FROM ubuntu
RUN apt-get update && apt install vim
通过 docker build -t image.name . 命令构建 -t后为镜像名
通过 docker history image.name 命令查看构建历史
如果不希望在构建镜像时使用缓存,可以在docker build命令中加上--no-cache参数
Dockerfile常用指令:
FROM 指定base镜像
MAINTAINER 设置镜像的作者,可以是任意字符串
COPY 将文件从build contest 复制到镜像, COPY src dest
ADD 与COPY类似, 从build context 复制文件到镜像。不同的是,如果时压缩文件会被自动解压
ENV 设置环境变量
EXPOSE 指定容器中的进程会监听某个端口,docker可以将该端口暴露出来
VOLUME 将文件或目录声明为volume
WORKDIR 为后面的RUN CMD ENTRYPOINT ADD COPY指令设定镜像中的当前工作目录
RUN 在容器中运行指定的命令, RUN指令通常用于安装应用和软件包。
CMD 容器启动时运行指定的命令 ,CMD可以被docker run 之后的参数替换。
ENTRYPOINT Dockerfile中可以有多个ENTRYPOINT指令,但只有最后一个生效。CMD或docker run 之后的参数会被当做参数传递给ENTRYPOINT。
构建本地仓库:
docker run -d -p 5000:5000 -v /localregistry:/var/lib/registry registry
-d 后台启动容器
-p 将容器的5000端口映射到host的5000端口。5000 是registry的服务端口。
-v 将容器/var/lib/registry 目录映射到host的/localregistry。 用于存放镜像数据
容器(Container)命令:
docker ps 或docker container ls 来查看Docker host 中当前运行的容器
docker ps -a 或docker container ls -a 来查看Docker host 中所有的容器
docker create 创建一个容器,这是容器处于Created状态
docker stop 停止一个容器
docker kill 快速停止一个容器
docker start 重启一个停止的容器
docker restart 相当于 docker stop + docker start
docker attach 直接进入容器启动命令的终端,不会启动新的进程
docker exec 则是在容器中打开新的终端,并且可以启动新的进程,执行这个命令进入通过 -d启动的服务类容器, 如数据库
docker logs 输出容器中执行的命令
docker rename 重命名容器
docker run 建立一个新的容器, 相当与 docker create + docker start
docker run 命令时,可以通过 --restart=always 让容器无论已何种原因退出(包括正常退出和因某种错误停止运行),都立即重启 , 即除了docker stop 和docker kill命令之外
docker pause 让容器暂停工作,出与暂停状态的容器不会占用cpu
docker unpause 回复暂停的容器
docker rm 删除容器
docker run -m 200M --memory-swap=300M ubuntu 允许该容器使用200Mb的内存和100Mb的swap,如果不指定--memory-swap 则 --memory-swap默认为 -m的两倍
网络(Network)命令
docker 在安装时自动为我们创建none、host、bridge三种网络, 通过--network命令指定,默认bridge模式
docker 还提供三种user-defined网络驱动: bridge、overlay、 macvlan,其中overlay和macvla 用于创建跨主机的网络。
docker network create --driver bridge my_net 创建名为my_net的bridge网络,还可以通过--subnet命令来指定ip网段,通过--gateway参数来指定网关
docker network inspect my_net 查看网络信息
容器要使用新的网络,需要在启动时通过--network指定,如docker run --network=my_net ubuntu --ip 172.18.0.2 ubuntu:lasted
当我们想固定容器的ip地址(即静态ip),只有使用--subnet创建的网络才可以,
默认情况下两个不同网络的容器是不能互相访问的,但我们可以 docker network connect my_net container 来实现二者的连接
docker dns server 使容器通过容器名进行通信,不过只适用于user-defined网络中
joined 容器使两个或多个容器共享一个网络栈,共享网卡与配置信息, docker run -d -it --name=web1 httpd 再创建一个容器并通过 --network=container:web1 httpd
容器是默认可以访问外网的,外部世界则通过端口映射来访问容器
存储命令
容器由最上面的一个可写层和若干个只读的镜像组成,容器的数据就存放在这些层中。这样的分层结构最大的特性为Copy-on-write.
对于有持久化数据的需求,容器启动时需要加载已有的数据,容器销毁时需要保留产生的新数据,这就用到了的docker的一种存储机制: Date Volume, Date Volume本质上是Docker Host 文件系统中的目录或者文件,能够直接被mount到容器中。
目前docker提供了两种类型的volume:
1. bind mount
docker run -it -v <host path>:<container path> ubuntu
bind mount 还可以指定数据的读写权限,莫认是可读可写,可指定为只读, 如
docker run -v <host path>:<container path>:ro
bind mount还支持对单个文件的bind
不同的容器可以通过bind mount 共用一个文件系统
2 docker managed volume
docker managed volume 具有更好的移植性
通过命令 docker run -v <container path> ubuntu
docker 会在host上/var/lib/docker/volumes/目录下创建一个目录保存容器中的文件
docker volume ls 查看host中已有的数据卷
docker volume inspect volume:id查看该数据卷的详细信息
docker managed volume 不支持单个文件,也不能进行权限控制,不支持指定文件位置,但其移植性强,无需指定host目录
volume container 是专门为其他容器提供volume的容器。它提供的卷可以使bind mount, 也可以是docker managed volume。下面我们创建一个volume container
docker create --name vc_data -v <host path>:<container path> ubuntu
之所以用create 命令,这是因为volume container 之提供数据,不需要处于运行状态。
其他容器可以通过 --volumes-from 使用刚刚创建的volume container
docker run --volumes-from va_data ubuntu
与bind mount 相比,不必为每个容器制定host path,所有的path都在volume container 中定义好了
data-packed volume container 与 volume container 相比,将放在host里的数据 放到了镜像中,其具有较强的可移植性。
docker machine
安装docker-machine
base=https://github.com/docker/machine/releases/download/v0.16.0&& curl -L $base/docker-machine-$(uname-s)-$(uname-m)>/tmp/docker-machine&& sudo install /tmp/docker-machine /usr/local/bin/docker-machine
创建docker machine
docker-machine create --driver generic --generic-ip-address=192.168.1.63 host1
docker-machine env host1
eval $(docker-machine env host1)
docker-machine upgrade
docker-machine config 查看machine的docker daemon 配置
网友评论