Docker的意思是码头工人,码头工人在码头从船上装卸海运的货物,你可以把你的所有货物打包起来,装到同一个标准规格的集装箱里,这样不仅可以跟别人的集装箱隔离开、互不影响,而且便于装卸。
再看Docker的logo,一头船一样的鲸鱼,背上背着一些小方块,这些小方块就是一个个集装箱,是不是很有意思?这也是Docker的基本思想。我们可以把我们需要的一些应用打包到一个“集装箱”里,只需要管理这个“集装箱”即可,应用的部署和卸载都变的容易。
接下来了解一些Docker的基本概念:
Docker是一个开源的应用容器引擎;是一个轻量级容器技术;Docker支持将软件编译成一个镜像;然后在镜像中各种软件做好配置,将镜像发布出去,其他使用者都可以使用这个镜像;容器是完全使用沙箱机制,相互之间不会有任何接口,更重要的是容器性能开销极低;运行中的这个镜像称为容器,容器启动是非常快速的;Docker 容器通过 Docker 镜像来创建。容器与镜像的关系类似于面向对象编程中的对象与类。容器在Linux上本地运行,并与其他容器共享主机的内核。它运行一个离散进程,不占用任何其他可执行文件更多的内存,从而使其轻巧。相比之下,虚拟机(VM)运行具有“虚拟机管理程序”对主机资源进行虚拟访问的成熟的“ guest”操作系统。通常,VM会产生大量开销,超出了应用程序逻辑所消耗的开销。简单来说,容器仅包含我们的应用程序以及一些命令和依赖库,而虚拟机则必须包含一个操作系统。
连接docker主机进行操作
docker仓库(Registry)Docker 仓库用来保存镜像,可以理解为代码控制中的代码仓库。
Docker Hub(https://hub.docker.com) 提供了庞大的镜像集合供使用。 一个 Docker Registry 中可以包含多个仓库(Repository);每个仓库可以包含多个标签(Tag);每个标签对应一个镜像。 通常,一个仓库会包含同一个软件不同版本的镜像,而标签就常用于对应该软件的各个版本。我们可以通过 <仓库名>:<标签> 的格式来指定具体是这个软件哪个版本的镜像。如果不给出标签,将以 latest 作为默认标签。
docker镜像(lmages)Docker 镜像是用于创建 Docker 容器的模板,放在docker仓库中docker容器(Container)镜像启动后的实例称为-个容器;容器是独立运行的一个或一组应用数据卷(Volume)Docker中的数据可以存储在类似于虚拟机磁盘的介质中,在Docker中称为数据卷(Data Volume)。数据卷可以用来存储Docker应用的数据,也可以用来在Docker容器间进行数据共享。
数据卷呈现给Docker容器的形式就是一个目录,支持多个容器间共享,修改也不会影响镜像。使用Docker的数据卷,类似在系统中使用 mount 挂载一个文件系统。
Docker MachineDocker Machine是一个简化Docker安装的命令行工具,通过一个简单的命令行即可在相应的平台上安装Docker,比如VirtualBox、 Digital Ocean、Microsoft Azure。
Docker安装和卸载
Docker镜像仓库地址-镜像加速
镜像仓库
docker login登陆到一个Docker镜像仓库,如果未指定镜像仓库地址,默认为官方仓库 Docker Hub
例:docker login -u 用户名 -p 密码
docker logout登出一个Docker镜像仓库,如果未指定镜像仓库地址,默认为官方仓库 Docker Hubdocker pull从镜像仓库中拉取或者更新指定镜像
例:docker pull nginx:tag
tag 版本号,可以任意写,如果不写,默认是latest,后面的tag也是一样的意思
docker search从镜像仓库查找镜像
例:docker search nginx:tag
docker push将本地镜像上传到镜像仓库 例:docker push mynginx:tag本地镜像管理docker images列出本地所有镜像docker tag标记本地镜像,将其归入某一仓库
例:docker tag ubuntu:15.10 bukale/ubuntu:v3 将镜像ubuntu:15.10标记为 bukale/ubuntu:v3 镜像
docker rmi删除本地镜像
例:docker rmi [镜像id或镜像名称]
docker build使用 Dockerfile 创建镜像
例:docker build -t bukale/mynginx:v1 .
-t 创建的镜像的名称
最后面参数是Dockerfile文件目录,. 代表当前目录,也可以写该文件绝对路径
docker history查看指定镜像创建历史
例:docker history bukale/im
docker save将指定镜像保存成 tar 归档文件
例:docker save -o ./Desktop/mynginx.tar nginx
-o 指定保存的文件
docker load导入使用docker save命令导出的镜像
例:docker load -i ./Desktop/mynginx.tar
--input , -i 指定导入的文件,代替 STDIN
--quiet , -q 精简输出信息。
docker import从归档文件中创建镜像
例:docker import mynginx.tar bukale/mynginx:v1 从镜像归档文件my_ubuntu_v3.tar创建镜像,命名为bukale/mynginx:v1
容器rootfs命令
docker commit从容器创建一个新的镜像
例:docker commit -m="updated nginx" -a="bukale" edcfc87a3295 bukale/nginx
-m 描述信息;-a 作者信息;edcfc87a3295是容器id,bukale/nginx是创建后的镜像名
docker cp用于容器与主机之间的数据拷贝
例:
1、将主机/www/kaka目录拷贝到容器edcfc87a3295的/www目录下。 docker cp /www/kaka edcfc87a3295:/www/ 2、将主机/www/kaka目录拷贝到容器edcfc87a3295中,目录重命名为www。 docker cp /www/kaka edcfc87a3295:/www 3、将容器edcfc87a3295的/www目录拷贝到主机的/tmp目录中。 docker cp edcfc87a3295:/www /tmp/
docker diff检查容器里文件结构的更改
例:docker diff mynginx
容器操作docker ps列出所有运行中的容器,加-a,则是列出所有容器
docker inspect获取容器/镜像的元数据docker top查看容器中运行的进程信息,支持 ps 命令参数
例:docter top mynginx
docker attach连接到正在运行中的容器docker events从服务器获取实时事件docker logs获取指定容器的日志
例:docker logs --tail 10 mynginx 列出最新10条容器mynginx的日志
docker wait阻塞运行直到容器停止,然后打印出它的退出代码docker export将指定容器保存成 tar 归档文件
例:docker save -o ./Desktop/mynginx.tar nginx
docker port列出指定的容器的端口映射,或者查找将PRIVATE_PORT NAT到面向公众的端口
例:docker port mynginx
容器生命周期管理
docker run创建一个容器
例:
docker run -it -d -v ./Desktop/nginx/conf/nginx.conf:/etc/nginx/conf/nginx.conf -p 8088:80 --name mynginx nginx /bin/bash
-i 以交互模式运行;
-t 分配一个伪输入终端;
-d 后台运行;
-v 挂载宿主机目录或文件到容器的目录或文件;
-p 端口映射,宿主机端口:容器端口;
-P 容器内部端口随机映射到主机端口;
-m 设置容器使用内存最大值;
--name 为容器指定名称;
-h 指定容器hostname;
--dns 指定容器使用的dns服务器,默认和宿主机一致;
/bin/bash 使用-it参数时,在容器内执行/bin/bash命令;
docker start启动容器
例:docker start mynginx
docker restart重新启动容器docker stop停止容器docker kill杀掉一个运行中的容器docker rm删除一个或多个容器,需先停止容器的运行
例:docker rm mynginx
-f 通过 SIGKILL 信号强制删除一个运行中的容器
-l 移除容器间的网络连接,而非容器本身
-v 删除与容器关联的卷
docker pause暂停容器中所有进程
例:docker pause mynginx
docker unpause恢复容器中所有进程
例:docker unpause mynginx
docker create创建一个新的容器,但不启动它,用法与docker run一样,但docker run是创建并启动
docker exec在运行的容器中执行命令
例:docker exec -it mynginx /bin/bash
-i 以交互模式运行;
-t 分配一个伪输入终端;
/bin/bash 使用-it参数时,在容器内执行/bin/bash命令;
要退出,先按CTRL+P,然后按CTRL+Q,这样不会中断容器的运行;
数据卷操作docker volumedocker volume ls 列出所有数据卷
docker volume create nginx_vol 创建数据卷nginx_vol
docker volume rm nginx_vol 删除数据卷
docker volume inspect nginx-vol 查看指定数据卷详情
其它docker info显示docker信息docker version显示docker版本