前端需掌握docker基本知识和常见命令

之前本人的文章前端也来玩玩docker呗
里面是本人对照英文的docker官方网站写的一点关于docker最基本的起步使用。然后这遍笔记记录一点docker比较重要的概念和操作命令。


image镜像

  • docker把应用程序及其依赖,打包在image文件里面,只有通过这个文件,才能生成容器(container)
  • image文件可以看作容器的模版
  • 同一个imgae可以产生多个同时运行的容器(container),例如一个mysql的image可以生成多个mysql的container,只要端口不同即可
  • 镜像不是一个单一的文件,而是很多层
  • 容器其实就是在镜像上加了一层读写层,在运行容器里做任何文件的改动,都会写在这个读写层中,如果容器被删除,最上面的读写层也就没了,然后改动也就丢失了
  • 可以通过docker history [ID/NAME] 查看镜像中各层内容及大小,每层对应着Dockerfile中的一条指令

image相关的操作命令

  1. docker image ls : 查看全部镜像
  2. docker search 【imagesName】: 查找镜像
  3. docker inspect【imagesName】: 显示一个镜像的详细信息
  4. docker pull【imagesName】: 拉取一个镜像
  5. docker push【imagesName】: 发布一个镜像到镜像仓库
  6. docker rmi【imagesName】: 删除一个镜像
  7. docker image prune【imagesName】: 删除没有产生容器的镜像
  8. docker export -o ***.tar 【imageId】 : 将一个容器导出一个tar包
  9. docker import ***.tar: 导入一个tar包

container容器

  • 容器生成以后,就会同时存在两个文件,image文件和容器文件
  • 关闭容器不会删除容器文件,只是容器停止运行
  • image文件生成的容器实例,本身也是一个文件,称为容器文件

container相关的操作命令

  1. docker container run [imageName] : 从镜像运行一个容器
  2. docker container ls : 列出容器列表(只查看在运行的容器)
  3. docker attach : 要attach上去的容器必须正在运行,可以同时连接上同一个container来共享屏幕
  4. docker container stats : 显示容器资源使用统计
  5. docker container top: 显示一个容器运行的进程
  6. docker container port : 更新一个或多个容器配置
  7. docker container inspect : 展示一个容器的详细信息
  8. docker container port : 查看容器的端口暴露情况
  9. docker container stop : 停止一个容器
  10. docker container start :开启一个容器
  11. docker container rm : 删除一个容器
  12. docker container exec -it [containerID] /bin/bash : 启动一个正在运行的容器13. docker container cp [containerID] :/文件 宿主机路径 : 拷贝一个docker容器内的文件到宿主机
  13. docker container run -it [imageName] /bin/bash : 启动交互式的容器

-i : 交互式(例如执行node hello ,输出到控制台)
-t:分配一个伪终端
-d: 运行容器到后台
-a: 附加到运行的容器(访问一个正在运行的容器,但是退出会停止容器的运行,现在不实用)
-e: 设置环境变量 (docker run -it -e name="shawvi" centos /bin/bash) 传入了一个变量给centos容器
-p: 发布容器端口到主机,例如nginx的容器会暴露80端口给宿主机(docker run -p 8080:80 nginx)
-P: 发布所有
-v: 挂载宿主机分区到容器
--mount: 挂载宿主机分区到容器


commit制作个性化镜像

1.docker container commit -m '备注' -a '作者名' 容器ID 版本号 : 从容器创建一个个性化镜像

2.通过dockerfile来创建个性化镜像

命令:

FROM 镜像 (继承那个镜像)
COPY  宿主机文件夹  指定一个文件夹
WROKDIR 文件夹 (工作目录)
RUN shell命令  (执行一个脚本命令)
EXPOSE 端口号 (保护一个端口号给宿主机)
CMD 命令 (容器启动后执行一个cmd命令)

例:
FORM node            ====> 继承node镜像
COPY ./app  /app     ====> 把宿主机的app目录拷贝到镜像app目录
WOKRDIR  /app        ====> 指定镜像的工作目录
RUN npm install      ====> 执行一个脚本命令,安装npm包依赖
EXPOSE 3000          ====>  向宿主机暴露3000端口
CMD npm start    ====> 当启动容器的执行,启动一个node服务

其中cmd与run的区别在于,run是在生成一个镜像时执行的命令,而cmd是当我们通过docker run 启动一个容器以后执行的命令。

