虚拟机(VM)与容器对比(docker)
-
1.容器秒级启动,虚拟机分钟级
-
2.容器磁盘一般使用为MB,虚拟机一般为GB
-
3.容器性能接近原生,虚拟机弱于原生
-
4.系统支持量:单机支持上千个容器,单机一般支持几十个虚拟机
-
docker整体是一个CS架构
- 客户端发起命令到引擎,引擎解析命令再从docker hub(镜像仓库)上面拉取镜像
-
拉取镜像比较慢,就可以配置镜像加速器
- 可以通过阿里云的容器镜像服务里面的镜像加速器进行配置
https://cr.console.aliyun.com/cn-hangzhou/instances/mirrors
- 可以通过阿里云的容器镜像服务里面的镜像加速器进行配置
docker常用命令
-
1.查看docker运行状态
systemctl status docker
-
2.停止docker
systemctl stop docker
-
3.重启docker
systemctl restart docker
-
4.列出镜像
docker images
-
5.拉取centos镜像
docker pull centos
-
6.查看docker镜像
docker search 镜像名字
-
7.删除镜像
docker rm 镜像名称/镜像id(删除多个就直接空格后面加上就可以了)
-
8.创建一个交互式容器(创建之后就直接进去了容器,退出容器后容器就直接退出了)
docker run -i -t --name=c1 centos /bin/bash
或者docker run -it --name c1 centos /bin/bash
- -i:交互式容器
- -t:tty终端(分配一个终端,操作容器)
- -name:指定容器的名称(唯一,不能重复 )
-
9.创建一个守护式容器(后台运行且创建后不直接进入容器,且进入容器退出容器后容器不停止c3为容器名)
docker run -itd --name c3 centos /bin/bash
- 进入守护式容器
docker exec -it c3 /bin/bash
- 进入守护式容器
-
10.查看正在运行的容器
- 1.查看正在运行的容器
docker ps
- 2.查看历史容器,所有容器
docker ps -a
- 3.查看最后一次运行的容器
docker ps -l
- 1.查看正在运行的容器
-
11.停止容器
- 1.停止容器
docker stop 容器名
- 2.运行容器
docker start 容器名
- 1.停止容器
-
12.查看容器的详细信息
docker inspect 容器名(会列出一大串的json文件,包含这个容器的详细信息)
-
13.删除容器(不能删除正在运行的容器)
docker rm 容器名
- 删除所有容器
docker rm `docker ps -a -q`
- 删除所有容器
-
14.查看容器日志
docker logs 容器名称/id
-
15.文件拷贝
- 1.从宿主机拷贝到容器目录
docker cp 文件名 容器名:/root(容器目录)
- 2.从容器拷贝到宿主机
docker cp 容器名:/容器里面到文件路径+文件名 宿主机到目录
- 1.从宿主机拷贝到容器目录
-
16.容器的目录挂载(在启动容器的时候进行目录挂载)
docker run -itd --name 容器名 -v 宿主机目录:容器内目录 centos /bin/bash
-
17.查看命令的用法
docker commit --help
docker镜像制作的两种方式
-
1.使用docker commit命令
-
2.使用docker build和Dockerfile文件
-
18.使用docker commit制作镜像
docker commit 原镜像名 新镜像名
-
19.端口映射并执行容器内的脚本
docker run -itd --name=t1(容器名) -p 8888(宿主机的端口):8080(容器内的端口) 容器镜像名 /bin/bash
docker exec 容器名 /usr/local/startup.sh
-
20.镜像打包-导入镜像
- 1.镜像打包
docker save -o /root/tomcat.tar(保存的目录与镜像打包后的名字) mytomcat(本地镜像名字)
- 2.导入镜像
docker load -i /root/tomcat.tar(镜像打包后的名字)
- 1.镜像打包
-
21.容器打包
- 1.容器打包
docker export -o /root/t1.tar t1(容器名)
- 2.导入容器
docker import t1.tar(打包的容器文件) mytomcat:latest(容器名字与tag)
Dockerfile
- 使用DSL语法
1.构建命令(在rw_test目录下构建镜像)
docker build -t 镜像名字 --rm=true
- -t表示选择指定生成镜像的用户名,仓库名和tag
- –rm=true 表示指定在生成镜像过程中删除中间产生的临时容器
docker仓库
- 1.先注册docker hub的账号(https://hub.docker.com)
- 2.在里面创建一个新的仓库(Create Repository)
- 3.设置镜像标签
- local-image:tagname(本地镜像) - new-repo:tagname(仓库id:tag名称) - 4.本地登录docker hub - docker login - 5.推送镜像 ```docker push new-repo:tagname```
- 1.容器打包
docker网络管理
-
默认网络
- 查看docker网络
docker network ls
- Docker中默认的三种网络分别为bridge,host和none,其中名为bridge的网络就是默认的bridge驱动网络,也是容器创建时默认的网络管理方式,配置后可以与宿主机通信从而实现与互联网通信功能,而host和none属于无网络,容器添加这两个网络时不能与外界网络通信。
- 以上三种网络bridge,host和none都是在非集群下Docker提供的默认网络,而在Docker Swarm集群环境下,除了这三种默认网络外,Docker还提供了docker_gwbridge和ingress两种默认网络
- 查看容器使用的网络情况:
docker network inspect bridge
- 查看docker网络
-
创建一个使用自定义的isolated_nw网络(需要预先创建)的容器
- 1.创建名为isolated_nw的网络
docker network create --driver bridge isolated_nw
- 2.创建一个c3的容器并且网络为自定义网络
docker run --network=isolated_nw -itd --name=c3 busybox
- 1.创建名为isolated_nw的网络
-
为容器2新增一个自定义的isolated_nw网络连接
docker network connect isolated_nw c2
-
如果两个容器的网络不一致就不能够通信
Docker swarm集群
- 创建docker swarm
- 1.在manager1机器上创建docker swarm集群
docker swarm init --advertise-addr 192.168.200.162
(–advertise-addr将该IP地址的机器设置为集群管理节点;如果是单节点,无需该参数) - 2.查看管理节点集群信息
docker node ls
- 3.向docker swarm中添加工作节点:在两个工作节点中分别执行如下命令,ip地址是manager节点的
docker swarm join --token xxx 192.168.200.138:2377 (worker1)
docker swarm join --token xxx 192.168.200.138:2377 (worker2)
- (–token xxx:向指定集群中加入工作节点的认证信息,xxx认证信息是在创建docker swarm时产生的)
- 1.在manager1机器上创建docker swarm集群