最近准备在组内施行持续集成,自然花了较多时间学习Docker的相关知识。
接下来几篇文章会重点放在Docker相关的经验方面。
我们在使用Docker过程中最经常使用的就是利用Docker来跑几个镜像,这样就不需要在机器上安装特定的服务了。
例如跑个nginx、跑个redis、mysql啥的。最大的好处是我们可以与实体机器或者虚拟机隔离的跑任意版本,且机器上不需要安装具体服务。
1 | docker run --name my-redis -p 6379:6379 -d redis |
上面的docker run
命令是利用特定的镜像启动一个容器,来提供服务。
还有一种方式是使用服务的方式:docker service create ...
那这两种方式有什么区别呢?
简而言之: Docker service
主要用于使用Docker swarm
配置主节点,以便docker容器可以在分布式环境中运行,并且可以轻松管理。
Docker run:
docker run
命令首先在指定的镜像上创建一个可写容器,然后使用指定的命令启动它。
也就是说,docker run
相当于API的先create 然后 start: / containers / create then / containers /(id)/ start
来源:https://docs.docker.com/engine/reference/commandline/run/#parent-command
Docker service:
Docker service
: 将一些较大应用程序环境中微服务的镜像。服务可能包括HTTP服务器,数据库或您希望在分布式环境中运行的任何其他类型的可执行程序。
创建服务时,您可以指定要使用的容器映像以及在运行容器中执行的命令。您还可以定义服务选项,包括:
群集将在群组外部提供服务的端口: ports
服务的覆盖网络,以连接到群中的其他服务: networks
CPU和内存限制和预留: resources. limits. cpus. memory
滚动更新政策
要在群中运行的镜像的副本数 :replicas
来源:https://docs.docker.com/engine/swarm/how-swarm-mode-works/services/#services-tasks-and-containers
docker service 还可以使用 docker stack deploy 来方便的部署,结合docker-compose.yml文件,可以方便的管理整个程序的依赖。
例如下面的docker-compose.yml
文件
1 | version: "3" |
当我们在目录下使用docker stack deploy -c docker-compose.yml demo-stack
命令时,可以启动两个服务:分别是
1 | ID NAME MODE REPLICAS IMAGE PORTS |