关于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的用户账户


浙公网安备 33010602011771号