前端需掌握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端口,就是这么快和方便!

你可能感兴趣的:(前端需掌握docker基本知识和常见命令)