docker
2020-10-24 23:11:01 0 举报
AI智能生成
docker
作者其他创作
大纲/内容
Web应用的自动化打包和发布
自动化测试和持续集成、发布
在服务型环境中部署和调整数据库或其他的后台应用
从头编译或者扩展现有的OpenShift或Cloud Foundry平台来搭建Paas环境
一、应用场景
Docker镜像,相当于是一个root文件系统
镜像Image
镜像与容器的关系,就像是面向对象程序设计中的类与实例一样,镜像是静态的定义,容器是镜像运行时的实体,容器可以被创建、启动、停止、删除、暂停等
容器Container
仓库可以看成一个代码控制中心,用来保存镜像
仓库Repository
Docker客户端通过命令行或者其他工具使用Docker SDK与Docker的守护进程通信
客户端Client
一个物理或者虚拟的机器用于执行Doker守护进程和容器
主机Host
Docker Machine是一个简化Docker安装的命令行工具,通过一个简单的命令行即可在相应的平台上安装Docker
Docker Machine
Docker使用客户端与服务器(C/S)架构模式,使用远程API来管理和创建Docker容器,Docker容器通过Docker镜像来创建
二、基本概念
$ sudo yum remove docker docker-client docker-client-latest docker-common docker-latest docker-latest-logrotate docker-logrotate docker-engine
1、卸载旧版本
$ sudo yum install -y yum-utils device-mapper-persistent-data lvm2
安装所需软件包
$ sudo yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
设置稳定仓库
2、设置
$ sudo yum install -y docker-ce docker-ce-cli containerd.io
最新版本
$ yum list docker-ce --showduplicates | sort -r
列出可用版本
$ sudo yum install docker-ce-<VERSION_STRING> docker-ce-cli-<VERSION_STRING> containerd.io
安装特定版本
3、安装版本
$ sudo systemctl start docker
$ sudo service docker start
4、启动
$ sudo docker run hello-world
5、验证
$ sudo usermod -aG docker $USER
6、Docker需要用户具有sudo权限,为了避免每次命令都输入sudo,可以把用户加入Docker用户组
systemctl enable docker
7、设置docker开机自启动如下
CentOS Docker安装
三、安装
$ docker run ubuntu:15.10 /bin/echo \"Hello world\"
docker:Docker的二进制执行文件
run:与docker组合来运行一个容器
ubuntu:15.10:指定要运行的镜像,Docker首先从本地主机上查找镜像是否存在,如果不存在,Docker就从Hub下载公共镜像
/bin/echo \"Hello world\":在启动的容器里执行的命令
参数解析
1、Hello World
$ docker run -i -t ubuntu:15.10 /bin/bash
-t : 在新容器内指定一个伪终端或终端
-i: 允许对容器内的标准输入进行交互
使用exit命令或者CTRL+D来退出容器
2、运行交互式的容器
$ docker run -d ubuntu:15.10 /bin/sh -c \"while true; do echo hello world; sleep 1; done\"
$ docker psCONTAINER ID IMAGE COMMAND ... 5917eac21c36 ubuntu:15.10 \"/bin/sh -c 'while t…\" ...
CONTAINER ID: 容器 ID
IMAGE: 使用的镜像
COMMAND: 启动容器时运行的命令
CREATED: 容器的创建时间
created(已创建)
restarting(重启中)
running(运行中)
removing(迁移中)
paused(暂停)
exited(停止)
dead(死亡)
STATUS: 容器状态
PORTS: 容器的端口信息和使用的连接类型(tcp\\udp)
NAMES: 自动分配的容器名称
查看容器是否运行
$ docker logs 2b1b7a428627
查看容器内的标准输出
3、启动容器(后台模式)
$ docker stop 7a428627
4、停止容器
Hello World
image文件生成的容器实例,本身也是一个文件,称为容器文件。也就是说,一旦容器生成,就会同时存在两个文件:image文件和容器文件。而且关闭容器并不会删除容器文件,只是容器停止运行而已
简介
通过命令 docker command --help 更深入的了解指定的 Docker 命令使用方法
# docker stats --help
Docker客户端
$ docker pull ubuntu
获取镜像
从image文件,生成一个正在运行的容器实例
$ docker run -it ubuntu /bin/bash
-p参数:容器的 3000 端口映射到本机的 8000 端口
-it参数:容器的 Shell 映射到当前的 Shell,然后你在本机窗口输入的命令,就会传入容器
koa-demo:0.0.1:image 文件的名字(如果有标签,还需要提供标签,默认是 latest 标签)
/bin/bash:容器启动以后,内部第一个执行的命令。这里是启动 Bash,保证用户可以使用 Shell
$ docker container run -p 8000:3000 -it koa-demo:0.0.1 /bin/bash
run命令是新建容器,每运行一次,就会新建一个容器。同样的命令运行两次,就会生成两个一模一样的容器文件
希望重复使用容器,就要使用docker container start命令,它用来启动已经生成、已经停止运行的容器文件
$ docker container start [containerID]
启动容器
$ docker ps -a
查看所有的容器
$ docker container logs [containerID]
查看 docker 容器的输出
$ docker run -itd --name ubuntu-test ubuntu /bin/bash
-d :指定容器的运行模式
-name : 设置容器名
后台运行
$ docker container cp [containID]:[/path/to/file]
从正在运行的 Docker 容器里面,将文件拷贝到本机
找到IPAddress字段即可
$ docker container inspect 容器名
查看容器的IP地址
$ docker stop <容器 ID>
停止容器
注:从容器退出,会导致容器的停止
docker attach 1e560fca3906
推荐使用,退出容器不会导致容器的停止
docker exec -it 243c32535da7 /bin/bash
进入容器
$ docker export 1e560fca3906 > ubuntu.tar
容器 1e560fca3906 快照到本地文件 ubuntu.tar
导出容器
$ cat docker/ubuntu.tar | docker import - test/ubuntu:v1
快照文件 ubuntu.tar 导入到镜像 test/ubuntu:v1
导入容器
导入和导出容器
$ docker rm -f 1e560fca3906
删除容器
$ docker rm -f $(docker ps -a -q)
批量删除容器
容器使用
Docker把应用程序及其依赖,打包在image文件里面,只有通过这个文件,才能生成Docker容器。image文件可以看作是容器的模板。Docker根据image文件生成容器的实例。同一个image文件,可以生成多个同时运行的容器实例
image是二进制文件,一个image文件往往通过继承另一个image文件,加上一些个性设置而生成。
为了方便共享,image文件制作完成后,可以上传到网上的仓库
管理和使用本地Docker主机镜像
创建镜像
目的
$ docker images
REPOSITORY:表示镜像的仓库源
TAG:镜像的标签
IMAGE ID:镜像ID
CREATED:镜像创建时间
SIZE:镜像大小
参数说明
列出镜像列表
$ docker pull ubuntu:13.10
docker image pull : 抓取 image 文件的命令
library/hello-world : image 文件在仓库里面的位置
library : image 文件所在的组
hello-world : image 文件的名字
$ docker image pull library/hello-world
获取新镜像
Docker Hub 网址为: https://hub.docker.com/
$ docker search httpd
NAME: 镜像仓库源的名称
DESCRIPTION: 镜像的描述
OFFICIAL: 是否 docker 官方发布
stars: 类似 Github 里面的 star
AUTOMATED: 自动构建
查找镜像
从已经创建的容器中更新镜像,并且提交这个镜像
使用 Dockerfile 指令来创建一个新的镜像
二种方式对镜像进行更改
$ docker run -t -i ubuntu:15.10 /bin/bash
1、更新镜像之前,需要使用镜像来创建一个容器
2、在运行的容器内使用 apt-get update 命令进行更新,完成操作之后,输入 exit 命令来退出容器
$ docker commit -m=\"has update\" -a=\"runoob\" e218edb10161 runoob/ubuntu:v2
3、通过命令 docker commit 来提交容器副本
-m: 提交的描述信息
-a: 指定镜像作者
e218edb10161:容器 ID
runoob/ubuntu:v2: 指定要创建的目标镜像名
更新镜像
使用命令 docker build , 从零开始来创建一个新的镜像。需要创建一个 Dockerfile 文件,其中包含一组指令来告诉Docker 如何构建镜像,每一个指令都会在镜像上创建一个新的层,每一个指令的前缀都必须是大写
-t :指定要创建的目标镜像名
. :Dockerfile 文件所在目录,可以指定Dockerfile 的绝对路径
$ docker build -t runoob/centos:6.7 .
Dockerfile见下
构建镜像
$ docker tag 860c279d2fec runoob/centos:dev
docker tag 镜像ID(860c279d2fec)用户名称/镜像源名(repository name)/新的标签名(tag)
设置镜像标签
$ docker rmi hello-world
删除镜像
docker rmi -f $(docker images -a -q)
批量删除镜像
镜像使用
容器中运行网络应用,能让外部可以访问应用,通过-P或者-p参数指定端口映射
$ docker run -d -P training/webapp python app.py
$ docker run -d -p 5000:5000 training/webapp python app.py
-P :是容器内部端口随机映射到主机的高端口
-p : 是容器内部端口绑定到指定的主机端口
区别
网络端口映射
$ docker port adoring_stonebraker 5000
查看端口绑定
端口映射并不是唯一把 docker 连接到另一个容器的方法docker 有一个连接系统允许将多个容器连接在一起,共享连接信息docker 连接会创建一个父子关系,其中父容器可以看到子容器的信息
$ docker run -d -P --name runoob training/webapp python app.py
--name 标识来命名容器
容器命名
$ docker network create -d bridge test-net
-d:参数指定 Docker 网络类型,有 bridge、overlay。
新建网络
运行一个容器并连接到新建的 test-net 网络
$ docker run -itd --name test1 --network test-net ubuntu /bin/bash
打开新的终端,再运行一个容器并加入到 test-net 网络
$ docker run -itd --name test2 --network test-net ubuntu /bin/bash
ping 来证明 test1 容器和 test2 容器建立了互联关系
如果 test1、test2 容器内中无 ping 命令,则在容器内执行以下命令安装 ping(即学即用:可以在一个容器里安装好,提交容器到镜像,在以新的镜像重新运行以上俩个容器)
apt-get updateapt install iputils-ping
连接容器
容器互联
容器连接
Dockerfile是一个用来构建镜像文件的文本文件,文本内容包含了一条条构建镜像所需的指令和说明
Dockerfile文件,它是一个文本文件,用来配置image,Docker根据该文件生成二进制的image文件
FROM <image> [AS <name>] 指定从一个镜像构建起一个新的镜像名字
FROM <image>[:<tag>] [AS <name>] 指定镜像的版本 Tag
示例:FROM mysql:5.0 AS database
FROM:定制的镜像都是基于 FROM 的镜像
MAINTAINER <name>
示例:MAINTAINER taotao 1769974308@qq.com
MAINTAINER:镜像创建者
ENV <key> <value> 一次设置一个环境变量
ENV <key>=<value> <key>=<value> <key>=<value> 设置多个环境变量
示例:ENV JAVA_HOME /usr/java1.8/
ENV:声明环境变量
RUN <command>
示例:RUN [\"executable\
RUN:用于执行后面跟着的命令行命令
ADD <src> <dest>
ADD *.js /app 添加 js 文件到容器中的 app 目录下
ADD:将本地的文件添加复制到容器中去,压缩包会解压,可以访问网络上的文件,会自动下载
COPY [--chown=<user>:<group>] <源路径1>... <目标路径>
源路径:源文件或者源目录
目标路径:容器内的指定路径
WORKDIR <path>
示例:WORKDIR /app/test
WORKDIR:工作目录
EXPOSE <port>
示例:EXPOSE 80
容器运行时,需要用 -p 映射外部端口才能访问到容器内的端口
EXPOSE:暴露对外的端口(容器内部程序的端口,虽然会和宿主机的一样,但是其实是两个端口)
CMD:容器启动后所执行的程序,如果执行 docker run 后面跟启动命令会被覆盖掉
ENTRYPOINT:与 CMD 功能相同,但需 docker run 不会覆盖,如果需要覆盖可增加参数 -entrypoint 来覆盖
VOLUME [\"/var/log\
VOLUME /var/data var/log 指定容器中的 var/log 目录挂载到宿主机上的 /var/data 目录,这种形式可以手动指定宿主机上的目录
VOLUME: 指定数据持久化的目录,官方语言叫做挂载,将宿主机的目录映射到容器中的目录
LABEL <key>=<value> <key>=<value> ...
示例:LABEL version=\"1.0\" description=\"这是一个web应用\"
LABEL:为镜像添加元数据,key-value 形式
ARG <name>[=<value>]
ARG name=sss
ARG:设置构建镜像需要传递的参数
$ docker build -t nginx:test .
-t:镜像命名
. :是基于当前目录的Dockerfile文件所在的路径来构建镜像
构建镜像:在Dockerfile文件的存放目录下,执行构建动作
Dockerfile
容器运行成功后,就确认了image文件的有效性,可以把image文件分享,让其他人使用
$ docker login
首先,去hub.docker.com或cloud.docker.com注册一个账户,然后,用命令登录
$ docker image tag [imageName] [username]/[repository]:[tag]
$ docker image tag koa-demos:0.0.1 ruanyf/koa-demos:0.0.1
接着,为本地的image标注用户名和版本
$ docker image push [username]/[repository]:[tag]
发布image文件
1、使用Dockerfile定义应用程序的环境
2、使用docker-compose.yml定义构成应用程序的服务,它们可以在隔离环境中一起运行
3、最后,执行docker-compose up命令来启动并运行整个应用程序
步骤
发行版本地址:https://github.com/docker/compose/releases
下载稳定版本:$ 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
测试:$ docker-compose --version
安装
docker-compose -f xxx.yaml up
创建并启动配置的容器
docker-compose -f xxx.yaml up 服务名1 服务名2
指定服务名称来启动
docker-compose -f xxx.yaml up -d
后台全部启动
docker-compose up build
build dockerfile更新,重新构建,生成新的镜像
docker-compose -f xxx.yaml down
停止并删除容器、网络、数据卷
docker-compose -f xxx.yaml stop 服务名
docker-compose -f xxx.yaml start 服务名
docker-compose -f xxx.yaml restart 服务名
启动、停止、重启服务
docker-compose -f xxx.yaml ps
列出所有容器
docker-compsoe -f xxx.yaml pull
拉取服务依赖镜像
docker-compose scale web=3 db=2
设置指定服务运行的容器个数。通过 service=num 的参数来设置数量
命令
指定本yml依从的compose哪个版本制定的
version
context:上下文路径
dockerfile:指定构建镜像的Dockerfile文件名
args: 添加构建参数,只能在构建过程中访问的环境变量
labels: 设置构建镜像的标签
target : 多层构建,可以指定构建那一层
指定为构建镜像上下文路径
对于每个服务,build告诉docker-compose怎么为每个服务构建镜像
build
覆盖容器启动的默认命令
command
指定自定义容器名称,而不是生成的默认名称
container_name
version: \"3.7\"services: web: build: . depends_on: - db - redis redis: image: redis db: image: postgres
设置依赖关系
depends_on
从文件添加环境变量,可以是单个值或列表的多个值
单个值 :env_file: .env
env_file: - ./common.env - ./apps/web.env - /opt/secrets.env
列表格式:
env_file
添加环境变量,可以使用数组或字典。布尔值,布尔值需要用引号引起来,以确保yml解析器不会将其转换为True或False
environment
expose: 暴露端口,但不映射到宿主机,只被连接的服务访问
暴露端口,映射到宿主机
expose与ports控制服务与network bridge、宿主机交互的方式
ports
extra_hosts: - \"somehost:162.242.195.82\" - \"otherhost:50.31.209.229\"
以上会在此服务的内部容器中 /etc/hosts 创建一个具有 ip 地址和主机名的映射关系:162.242.195.82 somehost50.31.209.229 otherhost
添加主机名映射
指令用于主机名映射,定义宿主机在容器内别名,类比与在我们的电脑上hosts文件中增加一行主机名映射关系
extra_hosts :
指定容器运行的镜像
image
服务的日志记录配置
logging
设置网络模式
network_mode
no : 是默认的重启策略,在任何情况下都不会重启容器
always : 容器总是重新启动
on-failure : 在容器非正常退出时,退出状态非0,才会重启容器
unless-stopped : 在容器退出时总是重启容器,但是不考虑在docker守护进程启动时就已经停止了的容器
restart
存储敏感数据
secrets
volumes: - type: bind source: /mnt/eqidmanager/eqidlogs target: /app/eqidlogs
例如
type
source
target
将主机的数据卷或者文件挂载到容器里
使用volumes来映射 宿主机路径到容器内路径,注意容器挂在的源目录必须使用绝对路径
volumes
使用links可以将其他容器的IP记录到该容器中,再通过连接 服务名:端口 可以访问
# 可以以database为域名访问服务名称为db的容器links: - db: database
连接其他容器的服务(SERVICE:ALIAS)
表明链接另外的容器,意味着启动的时会去启动db服务
links
healthcheck
yml配置指令参考
Compose
Swarm是Docker官方提供的一款集群管理工具,其主要作用是把若干台Docker主机抽象为一个整体,并且通过一个入口管理这些Docker主机上的各种Docker资源,swarm集群提供给用户管理集群内所有容器的操作接口与使用一台Docker主机基本相同
master-slave架构,需要通过服务发现来选举出管理节点,其他各个节点通过运行agent来接受管理节点的统一管理
V1
是自动通过Raft协议分布式选举出管理节点,不需要配置发现服务,从而避免发现服务的单点故障问题,且它自带了DNS负载均衡和对外负载均衡机制的支持
V2
版本
使用swarmkit嵌入docker engine中的集群管理和编排功能,docker容器初始化启动的一种模式
Swarm
节点,是一个已加入到Docker swarm集群中的一个容器实例
Node
服务主要是在工作节点上执行任务,创建服务时,需要指定容器的镜像
Service
任务是在容器中执行的命令
Task
概念
节点
服务、任务、容器
任务与调度
服务副本与全局服务
工作方式
Random
在同等条件下,spread策略会选择运行容器最少的那台节点来运行新的容器,binpack策略会选择运行容器最集中的那台机器来运行新的节点,使用spread策略会使得容器会均衡的分布在集群中的各个节点上运行,一旦一个节点挂掉了只会损失少部分的容器
Spread
最大化的为避免容器碎片化,就是说Binpack策略尽可能的把还未使用的节点留给需要更大空间的容器运行,尽可能的把容器运行在一个节点上面
Binpack
调度策略
建立容器之前先创建一个overlay的网络,用来保证在不同主机上的容器网络互通的网络模式
批量创建服务
当容器副本中的其中某一个或某几个节点宕机后,cluster会根据自己的服务注册发现机制,在集群中剩下的空闲节点上,重新拉起容器副本,无需人工干预
强大的集群的容错性
通过scale参数即可复制出新的副本出来,扩展出来的容器副本都run在原来的节点下面,若需要在每台节点上都run一个相同的副本,只需要将“-replicas n”更换成“-mode=global”
服务节点的可扩展性
主要功能是Cluster的server端去选择在那个服务器节点上创建并启动一个容器实例的动作,它是由一个装箱算法和过滤器组合而成,每次通过过滤器(constraint)启动容器时,swarm cluster都会调用调度机制筛选出匹配约束条件的服务器,并在上面运行容器
调度机制
Cluster模式的特性
init : 初始化集群
join : 将节点加入集群
join-token : 管理加入令牌
leave : 从集群中删除某个节点,强制删除加参数 --force
update : 更新集群
unlock : 解锁集群
docker swarm:集群管理
demote : 将集群中一个或多个节点降级
inspect : 显示一个或多个节点的详细信息
ls : 列出集群中的节点
promote : 将一个或多个节点提升为管理节点
rm : 从集群中删除停止的节点,--force强制删除参数
ps : 列出一个或多个节点上运行的任务
update : 更新节点
docker node:节点管理
create : 创建一个新的服务
inspect : 列出一个或多个服务的详细信息
ps : 列出一个或者多个服务中的任务信息
ls : 列出服务
rm : 删除一个或多个服务
scale : 扩展一个或多个服务
update : 更新服务
docker service: 服务管理
试验特性,用于多应用部署
docker stack/deploy
命令行说明
查看:$ docker volume ls
删除:$ docker volume prune
查看指定容器挂载信息 : $docker inspect redis-master | grep Mounts -A 10
volume
$docker pull registry
一、下载镜像registry
$docker run -itd -v /mydata/registry:/var/lib/registry -p 5000:5000 --restart=always --name registry registry:latest
-itd: 在容器中打开一个伪终端进行交互操作,并在后台运行
-v : 把宿主机的/mydata/registry目录绑定到 容器/var/lib/registry目录(容器中存放镜像文件的目录),来实现数据的持久化
-p : 映射端口,访问宿主机的5000端口就可以访问registry容器的服务
--restart=always : 重启策略
--name registry : 创建容器命名为registry
registry:latest : pull下来的镜像
二、运行registry容器
$ curl http://127.0.0.1:5000/v2/_catalog
三、测试镜像仓库
vim /etc/docker/daemon.json
{ \"registry-mirrors\": [ \"https://registry.docker-cn.com\
如果遇到镜像下载不下来,添加上registry-mirrors键值
Docker支持http上传镜像,添加上insecure-registries
四、更新docker daemon.json
$ docker pull busybox
五、下载测试镜像文件
docker tag busybox:latest 192.168.10.77:5000/busybox:v1
六、为镜像打标签
$ docker push 192.168.10.77:5000/busybox:v1
七、上传到镜像仓库服务器
$ docker rmi -f $(docker images -aq)
$ docker pull 192.168.10.77:5000/busybox:v1
八、测试从仓库下载镜像
http://192.168.10.77:5000/v2/_catalog
{ repositories: [ \"busybox\" ]}
九、列出所有镜像
http://192.168.10.77:5000/v2/busybox/tags/list
{ name: \"busybox\
十、列出镜像tag
vi /usr/lib/systemd/system/docker.service
修改的部分:ExecStart=/usr/bin/dockerd -H fd:// --containerd=/run/containerd/containerd.sock修改后的部分:ExecStart=/usr/bin/dockerd -H tcp://0.0.0.0:2375 -H unix://var/run/docker.sock
编辑修改docker.service文件
systemctl stop dockersystemctl start docker
重新启动Docker服务
firewall-cmd --zone=public --add-port=2375/tcp --permanentfirewall-cmd --reload
开启防火墙的Docker构建端口
十一、Docker开启远程API
registry
<plugin> <groupId>com.spotify</groupId> <artifactId>docker-maven-plugin</artifactId> <version>1.1.0</version> <executions> <execution> <id>build-image</id> <phase>package</phase> <goals> <goal>build</goal> </goals> </execution> </executions> <configuration> <imageName>mall/${project.artifactId}:${project.version}</imageName> <dockerHost>http://192.168.10.77:2375</dockerHost> <baseImage>java:8</baseImage> <entryPoint>[\"java\
executions.execution.phase:此处配置在maven打包应用时构建docker镜像
imageName: 用于指定镜像名称,mall是仓库名称,${project.artifactid}为镜像名称,${project.version}为镜像版本号
dockerHost:打包后上传到的docker服务器地址
baseImage:该应用所依赖的基础的基础镜像
entryPoint: docker容器启动时执行的命令
resources.resource.targetPath: 将打包后的资源文件复制到该目录
resources.resource.directory:需要复制的文件所在目录,maven打包的应用jar包保存在target目录下面
resources.resource.include :需要复制的文件,打包好的应用jar包
配置说明
在应用的pom.xml文件中添加docker-maven-plugin的依赖
注意:依赖的基础镜像需要先下载,否则会出现构建镜像超时情况,比如本地没有java8的镜像,先把镜像pull下来,再用maveen插件进行构建
使用Maven插件构建Docker镜像
四、使用
docker network ls
查看网络
network_id可以通过命令:docker network ls查看
docker inspect [network_id]
查看宿主机在网桥上的映射IP
host模式
host模式:使用--net=host指定
container模式
container模式:使用--net=container:NAMEorID指定
none模式:不同于前两种,Docker容器有自己的Network Namespace,但是,Docker容器没有任何网络配置,需要手动添加网卡,配置ip
none模式:使用--net=none指定
默认的网络配置,此模式为每一个容器分配Network Namespace,并将一个主机上的Docker容器连接到一个虚拟网桥上
bridge模式
bridge模式:使用--net=bridge指定,默认配置
Docker通过使用linux桥接提供容器之间的通信,Docker的网络模式分为四种
查看网络中的容器
docker inspect rmqconsole
docker inspect 容器名
查看容器详情信息
可以看出在rmqconsole容器中可以通过网络别名与之通信
通过网络别名与其他容器通信
docker network connect --alias c1-alias test-net c1
使用docker network connect来使容器加入指定网络,通过--alias来指定该容器在指定网络中的别名
以connect的方式来指定网络别名
五、网络模式
数据卷
数据卷容器
Docker管理数据的方式有两种
数据卷可以在容器间共享和重用
数据卷数据改变是直接修改的
数据卷数据改变不会被包括在容器中
数据卷是持续性的,直到没有容器使用它们
是一个或多个容器专门指定绕过union file system的目录,为持续性或共享数据提供一些有用的功能
直接将数据目录挂载到容器/data目录
-v /data
将物理机目录挂载到容器目录
-v src:dst
使用其它容器的目录
--volumes-from
六、数据存储
指通过软件模拟的具有完整硬件系统功能的、运行在一个完全隔离环境中的完整计算机系统,在实体计算机中能够完成的工作在虚拟机中都能够实现
虚拟机
将操作系统层虚拟化,是一个标准的软件单元
随处运行:容器可以将代码与配置文件和相关依赖库进行打包,从而确保在任何环境下的运行都是一致的
高资源利用率:容器提供进程级的隔离,因此可以更加精细地设置CPU和内存的使用率,进而更好地利用服务器的计算资源
快速扩展:每个容器都可作为单独的进程运行,并且可以共享底层操作系统的系统资源
容器
隔离级别:操作系统级
隔离策略:Hypervisor(虚拟机监控器)
系统资源:5-15%
启动时间:分钟级
镜像存储:GB-TB
集群规模:上百
高可用策略:备份、容灾、迁移
隔离级别:进程
隔离策略:Cgroups(控制组群)
系统资源:0-5%
启动时间:秒级
镜像存储:KB-MB
集群规模:上万
高可用策略:弹性、负载、动态
区别与联系
虚拟机与容器
docker
0 条评论
下一页
为你推荐
查看更多