Docker 应用入门

一、Docker产生的意义

1'解决环境配置难题:在软件开发中最大的麻烦事之一,就是环境配置。为了跑我们的程序需要装各种插件,操作系统差异、不同的版本插件都可能对程序产生影响。于是只能说:程序在我电脑上跑是正常的。

2'解决资源占用过多,启动慢的问题: 环境移植 虚拟机(virtual machine)也能实现,但虚拟机运行的是完整的操作系统,占用资源多、冗余步骤多、启动慢。**Linux 容器(Linux Container,LXC)不是模拟一个完整的操作系统,而是对进程进行隔离。**由于容器是进程级别的,相比虚拟机有很多优势。 启动快、资源占用少、体积小。

Docker 属于 Linux 容器的一种封装,提供简单易用的容器使用接口。 Docker的构想是要实现"Build,Ship and Run Any App,Anywhere",即通过对应用的封装(Packaging)、分发(Distribution)、部署(Deployment)、运行(Runtime)生命周期进行管理、达到应用组件"一次封装,到处运 行"的目的。这里的应用组件,既可以是一个Web应用、一个编译环境,也可以是一套数据库平台服务,甚至是一个操作系统或集群。

二、什么是Docker镜像、Docker容器、Docker仓库?

Docker镜像: Docker 把应用程序及其依赖,打包在 image 文件里面。

Docker容器:类似于一个轻量级的沙箱、Docker利用容器来运行和隔离应用。

Docker仓库:存放镜像的地方。最大的公开仓库的官方的Docker Hub,常用pul命令来拉取/提交镜像。

我们可以做一个通俗的类比,把Docker比作常用的VMware Workstation。而容器就比做运行在VMware上的一个虚拟机,而image就是我们常装操作系统时用的镜像,docker仓库就是下载镜像的地方。

三,我们该如何简单的使用docker。

1' 可以根据下官网的教程熟悉下docker的基本指令。

Containerize an application | Docker Docs

常用命令:

  • 拉取镜像: docker pull IMGNAME:TAG
  • 显示镜像: docker images
  • 显示运行的容器: docker ps
  • 显示所有的容器,包括没有运行的: docker ps -a
  • 删除镜像: docker rmi IMAGEID
  • 删除容器: docker rm CONTAINERID
  • 进入容器: docker attach CONTAINERID 或 docker exec -it CONTAINERID /bin/bash
  • 启动容器名: docker start CONTAINERID
  • 停止容器: docker stop CONTAINERID
  • 退出容器: exit
  • 复制容器内容:docker cp 52883072419a:/usr/share/nginx/html/front ./

2' 把Dockerfile可以理解成,在原镜像的基础上,运行了一些命令(可能安装了一些新的程序)。原镜像的来源和新命令都写在了Dockerfile的文件里面,build一下就是一个新的镜像。

DockerFile分为四部分组成:基础镜像信、维护者信息、镜像操作指令和容器启动时执行指令。例如

在Dockerfile同级目录下运行:docker build -t NEWIMGNAME .

3'docker-compose.yml就是对container运行时的一些配置。比如端口映射、cpu、内存配置等。

在docker-compose.yml同级目录下运行: docker-compose -f docker-compose.yml up -d

四、常见问题:

1、image里面是什么,应用开发人员改代码后一定需要重启容器?

有些pull到的镜像名称叫hello-world,redis等,它并不是一个操作系统?那是因为电脑并不是在操作系统下才能运行。可以理解成镜像是打包Bootloader之后的内容,它可能只是:开机后,自动运行一个redis,over。

对于这种没有包含操作系统的image,该容器思维单一,做完一件事就完了。所以对于这种image(常见为python编写),编写代码之后,就必须要重启container。但若container里面运行了操作系统(linux,windows等),改基于系统内的php代码,就不需要重启container.

相关推荐
IT学长编程9 分钟前
计算机毕业设计 玩具租赁系统的设计与实现 Java实战项目 附源码+文档+视频讲解
java·spring boot·毕业设计·课程设计·毕业论文·计算机毕业设计选题·玩具租赁系统
莹雨潇潇12 分钟前
Docker 快速入门(Ubuntu版)
java·前端·docker·容器
杨哥带你写代码30 分钟前
足球青训俱乐部管理:Spring Boot技术驱动
java·spring boot·后端
郭二哈1 小时前
C++——模板进阶、继承
java·服务器·c++
tangdou3690986551 小时前
1分钟搞懂K8S中的NodeSelector
云原生·容器·kubernetes
A尘埃1 小时前
SpringBoot的数据访问
java·spring boot·后端
yang-23071 小时前
端口冲突的解决方案以及SpringBoot自动检测可用端口demo
java·spring boot·后端
沉登c1 小时前
幂等性接口实现
java·rpc
代码之光_19801 小时前
SpringBoot校园资料分享平台:设计与实现
java·spring boot·后端
科技资讯早知道2 小时前
java计算机毕设课设—坦克大战游戏
java·开发语言·游戏·毕业设计·课程设计·毕设