一直对docker很感兴趣,今天按照官网的Guides学习一个。
安装
我的机器是腾讯云1元学生主机,centos,香港节点,还能当梯子,美滋滋。安装就不多说了,按官网来就行了,直接Get Started。
Get Started
part 1
这一节讲起源,主要是docker和传统虚拟机的区别,我的理解是传统虚拟机完整的模拟出一个操作系统,每个虚拟机都有一个系统,通过一个hypervisor来管理。而docker利用Linux namespace,cgroup等技术,共享一个内核。
part 2
这一节讲容器(Containers)。
Dockerfile
dockerfile定义了一个容器里有什么东西,直接复制官网的就好。
然后写一个python文件,一个依赖文件。
docker build -t friendlyhello .
docker build创建一个镜像 -t选项用来命名。
docker run -p 4000:80 friendlyhello
这样一个容器就跑起来了,本地4000端口对应容器80端口。
常用命令
docker build -t friendlyname . # 根据Dockerfile创建镜像
docker run -p 4000:80 friendlyname #运行"friendlyname"端口映射4000到80
docker run -d -p 4000:80 friendlyname #后台运行
docker container ls # 列出所有容器
docker container ls -a # 列出所有容器,包括不在运行的
docker container stop <hash> #终止某个容器
docker container kill <hash> # 强制停止某个容器
docker container rm <hash> # 删除某个容器
docker container rm $(docker container ls -a -q) #删除所有容器
docker image ls -a # 列出所有镜像
docker image rm <image id> # 删除某个镜像
docker image rm $(docker image ls -a -q) # 删除所有镜像
docker login # 登录docker账号
docker tag <image> username/repository:tag #给要上传的镜像打标签
docker push username/repository:tag # 上传镜像到仓库
docker run username/repository:tag # 运行仓库的镜像
part 3
这一节讲服务(Services)。
首先要装一个Docker Compose,这个是用来跑多个容器的,通过写一个YAML文件来配置一个多容器的服务。一个服务只跑一个镜像,可以有多个容器。复制它的docker-compose.yml文件。
docker stack deploy -c docker-compose.yml getstartedlab
这样就运行了一个服务,由5个容器组成,自动负载均衡。
这一节还有几个名词
stack:stack是一组可以一起管理的相互关联的服务。
task:服务中运行的单个容器叫task。
常用命令
docker stack ls # 列出stack
docker stack deploy -c <composefile> <appname> # 运行Composefile
docker service ls # 列出正在运行的services
docker service ps <service> # 列出stack中的task
docker inspect <task or container> # 查看container信息
docker container ls -q # 列出container的id
docker stack rm <appname> # 销毁stack
docker swarm leave --force # 离开swarm集群
part 4
这一节介绍swarm集群,swarm是一组运行docker的机器,机器可以使虚拟机或物理机。
docker-machine:docker-machine命令可以创建虚拟机并安装docker。
这个命令需要virtualbox,由于云主机已经是虚拟化的东西了,这个命令跑不起来。
docker swarm init创建集群并成为管理节点,docker swarm join 加入集群。
docker-machine create --driver virtualbox myvm1 # 创建一个虚拟机(Mac, Win7, Linux)
docker-machine env myvm1 #查看节点的基本信息
docker-machine ssh myvm1 "docker node ls" #列出swarm节点
docker-machine ssh myvm1 "docker node inspect <node ID>" # 查看某个节点
docker-machine ssh myvm1 "docker swarm join-token -q worker" # 查看token
docker-machine ssh myvm1 # ssh到虚拟机
docker node ls # 列出swarm节点
docker-machine ssh myvm2 "docker swarm leave" # worker节点离开swarm集群
docker-machine ssh myvm1 "docker swarm leave -f" # master节点离开集群,
docker-machine ls # 列出虚拟机
docker-machine start myvm1 # 启动虚拟机
docker-machine env myvm1 # 查看环境变量
eval $(docker-machine env myvm1) # 连接虚拟机shell
docker stack deploy -c <file> <app> # 部署app
docker-machine ssh myvm1 "docker stack deploy -c <file> <app>" #ssh部署
eval $(docker-machine env -u) # 断开虚拟机的shell
docker-machine stop $(docker-machine ls -q) # 停止所有虚拟机
docker-machine rm $(docker-machine ls -q) # 删除所有虚拟机