声明:该教程为精简教程,如果想要深入理解建议仔细研读官方文档
1.Docker概述
- 使用 Docker 可以通过 容器(container) 来创建、部署和运行应用
- Docker 基础部分可以分为:
- image:镜像
- container:容器,是应用实例的载体,是某个镜像的“实例”。例如 一个wordpress容器,有自己的php环境、wordpress项目、工作目录、网络配置、bash等
- 容器间是相互隔离的
- 容器是无状态
- 容器是一种更加轻量级的虚拟机
- Docker 层次:
container * n > services * n > stack
2.安装
2.1 Docker for Centos
引入yum的repo:
$ sudo yum install -y yum-utils \
device-mapper-persistent-data \
lvm2
$ sudo yum-config-manager \
--add-repo \
https://download.docker.com/linux/centos/docker-ce.repo
安装
$ sudo yum install docker-ce
2.2 Docker for Mac
2.3 Docker for Win10
2.4 其余
3.Docker Image
3.1 仓库
Registry 仓库中保存着image,Docker
Hub 是 Docker 官方的仓库,可以通过仓库下载和上传image。
3.2 常用命令
$ docker pull <registry>/<image>:<version>
通过以上命令可以获取image
$ docker image ls
以上命令将打印出本地的image
$ docker tag <imageName> <registry>/<image>:<version>
该命令将创建一个名为 <registry>/<image> 且 Tag 为<version> 的镜像指向原来的镜像
$ docker push <imageName>
将上传镜像,imageName 如果是 registry / image 形式,将上传到响应的仓库
3.3 创建image
$ docker build .
以上命令,将会把本目录下的文件传给build,并默认以目录下 Dockerfile 来构建镜像。
查看Dockerfile参考
$ docker build -t <TagName> .
可以同时创建一个tag
4.Docker Container
4.1 创建
$ docker run -d <imageName>
以上命令将创通过image创建一个容器,系统会自动分配一个 containerId 给容器
以下是常用参数:
--name <containerName>
-p <host port>:<container port> // 将主机的端口和容器的端口绑定
-v <volume>:<container path> // 将容器的某个目录放在volume或者某个主机目录下,这样就可以永久保存container的数据,详细请看volume
-e VAR1=12312312 // 配置环境参数
--rm // 运行结束后自动删除
4.2 查看
$ docker container ls
或者
$ docker ps
以上命令将打印出正在运行的容器的信息
$ docker container ls -a
打印所有的容器
$ docker container inpsect <containerId>
查看某个容器运行的详细信息
4.3 删除和保存
$ docker container stop <containerId>
$ docker container rm <containerId>
停止容器后可以删除容器
$ docker container prune
会删除所有停止的容器
$ docker commit <containerId> <imageName>
可以将容器保存为镜像
4.4 调用容器处理命令
$ docker exec -it <containerId> bash
将开启一个可以交互的 shell,类似于 ssh 的效果
5.Docker Volume
5.1 概述
Volume 数据卷,可以使容器数据持久化,即能够保存容器的状态。比如 mysql 容器,可以将保存的数据库的信息放在数据卷中,这样新建的一个 mysql 容器就可以使用之前的数据了。
数据持久化的方式有三种类型:
- volume : 由 Docker 创建和管理,并且在 Docker 重启后也不会丢失,这是主要的方式。通过以下方式绑定
$ docker run -v <volume>:<container path> ...
- bind : 将主机目录挂载在容器的目录中,这样容器的某些数据会保存在主机中。
$ docker run -v <host path>:<container path> ...
- tmpfs: 不常用,保存在内存中
5.2 创建
$ docker volume create <volumename>
创建一个volume
$docker volume create --driver <drivername> <volumename>
创建一个使用某种驱动(默认是 local )的 volume,通过设置驱动可以配置某个 volume 供多个主机共享使用
例如:
$ docker volume create --driver vieux/sshfs \
-o sshcmd=test@node2:/home/test \
-o password=testpassword \
sshvolume
然后可以通过以下方式绑定到容器
$ docker run -d \
--name sshfs-container \
--volume-driver vieux/sshfs \
--mount src=sshvolume,target=/app,volume-opt=sshcmd=test@node2:/home/test,volume-opt=password=testpassword \
<image>
5.3 管理
$ docker volume ls
打印 volume 信息
$ docker volume prune
删除停止使用的 volume
$ docker volume inspect <volume>
查看 volume 的详细信息
6.Docker Swarm
6.1 概述
Swarm 集群,表示 多台主机的集合。通过 swarm 我们可以快速部署和管理集群
Swarm 中有 manager 和 worker 两种角色,其中 worker 只能执行操作或者选择退出 swarm
6.2 创建与退出
$ docker swarm init
以上命令会初始化本机为一个 manager 节点,并且会返回一个 token
$ docker swarm join-token (manager|worker)
然后根据提示操作,即可加入某个集群并且成为相应的角色
$ docker swarm join \
--token <token> \
<managerip>
通过 token 可以成为某个集群的 worker
$ docker swarm leave
退出某个集群
7.Docker Stack和Docker Service
7.1 概述
- Docker Service 是有多个副本的容器的集合
- Docker Stack 是多个 Serivce 以及其相应环境(volume和网络等)的集合,必须在 swarm 中才能使用
7.2 通过Docker Stack部署集群
$ docker stack deploy -c <filename> <stackname>
通过一个yml格式的配置文件,既可以在一个 swarm 中快速部署应用
Stack.yml 配置文件参考