这里是普通文章模块栏目内容页
Docker-Windows 2008 R2安装使用

测试机配置

项目 配置
操作系统 Windows Server 2008 R2 Enterprise
CPU Intel i3 3220
内存 8GB

Docker下载

Docker目前提供了最新的Windows版本,只支持windows 10,使用了Hyper-V虚拟机。

由于服务器目前使用的较多的为Windows Server 2008,因此,只能使用支持 Windwos Server 2008 R2的Docker Toolbox,使用的是Oracle VM VirtualBox虚拟机,官网下载地址:
http://www.docker.com/products/docker-toolbox

编写此文时下载的版本:
https://github.com/docker/toolbox/releases/download/v1.12.0/DockerToolbox-1.12.0.exe


安装要求

  • 要求安装64位操作系统
  • 要求BIOS开启虚拟化

Docker安装

执行DockerToolbox-1.12.0.exe安装程序,按向导默认安装即可,安装选项:

  • 安装路径:C:\Program Files\Docker Toolbox
  • 安装组件:Full installation

安装完成后,在开始菜单启动快捷方式:Docker\Docker Quickstart Terminal进入终端操作界面

初次启动时会自动更新虚拟机镜像文件boot2docker.iso并创建VirtualBox默认虚拟机default

Docker启动成功画面

启动成功时会出现以上界面。


Docker常用命令

Docker命令图

Docker命令与 Git 和 GitHub比较类似。总的来说分为以下几种:

  • 容器生命周期管理 — docker [run|start|stop|restart|kill|rm|pause|unpause]
  • 容器操作运维 — docker [ps|inspect|top|attach|events|logs|wait|export|port]
  • 容器rootfs命令 — docker [commit|cp|diff]
  • 镜像仓库 — docker [login|pull|push|search]
  • 本地镜像管理 — docker [images|rmi|tag|build|history|save|import]
  • 其他命令 — docker [info|version]

docker version

显示 Docker 版本信息。

docker info

显示 Docker 系统信息,包括镜像和容器数。

docker search

docker search [options "o">] term
docker search -s  django

从 Docker Hub 中搜索符合条件的镜像。
–automated 只列出 automated build
类型的镜像;
–no-trunc 可显示完整的镜像描述;
-s 40 列出收藏数不小于40的镜像。

docker pull

docker pull [-a "o">] [user/ "o">]name[:tag "o">]
docker pull laozhu/telescope:latest

从 Docker Hub 中拉取或者更新指定镜像。
-a 拉取所有 tagged 镜像 。

docker login

docker login

Username: username
Password: **
Email: user@domain.com
Login Succeeded
按步骤输入在 Docker Hub 注册的用户名、密码和邮箱即可完成登录。

docker logout

运行后从指定服务器登出,默认为官方服务器。

docker images

docker images [options "o">] [name]

列出本地所有镜像。其中 [name] 对镜像名称进行关键词查询。
-a 列出所有镜像(含过程镜像);
-f 过滤镜像,如: -f [‘dangling=true’] 只列出满足
dangling=true 条件的镜像;
–no-trunc 可显示完整的镜像ID;
-q 仅列出镜像ID。
–tree 以树状结构列出镜像的所有提交历史。

docker ps

列出所有运行中容器。
-a 列出所有容器(含沉睡镜像);
–before=”nginx” 列出在某一容器之前创建的容器,接受容器名称和ID作为参数;
–since=”nginx” 列出在某一容器之后创建的容器,接受容器名称和ID作为参数;
-f [exited=] 列出满足
exited= 条件的容器;
-l 仅列出最新创建的一个容器;
–no-trunc 显示完整的容器ID;
-n=4 列出最近创建的4个容器;
-q 仅列出容器ID;
-s 显示容器大小。

docker rmi

docker rmi [options "o">] <image>  "o">[image...]
docker rmi nginx:latest postgres:latest python:latest

从本地移除一个或多个指定的镜像。
-f 强行移除该镜像,即使其正被使用;
–no-prune 不移除该镜像的过程镜像,默认移除。

docker rm

docker rm [options "o">] <container>  "o">[container...]
docker rm nginx-01 nginx-02 db-01 db-02
sudo docker rm -l /webapp/redis

-f 强行移除该容器,即使其正在运行;
-l 移除容器间的网络连接,而非容器本身;
-v 移除与容器关联的空间。

docker history

docker history  "o">[options] <image>

查看指定镜像的创建历史。
–no-trunc 显示完整的提交记录;
-q 仅列出提交记录ID。

docker start|stop|restart

docker start|stop "p">|restart [options "o">] <container>  "o">[container...]

