docker进阶

网络管理:

容器中的环境与宿主机隔离,那么此时容器内如何与外部进行网络通信就有了些小问题,我们可以通过以下一些命令来查看 Docker 容器的网络状况,Docker 也为我们提供了一些简单的配置来将宿主机的端口与容器内的端口实现映射

对容器的网络访问配置映射:

随机映射:

docker run -P -d --rm redis:3.2

-P 会将容器中暴露的端口随机映射到宿主机的某一个端口上

-d 后台运行

--rm 容器停止会自动删除容器

指定映射:
示例:

docker run -p 6379:6379 -d --rm redis:3.2

  -p hostPort : containerPort 示例:docker run -p 6379:6379 -d --rm redis

  -p ip:hostPort : containerPort 示例:docker run -p 127.0.0.1:6380:6379 -d --rm redis

  -p ip: : containerPort 示例:docker run -p ::6379 -d --rm redis #随机映射端
口
  -p 参数可以指定多次, 如: -p 91:80 -p 92:443.....

===========================================================

数据卷(volume):

问题:

不能在宿主机上很方便地访问容器中的文件。

无法在多个容器之间共享数据。

当容器删除时,容器中产生的数据将丢失。

在Docker的使用过程中往往需要对数据进行持久化,或者需要在多个容器之间进行数据共享,所以这就涉及到Docker容器的数据操作。

容器中数据管理主要有两种方式:数据卷和数据卷容器。

数据卷(Data Volumes) 容器内数据直接映射到本地宿主机。

数据卷容器(Data Volume Containers) 使用特定容器维护数据卷。

数据卷的特性:

数据卷是一个特殊的目录,它将主机目录直接映射进容器。可供一个或多个容器使用。

数据卷设计的目的就是为了数据的持久化,它完全独立与容器的生命周期。因此,容器删除时,不会删除其挂载的数据卷,也不会存在类似的垃圾机制对容器存在的数据卷进行处理。

数据卷在容器启动时初始化,如果容器使用的镜像在挂载点包含了数据,这些数据会拷贝到新初始化的数据卷中

数据卷可以在容器之间共享和重用

可以对数据卷里的内容直接修改,修改回马上生效,无论是容器内操作还是本地操作

对数据卷的更新不会影响镜像的更新

数据卷会一直存在,即使挂载数据卷的容器已经被删除

绕过 docker 的 vfs, 直接将数据存储在物理机中

命令:

-v src : dest #将src目录映射到容器中dest目录(容器中如果不存在dest会自动创建该目录)
示例:

  # 启动容器, 并指定容器名字

  # -h 表示指定主机名

  docker run -it --name volume-test1 -h centos -v /data centos

  # 查看容器的 volume 映射在物理机的什么位置

  # 老版本应使用 -f '{{.Volumes}}'

  # 该物理目录会与容器内挂载的目录共享

  docker inspect -f '{{index .Mounts 0}}' volume-test1

  # 指定映射目录

  # -v /opt:/opt 表示将物理机的 /opt 目录映射到 容器中的 /opt 目录

  # -v /opt:/opt:ro 表示该目录在容器内只读, 不能写

  docker run -it --name volume-test2 -h centos -v /opt:/opt centos

redis 示例: ()

创建宿主机目录/var/redis/data 用来存放redis持久化数据

创建宿主机目录/etc/redis:/etc/redis 用来存放redis配置文件redis.conf (需要手动拷贝配置文件到此目录并修改dump文件存放目录)

挂在数据卷并启动容器


  docker run -d -p 6379:6379 \

  -v /data:/data \

  redis \

  redis-server /data/redis.conf

ps:使用redis请务必将redis.conf 中bind 修改为0.0.0.0, 如果使用127.0.0.1使用redis服务会报错

如果启动报错permission xxx 请更改文件访问权限

用法:

将代码存放到指定目录. 如 /data/code, /data/logs, /data/conf 用来统一管理每一个环境的代码, 日志, 配置等, 那么此时将所有容器构建好, 在每个环境下面启动容器时按照此规则映射即可. 若要跑多种版本的业务, 又可以以 code 目录再去细分某些业务, 当然这只是一种解决方案, 可以根据这种思路进行拓展.

数据卷容器:

数据卷容器专门用于存储数据的容器, 那么其他容器就不需要去挂载了, 都可以从这个专门的数据卷容器中读取数据. 无论数据卷容器有没有启动, 其它容器都可以通过它读取数据.

命令:

  --volumes-from ContainerId

示例:

  # 为当前新启动的容器设置数据卷容器

  docker run -it --name volume-test3 --volumes-from volume-test2 centos

===========================================================
  镜像的构建方式:


image.png

手动构建(纯手动):

1. 基于 centos 的官方镜像在容器内写一个输出 build myImage... 的脚本, 脚本名hello.sh

2. 将该容器构建为基础镜像
命令: docker commit -m
示例:

  # 打包镜像

  docker commit -m "我的镜像" e288e2b6b65f sky/myImage:v1

1.我的镜像为镜像描述信息

2.e288e2b6b65f 基础容器id

3 sky/myimage:tag 为镜像名:一般命名格式为:用户名/镜像名 , v1为tag,也就是版本号

# 以该镜像启动容器

  docker run --rm sky/myImage:v1 hello.sh

自动构建(Dockerfile):

● 基础镜像信息

● 维护者信息

● 镜像操作指令

● 容器启动时执行指令

构建:

1. 创建专门管理 Dockerfile 的文件夹

2. 创建文件 Dockerfile(名字必须按照该风格)

3. 基础镜像所需的配置

a. FROM base_image 基础镜像

b. MAINTAINER author 维护者信息

c. RUN command 运行指定命令

d. ADD file to_path 拷贝主机文件到容器中,如果是压缩文件会自动解压

e. WORKDIR path 实际上就是 cd 到指定目录

f. VOLUME ["path"] 数据挂载

g. EXPOSE port 暴露端口

h. ENV key value 创建环境变量

i. CMD command 执行命令

4. 构建镜像

命令:

  docker build -t repoName:tag dockerfile_path

示例:

  docker build -t nginx-file:v1 .

===========================================================

restart 容器的重启策略:

no:默认策略,在容器退出时不重启容器

on-failure:在容器非正常退出时(退出状态非0),才会重启容器

on-failure:3:在容器非正常退出时重启容器,最多重启3次

always:在容器退出时总是重启容器

unless-stopped:在容器退出时总是重启容器,但是不考虑在Docker守护进程启动时就已经停止了的容器

3. 常用命令

  docker-compose up -d # 启动所有服务并在后台运行

  docker-compose ps # 查看服务运行状态,只查询自己管理的容器

  docker-compose restart # 重启所有服务

  docker-compose restart myApp # 重启 myApp 服务

  docker-compose stop# 停止所有服务

  docker-compose start # 开启所有服务

  docker-compose start myApp #开启 myApp 服务

  docker-compose stop myApp # 停止 myApp 服务

  docker-compose rm # 删除所有服务

  docker-compose rm myApp # 删除 myApp fuwu

  weave

https://www.jianshu.com/p/b91bf21ac946

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 215,463评论 6 497
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,868评论 3 391
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 161,213评论 0 351
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,666评论 1 290
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,759评论 6 388
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,725评论 1 294
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,716评论 3 415
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,484评论 0 270
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,928评论 1 307
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,233评论 2 331
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,393评论 1 345
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,073评论 5 340
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,718评论 3 324
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,308评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,538评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,338评论 2 368
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,260评论 2 352