什么是Docker?(部署篇)

Docker部署

MySQL部署

在Docker容器中部署MySQL,并通过外部MySQL客户端去操作MySQL。

docker容器软件部署步骤

1 搜索镜像;2 拉取镜像;3 创建容器;4 操作容器中的MySQL

注意

  • 容器内的网络服务和外部机器(客户端)是不能直接进行通信的。

  • 外部机器和宿主机器可以直接进行通信。

  • 当容器中的网路服务需要被外部机器访问时,可以将容器中提供服务的端口映射到宿主机的端口上,外部机器访问宿主机的该端口,从而间接的访问容器的服务。(3306容器端口映射到宿主机的3307端口 访问3307即访问3306实体容器) ---这种方法解决容器和外部机器不能直接通信的问题,叫做端口映射

#搜索镜像
docker search mysql
#拉取镜像
docker pull mysql:5.6
#创建容器 设置端口映射 目录映射
#在root目录下创建MySQL目录用于存储MySQL数据信息
mkdir ~/mysql
cd ~/mysql
#创建容器脚本
docker run -id \   #守护示创建
-p 3307:3306 \     #容器和外部机器端口一般选择一致
--name=c_mysql \   #name
-v $PWD/conf:/etc/mysql/conf.d \  #容器卷配置文件
-v $PWD/logs:/logs \   #容器卷log文件
-v $PWD/data:/var/lib/mysql \  #容器卷data文件
-e MYSQL_ROOT_PASSWORD=123456 \  #env环境文件 定义环境变量
mysql:5.6
#进入容器
docker exec -it c_mysql /bin/bash
#通过外部机链接容器中的sql
#注意address是宿主机的ip 端口是宿主机被映射的端口3306端口

Tomcat部署

搜索和拉取的方式和mysql相似

mkdir tomcat
cd tomcat 
#创建容器
docker run -id --name=c_tomcat \
-p 8080:8080 \
-v $PWD:/usr/local/tomcat/webapps \
tomcat

在~/tomcat 路径下创建一个test文件夹,在test之下创建一个index.html文件然后ifconfig指令查看宿主机ip 可以在地址栏访问 ip:8080/test/index.html路径了

NGINX部署

拉取和搜索方式同上;但是NGINX服务器一般会有一个配置文件,因为会有反向代理的需求;

docker run -id --name=c_nginx \
-p 80:80 \
-v $PWD/conf/nginx.conf:/etc/nginx/nginx.conf \
-v $PWD/logs:/var/log/nginx \
-v $PWD/html:/usr/share/nginx/html \
nginx

参数:-p80:80 容器的端口映射

-v $PWD/conf/nginx.conf:/etc/nginx/nginx.conf 将主机当前目录下的/conf/nginx.conf挂载到容器相应的目录上

Redis部署

搜索和拉取和上述指令一致。

#创建容器
docker run -id --name=c_redis -p 6379:6379 redis:5.0

使用外部机器连接redis

./redis-cli.exe -h 192.168.1.4 -p 6379

Dockerfile

Docker镜像原理

问题:

  • docker镜像本质是什么呢?

是一个分层文件系统;

  • docker中的centos镜像为什么只有200m,但是centos操作系统需要几个g?

centos的iso镜像文件包含了bootfs和rootfs,而docker镜像复用操作系统的bootfs,只有rootfs和其他镜像层

  • docker中tomcat镜像有500m,但是tomcat安装包只有70m?

由于docker中镜像是分层的,tomcat虽然只有70多m,但是它依赖的父镜像和基础镜像,所有整个对外暴露的tomcat镜像大小是由500m

分析:

从操作系统首先入手,其组成部分:

1,进程调度子系统;2,进程通信子系统;3,内存管理子系统;4,设备管理子系统;5,文件管理子系统;6,网络通信子系统;7,作业控制子系统。

