Docker 入门教程

1. Docker简介

开源的容器引擎,将应用程序和基础设施层隔离,使用Docker可以更快的打包,测试和部署应用程序。https://www.docker.com/

版本

  • Docker EE:企业版

  • Docker CE:社区版

架构

  • Docker daemon:Docker守护进程

  • Client:Docker 客户端

  • Images:Docker 镜像

  • Container:Docker 容器

  • Registry:集中存储与分发镜像的服务

Docker VS 虚拟机

  • 虚拟机利用Hypervisor虚拟化CPU,内存,IO设备等实现的,然后在其上运行完整的操作系统,在该系统上运行所需要的应用。资源隔离级别:OS级别

  • 运行在Docker容器中的应用直接运行于宿主机的内核,容器共享宿主机的内核。

应用场景

  • 简化配置

  • DevOps

  • 提高开发效率

  • 隔离应用

  • 整合服务器

  • 调试能力

  • 多租户

  • 快速部署

2. Docker安装

CentOS

  • yum安装

  • shell一键安装

Ubuntu

  • apt-get安装

MacOS

  • 安装包一键安装

Windwos

  • docker for windwos

3. Docker 镜像

镜像加速器

  • 阿里云加速器

镜像常用命令

  • 搜索镜像:docker search

  • 下载镜像:docker pull

  • 本地镜像列表:docker images

  • 删除本地镜像:docker rmi

  • 构建镜像:docker build

  • 保存镜像:docker save

  • 加载镜像:docker load

4. Docker 容器

容器常用命令

  • 新建启动容器:docker run

  • 本地容器列表:docker ps

  • 停止容器:docker stop 容器id

  • 强制停止容器:docker kill 容器id

  • 启动已停止的容器:docker start 容器id

  • 重启容器:docker restart 容器id

  • 进入容器:docker attach 容器id,docker nsenter ,docker exec

  • 删除容器:docker rm 容器id

  • 导出容器:docker export

  • 导入容器:docker import

容器互联

  • 使用 --link 参数即可实现容器之间的互联。该参数的格式为: --link name:alias ,其中,name是容器的名称,alias则是这个连接的别名。

容器网络(略)

5. Dockerfile指令详解

ADD 复制文件:从宿主机src目录复制文件到容器的指定目录中

ARG 设置构建参数:类似于ENV,ARG设置的是构建时的环境变量,在容器运行时是不会存在这些变量的。

CMD 容器启动命令

COPY 复制文件,和ADD类似,COPY不支持URL和压缩包

ENTRYPOINT 入口点:和CMD指令的目的一样,都是指定容器启动时执行的命令,可多次设置,但只有最后一个有效。

ENV 设置环境变量

EXPOSE 申明暴露的端口:申明在运行时容器提供服务的端口。

FROM 指定基础镜像

LABEL:为镜像添加元数据

RUN 执行命令

USER 设置用户

VOLUME 指定挂载点

WORKDIR 指定工作目录

6. Docker Registry

使用Docker Hub管理镜像(略)

使用Docker Registry管理镜像(略)

使用Nexus管理Docker镜像(略)

7. Docker 可视化管理工具

DockerUI(ui for Docker):https://github.com/kevana/ui-for-docker

Portainer:https://github.com/portainer/portainer

Kitematic:https://github.com/docker/kitematic

Shipyard:https://github.com/shipyard/shipyard

各种可视化界面的比较:http://m.blog.csdn.net/qq273681448/article/details/75007828

8. Docker数据持久化

数据卷

  • 数据卷是一个可供一个或多个容器使用的特殊目录,可以绕过UFS(Unix File System)。

    • 数据卷可以在容器之间共享和重用

    • 对数据卷的修改会立⻢生效

    • 对数据卷的更新,不会影响镜像

    • 数据卷默认会一直存在,即使容器被删除

    • 一个容器可以挂载多个数据卷

  • 创建数据卷: docker run --name nginx-data -v /mydir nginx

  • 删除数据卷: docker rm -v 容器ID

    • 即使容器被删除,宿主机中的目录也不会被删除。

数据卷容器

  • 如果有数据需要在多个容器之间共享,此时可考虑使用数据卷容器。

  • 创建数据卷容器: docker run --name nginx-volume -v /data nginx

9. 端口映射

随机映射:-P

指定端口映射:-p

  • ip:hostPort:containerPort:映射到指定IP的指定端口

  • ip::containerPort:映射到指定IP的随机端口

  • hostPort:containerPort:映射到宿主机所有IP的指定端口

  • containerPort:映射到宿主机所有IP的随机端口

查看端口映射

  • docker ps

  • docker port 容器ID

10. Docker Compose

简介

  • Compose是一个用于定义和运行多容器Docker应用程序的工具,前身是Fig。它非常适合用在开发、测试、构建CI工作流等场景。

安装

  • 安装Compose:shell,pip以及作为docker容器安装等方式。

  • 安装Compose命令补全工具

    • Bash

    • Zsh

快速入门

  • 基本步骤

    • 使用Dockerfile(或其他方式)定义应用程序环境,以便在任何地方重现该环境。

    • 在docker-compose.yml文件中定义组成应用程序的服务,以便各个服务在一个隔离的环境中一起运行。

    • 运行docker-compose up命令,启动并运行整个应用程序。

  • 工程、服务、容器

    • Docker Compose运行目录下的所有文件组成一个工程,一个工程可能包含多个服务,每个服务定了容器运行的镜像,参数和依赖,一个服务包括多个容器实例。

docker-compose.yml 常用命令

  • build:Compose会利用它自动构建镜像。

  • command:覆盖容器启动后默认执行的命令。

  • dns:配置dns服务器。

  • dns_search:配置dns的搜索域名。

  • environment:环境变量设置。

  • env_file:从文件中获取环境变量。

  • expose:暴露端口,只将端口暴露给连接的服务,不暴露给宿主机。

  • external_links:连接到docker-compose.yml外部的容器

  • image:指定镜像名称或镜像id

  • links:连接到其他服务的容器

  • networks

  • network_mode:设置网络模式

  • ports:暴露端口信息,可使用HOST:CONTAINER的格式

  • volumes:卷挂载路径设置。

  • volumes_from:从另一个服务或容器挂载卷。

docker-compose 常用命令

  • build:构建或重新构建服务。服务构建后将以project_service的形式标记。

  • help:查看指定命令的帮助文档。

  • kill:通过发送kill命令停止指定服务的容器。

  • logs:查看服务的日志输出。

  • port:打印绑定的公共端口。

  • ps:列出所有容器。

  • pull:下载服务镜像

  • rm:删除指定服务的容器。

  • run:在一个服务商执行一个命令。

  • scale:设置指定服务运行容器的个数

  • start:启动指定福谁已存在的容器

  • stop:停止已运行的容器

  • up:构建,创建,重新创建,启动,连接服务的相关容器

网络设置

  • Compose会为我们的应用创建一个网络,服务的每个容器都会加入该网络中。这样,容器就可被该网络中的其他容器访问,不仅如此,该容器还能以服务名称作为hostname被其他容器访问。

  • 应用程序的网络名称基于Compose的工程名称,而项目名称基于docker-compose.yml所在目录的名称。如需修改工程名称,可使用--project-name标识或COMPOSE_PORJECT_NAME环境变量。

控制服务启动顺序

  • wait-for-it

  • dockerrize

  • wait-for

最后更新于