譬如我们node服务,我们会在生成express服务的镜像时,先下载好那些npm包,然后这个镜像生成以后,我们通过这个镜像去生成一个node服务时,容器内部自动执行了npm start去启动服务,而不需要我们进入容器去执行这个命令,以至于我们一直卡在容器运行的状态,一退出服务就down掉了

按照上面的步骤写好Dcokerfile文件以后,通过命令(docker build -t node_app_demo . )
后开始生成一个node的个性化镜像
-t用来指定镜像的名称,后面还可以加冒号指定标签,如果没有就是最新的,
. 代表dockerfile文件的位置


数据盘

  • docker volume create 文件

创建一个docker卷轴,用于宿主机的文件映射到docker容器中去

  • docker run -d --name nginx_server --mount src=nginx-html,dst=/usr/share/nginx/html nginx
  • docker run -d --name nginx-html:/usr/share/nginx/html nginx (上面的一种简写)

将 宿主机上面的nginx-html文件挂在docker的nginx 容器中去,位置为dst后面的位置,然后这两个文件就打通了,nginx服务器里面的文件就在宿主机中看得到,然后改了宿主机上的文件,docker容器也会发生改变

image.png
  • docker volumn rm 卷轴

删除一个卷轴,不能删除正在使用的卷轴,

  • docker run -volumes-from logger --name nginx_1 -it nginx bash
  • docker run -volumes-from logger --name nginx_2 -it nginx bash

nginx1 和 nginx2 都继承这一个卷轴,这样不用每建一个nginx容器都需要挂在一次


网络

  • docker network ls

bridge : docker容器 有自己的ip地址,例如宿主机是192.168.1.20,那么容器内可能就是192.168.1.21
none: 没有网络
host: 复用宿主机的ip地址

-docker run -d --net host|none : 通过指定--net参数来设置容器的网络属性,如果没给就是bridge模式

  • 创建自定义网络

docker network create ---driver bridge dev_web: 创建一个开发的web网络


image.png

compose

例如一个网站需要mysql,nginx,node...,在docker中,我们要编排这些容器,让我们更好的控制这些容器。

1.考虑选择那些镜像
2.按照合适的顺序启动这些容器
3.管理容器中的服务器
4.如果服务器关机了,还要重启容器
5.如果服务器负载过大,动态扩容
6.如果程序更新了,还要动态升级镜像和容器和服务

所以docker compose的出现就很有意义;

  • compose通过一个配置文件来管理多个Docker容器
  • 在配置文件中,所有的容器通过service来定义,然后使用docker-compse脚本来启动、停止和重启应用和应用中的服务以及所有依赖服务器的容器
  1. 在linux主机安装docker-compose
curl -L https://github.com/docker/compose/releases/download/1.8.0/run.sh > /usr/local/bin/docker-compose
chmod +x /usr/local/bin/docker-compose
docker-compose --version
  1. 安装好docker-compose以后,我们编写一个用docker-compose做的小案例
├── backend
│   └── index.html
├── docker-compose.yml
├── fron
└── front
    └── index.html

创建好上面的文件夹目录以后,我们来编写docker-compse.yml文件(yml语法的解释

version: "2"
services:
  nginx1:
    image: nginx
    volumes:
      - "./front:/usr/share/nginx/html"
    ports:
      - "8080:80"
  nginx2:
    image: nginx
    volumes:
      - "./backend:/usr/share/nginx/html"
    ports:
      - "8081:80"

必须严格按照yml的语法格式编写,然后编写好以后我们就可以启动了

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

推荐阅读更多精彩内容

  • docker基本概念 1. Image Definition 镜像 Image 就是一堆只读层 read-only...
    慢清尘阅读 8,744评论 1 21
  • 五、Docker 端口映射 无论如何,这些 ip 是基于本地系统的并且容器的端口非本地主机是访问不到的。此外,除了...
    R_X阅读 1,747评论 0 7
  • 0x01 核心概念 Docker镜像类似于虚拟机镜像,可以理解为一个面向Docker引擎的只读模板,包含了文件系统...
    闲云逸心阅读 4,714评论 0 9
  • 一、Docker 简介 Docker 两个主要部件:Docker: 开源的容器虚拟化平台Docker Hub: 用...
    R_X阅读 4,385评论 0 27
  • 阳光穿透身体暖暖的白白的云彩一骨朵 两骨朵在天上散步 妖怪趴在最松软的那朵云上低头往下看 天的最东边呀露珠在森林...
    葺宝阅读 188评论 0 1