Linux文件系统由bootfs和rootfs两部分组成

  • Bootfs:包含BootLoader(引导加载程序)和kernel(内核心)
  • rootfs: root文件系统,包含的就是典型的Linux系统中的/dev,/proc,/bin,/etc等标准目录和文件
  • 不同的Linux发行版,bootfs基本一样,而rootfs不同。如Ubuntu,centos等。

原理解密:

Docker镜像是由特殊的文件系统叠加而成的。最低端是bootfs,并使用宿主机的bootfs。第二层是root文件系统,被称为base image;然后再往上可以叠加其他的镜像文件。统一文件系统技术能够将不同的层叠加成一个文件系统,为这些层提供一个统一的视角,这样就隐藏了多层的存在。在用户的角度看来,只存在一个文件系统。一个镜像可以放在另一个镜像的上面,位于下面的镜像称为父镜像,最底部的镜像称为基础镜像。

当从一个镜像启动容器时,docker会在最顶层加载一个读写文件系统作为容器;(即生成一个新的镜像实例,这样就可以进行修改相关文件 否则是不能修改只读文件的)

镜像制作

docker镜像如何制作?

1 容器转为镜像;(上述中生成的镜像 变成自己的镜像)

在新的镜像中只包换了不是通过目录加载的文件;)

#转化 注意通过挂载的方法不能使进行同步转化过去
docker commit 容器id 镜像名称:版本号

比如把项目放到nginx服务上,重新转化为镜像 进行压缩,给到测试人员进行测试

#压缩
docker save -o 压缩文件名称 镜像名称:版本号

给到测试人员,测试人员进行解压;

#解压
docker load -i 压缩文件名称

因为这样挂载文件会有问题,所有指令示的操作了解即可。主要通过dockerfile

Dockerfile概念及作用

本质就是一个文本文件,包含了很多条指令,每一条指令构建一层,基于基础镜像,最终构建一个新的镜像。

好处:对于开发人员,可以为开发团队提供一个完全一致的开发环境。对于测试人员,可以直接拿开发时所构建的镜像或者通过Dockerfile文件构建一个新的镜像开始工作了。对于运维人员,在部署时,可以实现应用的无缝移植。

Dockerfile关键字

关键字 作用 备注
FROM 制定父镜像 指定Dockerfile基于那个image构建
RUN 执行命令 执行一段命令,默认是/bin/sh格式:RUN command
CMD 容器启动命令 提供启动容器时候的默认命令
ENTRYPOINT 入口 一般在制作一些执行就关闭的容器中会使用 配合CMD
COPY 复制文件 build的时候复制文件到image中
ADD 添加文件 build的时候添加文件到image中,不仅仅局限于上下文,可以来源于远程服务
ENV 环境变量 制定build时候的环境变量 可以在启动的容器的时候 通过-e 覆盖 格式:name=value
ARG 构建参数 构建参数 只在构建的时候使用的参数 如果有ENV 那么env 相同的名字会覆盖arg的参数
VOLUME 定义外部可以挂载的数据卷
关键字 作用 备注
EXPORSE 暴露端口 定义容器运行的时候监听的端口 启动容器的使用-p来绑定暴露端口,格式 EXPORSE 8080或者 EXPORSE 8080/udp
WORKDIR 工作目录 制定容器内部的工作没目录 如果没有创建的话则自动创建 如果指定/使用的是绝对地址
USER 指定执行用户 指定build或者启动的时候 用户在RUN CMD ENTRYPOINT执行的时候的用户
HEALTHCHECK 健康检查 指定监测当前容器的健康监测的命令 基本上没用
OUTBUILD 触发器 存在OUTBUILD关键字的镜像作为基础镜像的时候,当执行FROM完成后会执行OUTBUILD的命令,用处不大
STOPSIGNAL 发送信号量到宿主机 该指令设置将发送到容器的系统调用信号以退出;
SHELL 指定执行脚本的shell 指定RUN CMD ENTRYPOINT执行命令的时候,使用的shell

案例

上述的指令 只需要掌握经常使用的关键字即可;

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

推荐阅读更多精彩内容