启动、停止和重启一个或多个指定容器。
-a 待完成
-i 启动一个容器并进入交互模式;
-t 10 停止或者重启容器的超时时间(秒),超时后系统将杀死进程。

docker kill

docker kill  "o">[options "o">] <container>  "o">[container...]

杀死一个或多个指定容器进程。
-s “KILL” 自定义发送至容器的信号。

docker events

docker events [options "o">]
docker events --since= "s2">"20141020"
docker events --until= "s2">"20120310"

从服务器拉取个人动态,可选择时间区间。

docker save

docker save –i debian "debian.tar"
docker save debian > "debian.tar"

将指定镜像保存成 tar 归档文件, docker load 的逆操作。保存后再加载(saved-loaded)的镜像不会丢失提交历史和层,可以回滚。
-o “debian.tar” 指定保存的镜像归档。

docker load

docker load [options]
docker load < debian.tar
docker load -i "debian.tar"

从 tar 镜像归档中载入镜像, docker save 的逆操作。保存后再加载(saved-loaded)的镜像不会丢失提交历史和层,可以回滚。
-i “debian.tar” 指定载入的镜像归档。

docker export

docker export <container>
docker export nginx-01 > export.tar

将指定的容器保存成 tar 归档文件, docker import 的逆操作。导出后导入(exported-imported))的容器会丢失所有的提交历史,无法回滚。

docker import

docker import url|-  "o">[repository[:tag "o">]]
cat export.tar  "p">| docker import - imported-nginx:latest
docker import http://example.com/export.tar

从归档文件(支持远程文件)创建一个镜像, export 的逆操作,可为导入镜像打上标签。导出后导入(exported-imported))的容器会丢失所有的提交历史,无法回滚。

docker top

docker top <running_container>  "o">[ps options]

查看一个正在运行容器进程,支持 ps 命令参数。

docker inspect

docker instpect nginx:latest
docker inspect nginx-container
  • 1
  • 2

检查镜像或者容器的参数,默认返回 JSON 格式。
-f 指定返回值的模板文件。

docker pause

暂停某一容器的所有进程。

docker unpause

docker unpause <container>

恢复某一容器的所有进程。

docker tag

docker tag [options "o">] <image>[:tag "o">] [repository/ "o">][username/]name "o">[:tag]

标记本地镜像,将其归入某一仓库。
-f 覆盖已有标记。

docker push

docker push name[:tag "o">]
docker push laozhu/nginx:latest

将镜像推送至远程仓库,默认为 Docker Hub 。

docker logs

docker logs [options "o">] <container>
docker logs -f -t --tail= "s2">"10" insane_babbage

获取容器运行时的输出日志。
-f 跟踪容器日志的最近更新;
-t 显示容器日志的时间戳;
–tail=”10” 仅列出最新10条容器日志。

docker run

docker run [options "o">] <image> [ "nb">command]  "o">[arg...]

启动一个容器,在其中运行指定命令。
-a stdin 指定标准输入输出内容类型,可选 STDIN/
STDOUT / STDERR 三项;
-d 后台运行容器,并返回容器ID;
-i 以交互模式运行容器,通常与 -t 同时使用;
-t 为容器重新分配一个伪输入终端,通常与 -i 同时使用;
–name=”nginx-lb” 为容器指定一个名称;
–dns 8.8.8.8 指定容器使用的DNS服务器,默认和宿主一致;
–dns-search example.com 指定容器DNS搜索域名,默认和宿主一致;
-h “mars” 指定容器的hostname;
-e username=”ritchie” 设置环境变量;
–env-file=[] 从指定文件读入环境变量;
–cpuset=”0-2” or –cpuset=”0,1,2”
绑定容器到指定CPU运行;
-c 待完成
-m 待完成
–net=”bridge” 指定容器的网络连接类型,支持 bridge /
host / none
container:

docker cp

docker cp <CONTAINER_ID>:path hostpath

复制容器内的文件到宿主机目录上

docker attach

docker attach <CONTAINER_ID>

Docker允许使用attach命令与运行中的容器交互,并且可以随时观察容器內进程的运行状况。退出容器可以通过两种方式来完成:
Ctrl+C 直接退出
Ctrl-\ 退出并显示堆栈信息(stack trace)


Docker国内镜像

Docker的images镜像服务器在国外,有时候会比较慢,可能会下载不成功,可通过以下URL通过WEB方式查找需要的官方镜像:
https://hub.docker.com/explore/

国内的有DaoCloud及阿里云镜像库

DaoCloud镜像

官方网站及镜像查找:
https://www.daocloud.io/

