关于docker的初步学习

曾几何时,面试官问我,docker用过吗,我只能尴尬的说一下听说过,其实没有听说过,后来下来查了一下,明白了是啥,但是后来工作真的用不到这个,就又不看了。所以趁着这次好好看一下,到底是很么搞清楚

1、docker是什么

 这个实际上装一个docker就可以很快理解了,实质上相当于一个阉割版的虚拟机。有很多镜像,之后在docker启动就拉起来了容器。实质上docker是一个容器启动器,真正的容器是启动之后的服务。

  比如说我们平常开发了一套系统,在自己的系统版本上运行可以正常,但是给到了客户或者其他的开发人员就出现了,或者说我们自己测试搭建的环境给到测试又需要搭建一次环境,环境部署需要的配置和脚本什么的都是比较浪费时间的,这样的成本实在是太高了。虚拟机这种是我们以往选择的一种方式,这种方式现在依旧是比较常用的。但是虚拟机会占用很多的系统和CPU资源,这种成本用到docker上会有很大的使用空间,用过的基本深有体会啥的。所以将静态配置和程序代码做成镜像方便直接部署就成为了一种趋势,docker就是做这个的,制作镜像、启动镜像

  docker允许开发者打包他们的开发代码和依赖包或者环境基础配置到一个轻量级、可移植的容器中去,然后发布到任何流行的linux机器上去。各个容器之间不会存在接口调用关系,完全是独立运行的状态

 

2、实际应用

  Web应用的自动化打包和发布

  自动化测试的持续集成和迭代

  在服务型环境中部署和调整数据库或者其他的后台应用

  

3、docker架构

  镜像,docker的基础镜像,对标系统镜像

  容器,实质上就是运行中的镜像,服务启动了

  仓库,对标代码控制中心,不过是镜像的仓库

 

4、docker的基础命令

  docker run [OPTIONS] IMAGE根据镜像新建并启动容器。IMAGE是镜像ID或镜像名称
  OPTIONS说明:
   --name=“容器新名字”:为容器指定一个名称
   -d:后台运行容器,并返回容器ID,也即启动守护式容器
   -i:以交互模式运行容器,通常与-t同时使用
   -t:为容器重新分配一个伪输入终端,通常与-i同时使用
   -P:随机端口映射
   -p:指定端口映射,有以下四种格式:
    ip:hostPort:containerPort
    ip::containerPort
    hostPort:containerPort
    containerPort

  docker run 镜像 /bin/echo "hello world"  以镜像启动容器,在其中执行helloworld

  docker run -i -t image /bin/bash 进入了image容器 -t指定伪终端,-i允许交互

  docker run -d image /bin/sh -c "name"  后台运行容器,只返回容器ID

  docker run -itd --name "" image /bin/bash 加-d默认不会进入容器,进入容器需要exec命令

  docker inspect name/ID 查看Docker底层信息

  docker top 容器ID或容器名称查看容器内运行的进程

  docker inspect 容器ID或容器名称查看容器内部细节

  docker attach 容器ID进到容器内,exit退出会结束容器,但是exec不会

  docker exec -it  容器ID进到容器内

  docker run --name mysql_liulei -p 3306:3306 -e MYSQL_ROOT_PASSWORD=123456 -it mysql 数据库启动

  docker exec -it mysql_liulei /bin/bash 打开进入可交互

  mysql -u root -p 登陆进入数据库root账户

  docker run --name nginx_liulei -it nginx /bin/bash 启动nginx容器服务

 

  docker start 容器ID或容器名称 启动容器

  docker restart 容器ID或容器名称 重新启动容器

  docker stop 容器ID或容器名称 停止容器

  docker kill 容器ID或容器名称 强制停止容器

  docker rm -f ID 强制删除容器

  

  docker images 查看容器镜像列表

  docker images --digests 显示镜像的摘要信息

  docker images --no-trunc 显示完整的镜像信息

  docker rmi -f $(docker images -p) 删除所有查询到的镜像

 

  docker  ps 查看镜像运行列表和状态

  docker  ps -a 查看所有的容器,包括未运行的

  docker ps -l 列出最近创建的容器

  docker ps -n 3 列出最近创建的容器

  docker ps -q 只显示容器ID

  docker ps --no-trunc 显示当前所有运行的容器的完整信息

 

  docker pull 拉取镜像,不说明默认最新

  docker commit -m="" -a="" ID 提交镜像版本

  docker commit -m "提交的描述信息" -a "作者" 容器ID 要创建的目标镜像的名称:[标签名] 提交容器成为一个新的镜像

    如: docker commit -m "新的描述信息" -a "liulei" f9e29e4855a5 myubuntu:1.0

 

  docker export Id > something.tar 导出某个容器

  docker something.tar | docker import - image 容器快照文件导入为镜像文件

  docker import url 从指定目录或者URL导入镜像文件

   

  exit 和 Ctrl+D 退出并停止容器

  Ctrl+p+q 只退出容器,但不停止容器

 

  docker logs ID 查看容器的输出

  docker logs -f -t --since --tail 容器ID或容器名称 查看容器的日志

    如:docker logs -f -t --since="2021-11-20" --tail=10 f9e29e4855a5

     -f : 查看实时日志
     -t : 查看日志产生的日期
     --since : 此参数指定了输出日志开始日期,即只输出指定日期之后的日志
     --tail=10 : 查看最后的10条日志

  docker cp 容器ID:容器内的文件路径 宿主机路径从容器内拷贝文件到宿主机.
    如:docker cp f9e29e8455a5:/tmp/yum.log /root

 

  docker build -t 从零开始创建一个新的镜像

FROM centos:latest
MAINTAINER Fisher "liulei@www.com"

RUN /bin/echo 'root:123456' |chpasswd
RUN useradd liulei
RUN /bin/echo 'liulei:123456' |chpasswd
EXPOSE 22
EXPOSE 80

 上面就是用当前的centos镜像增加了liulei账户的镜像,进去之后发现比原本镜像多了一个liulei的用户账户

 

 

posted @ 2021-12-31 14:51  Sukkimy  阅读(50)  评论(1)    收藏  举报