docker-machime和compose、swarm被称为docker三剑客。docker-machine是解决docker运行环境问题,之前已经研究过,下面研究compose和swarm。
1.Docker Compose
dcoker-compose主要是解决本地docker容器编排问题。当然也可以自己编写shell脚本来解决此类问题。
一般是通过yaml配置文件来使用它,这个yaml文件里能记录多个容器启动的配置信息(镜像、启动命令、端口映射等),最后只需要执行docker-compose
对应的命令就会像执行脚本一样地批量创建和销毁容器。
1.使用步骤
一般分为3步:
使用 Dockerfile 定义应用程序的环境。
使用 docker-compose.yml 定义构成应用程序的服务,这样它们可以在隔离环境中一起运行。
最后,执行 docker-compose up 命令来启动并运行整个应用程序。
2.安装compose
linux下面安装:
sudo curl -L "https://github.com/docker/compose/releases/download/1.24.1/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose #下载 sudo chmod +x /usr/local/bin/docker-compose #赋予可运行权 sudo ln -s /usr/local/bin/docker-compose /usr/bin/docker-compose #创建软连接
windows安装docker的时候默认会安装。
查看版本:
$ docker-compose --version docker-compose version 1.20.1, build 5d8c71b2
3.开始使用--构造基于tomcat服务和mysql服务的javaweb项目
(1)准备一个JavaWeb项目,如下:
Administrator@MicroWin10-1535 MINGW64 /e/docker/dockerTest/dockertest4 $ pwd /e/docker/dockerTest/dockertest4 Administrator@MicroWin10-1535 MINGW64 /e/docker/dockerTest/dockertest4 $ ls docker-compose.yml Dockerfile ssm.war
(2)文件内容分别如下:
docker-compose.yml内容如下:
# yaml 配置 version: '2' services: #tomcat服务 tomcat: # 指定基于当前./Dockerfile 构建的镜像,这时候无需指定image,如果指定image会代替当前build指定的镜像 build: . # 指定容器名称 container_name: tomcat_web # 指定端口映射 ports: - "8080:8080" #volumes: #- "$PWD/tomcat/webapps:/usr/local/tomcat/webapps" #指定依赖的服务,会先启动依赖服务,后启动自身。停止的时候顺序相反。 depends_on: - mysql #mysql服务 mysql: # 指定镜像 image: "hub.c.163.com/library/mysql" container_name: msql_ssm ports: - "3306:3306" # 指定环境变量 environment: MYSQL_ROOT_PASSWORD: "123456" MYSQL_DATABASE: ssm # 覆盖容器启动的默认命令。 command: [ '--character-set-server=utf8mb4', '--collation-server=utf8mb4_unicode_ci' ]
该文件定义了两个服务。tomcat和mysql。
tomcat:该服务使用从当前目录下Dockerfile构建的镜像(build指定至于当前目录下Dockerfile的镜像)。端口暴露在8080。
mysql:该服务基于mysql镜像,
Dockerfile内容如下:(tomcat服务的镜像制作Dockerfile。也就是运行tomcat服务的时候会先基于下面Dockerfile构建镜像,然后启动容器)
FROM hub.c.163.com/library/tomcat MAINTAINER qlq COPY ./ssm.war /usr/local/tomcat/webapps
ssm.war是一个javaweb项目,和上一篇文章自己手动构造的Javaweb镜像一样。
(3)使用 Compose 命令构建和运行您的应用
到 /e/docker/dockerTest/dockertest4目录,也就是docker-compose.yml文件所在的目录。
docker-compose up
如果你想在后台执行该服务可以加上 -d 参数:
docker-compose up -d
(4)我们运行 docker-compose up -d 之后查看镜像和容器信息
Administrator@MicroWin10-1535 MINGW64 /e/docker/dockerTest/dockertest4 $ docker images REPOSITORY TAG IMAGE ID CREATED SIZE dockertest4_tomcat latest ace88b521179 About an hour ago 350MB hello_dockerfile latest 779eab29d6dc 4 days ago 5.59MB alpine latest e7d92cdc71fe 4 weeks ago 5.59MB ubuntu latest ccc6e87d482b 4 weeks ago 64.2MB hello-world latest fce289e99eb9 13 months ago 1.84kB hub.c.163.com/library/tomcat latest 72d2be374029 2 years ago 292MB hub.c.163.com/library/nginx latest 46102226f2fd 2 years ago 109MB hub.c.163.com/library/mysql latest 9e64176cd8a2 2 years ago 407MB Administrator@MicroWin10-1535 MINGW64 /e/docker/dockerTest/dockertest4 $ docker ps -a CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 7aa9b3cb61ee dockertest4_tomcat "catalina.sh run" About an hour ago Up 41 minutes 0.0.0.0:8080->8080/tcp tomcat_web 279551a99051 hub.c.163.com/library/mysql "docker-entrypoint.s…" About an hour ago Up 41 minutes 0.0.0.0:3306->3306/tcp msql_ssm
实际上docker compose帮我们创建了一个tomcat镜像,也就是我们Dockerfile中声明的镜像,并且启动了新建的镜像和mysql镜像。
2.Swarm
docker-swarm是解决多主机多个容器调度部署得问题。
swarm是基于docker平台实现的集群技术,他可以通过几条简单的指令快速的创建一个docker集群,接着在集群的共享网络上部署应用,最终实现分布式的服务。swarm技术相当不成熟,很多配置功能都无法实现,只能说是个半成品,目前更多的是使用Kubernetes来管理集群和调度容器。