使用由DaoCloud提供的Registry Mirror服务,在申请开通Mirror服务后会得到一个Mirror加速地址,然后按照其配置文档的要求进行配置即可(分Linux、MacOS、Windows)

Windows下的配置方式:

请确认你的 Docker Toolbox 已经启动,并执行下列命令(请将 加速地址 替换为在加速器页面获取的专属地址)

docker-machine ssh default
sudo sed -i "s|EXTRA_ARGS='|EXTRA_ARGS='--registry-mirror=加速地址 |g" /var/lib/boot2docker/profile
exit
docker-machine restart default

直接命令行方式使用:

docker pull daocloud.io/library/nginx:1.9.12
docker pull daocloud.io/daocloud/dao-tomcat:v7.0.55
docker pull daocloud.io/library/centos:7.2.1511
docker pull daocloud.io/centos

阿里云镜像

官方网站及镜像查找:
http://dev.aliyun.com/search.html

阿里云镜像同样需要注册后才可使用,在注册成功后同样会得到一个Mirror加速地址,然后按照其配置文档的要求进行配置即可(分Ubuntu、Centos、Mac、Windows)

Windows下的配置方式:

Windows下需要重构default虚拟机,在Docker Toolbox终端窗口中使用以下命令创建:

docker-machine create --engine-registry-mirror=加速地址 -d virtualbox default

# 查看机器的环境配置,并配置到本地。然后通过Docker客户端访问Docker服务。
docker-machine env default
eval "$(docker-machine env default)"
docker info

Dockerfile自定义image

Dockerfile关键字

FROM
基于哪个镜像

RUN
安装软件用

MAINTAINER
镜像创建者

CMD
container启动时执行的命令,但是一个Dockerfile中只能有一条CMD命令,多条则只执行最后一条CMD。
CMD主要用于container时启动指定的服务,当docker run command的命令匹配到CMD command时,会替换CMD执行的命令(同时执行)。

ENTRYPOINT
container启动时执行的命令,但是一个Dockerfile中只能有一条ENTRYPOINT命令,如果多条,则只执行最后一条ENTRYPOINT没有CMD的可替换特性

USER
使用哪个用户跑container

EXPOSE
container内部服务开启的端口。主机上要用还得在启动container时,做host-container的端口映射:docker run -d -p 127.0.0.1:33301:22 centos6-ssh

ENV
用来设置环境变量,比如:
ENV LANG en_US.UTF-8
ENV LC_ALL en_US.UTF-8

ADD
将文件拷贝到container的文件系统对应的路径
所有拷贝到container中的文件和文件夹权限为0755,uid和gid为0
如果文件是可识别的压缩格式,则docker会帮忙解压缩,如果要ADD本地文件,则本地文件必须在 docker build ,指定的目录下,如果要ADD远程文件,则远程文件必须在 docker build ,指定的目录下。比如:
docker build github.com/creack/docker-firefox
docker-firefox目录下必须有Dockerfile和要ADD的文件
注意:使用docker build - < somefile方式进行build,是不能直接将本地文件ADD到container中。只能ADD url file。ADD只有在build镜像的时候运行一次,后面运行container的时候不会再重新加载了。

VOLUME
可以将本地文件夹或者其他container的文件夹挂载到container中。

WORKDIR
切换目录用,可以多次切换(相当于cd命令),对RUN,CMD,ENTRYPOINT生效

ONBUILD
ONBUILD 指定的命令在构建镜像时并不执行,而是在它的子镜像中执行

Dockerfile示例

双击Docker Quickstart Terminal运行Docker终端程序:

cd Desktop
mkdir tomcatdocker
cd tomcatdocker
touch Dockerfile
ls Dockerfile
notepad Dockerfile&

在notepad中,创建Dockerfile文件并保存,内容如下:

FROM ubuntu:14.04
MAINTAINER Fingerling <10311400@qq.com>
ENV REFRESHED_AT 2016-03-21
RUN apt-get -yqq update
RUN apt-get -yqq install tomcat7 default-jdk
ENV CATALINA_HOME /usr/share/tomcat7
ENV CATALINA_BASE /var/lib/tomcat7
ENV CATALINA_PID  /var/run/tomcat7.pid
ENV CATALINA_SH   /usr/share/tomcat7/bin/catalina.sh
ENV CATALINA_TMPDIR /tmp/tomcat7-tomcat7-tmp
RUN mkdir -p $CATALINA_TMPDIR
VOLUME ["/var/lib/tomcat7/webapps/"]
EXPOSE 8080 9000
ENTRYPOINT ["/usr/share/tomcat7/bin/catalina.sh", "run" ]

生成并运行镜像:

docker build -t iamverygood/docker-tomcat .
docker run iamverygood/docker-tomcat