Docker简单入门

Docker

Docker 属于 Linux 容器的一种封装,提供简单易用的容器使用接口。它是目前最流行的 Linux 容器解决方案。

Docker 将应用程序与该程序的依赖,打包在一个文件里面。运行这个文件,就会生成一个虚拟容器。程序在这个虚拟容器里运行,就好像在真实的物理机上运行一样。有了 Docker,就不用担心环境问题。

Docker容器与虚拟机的区别

虚拟机(virtual machine)就是带环境安装的一种解决方案。它可以在一种操作系统里面运行另一种操作系统,比如在 Windows 系统里面运行 Linux 系统。

而容器技术是和我们的宿主机共享硬件资源及操作系统,可以实现资源的动态分配。 容器不是模拟一个完整的操作系统,而是对进程进行隔离。或者说,在正常进程的外面套了一个保护层。对于容器里面的进程来说,它接触到的各种资源都是虚拟的,从而实现与底层系统的隔离。

特性容器虚拟机
启动秒级分钟级
硬盘使用一般为MB一般为GB
性能接近原生
系统支持量单机支持上千个容器一般是几十个
Docker的用途
  • 提供一次性的环境。比如,本地测试他人的软件、持续集成的时候提供单元测试和构建的环境
  • 提供弹性的云服务。因为 Docker 容器可以随开随关,很适合动态扩容和缩容。
  • 组建微服务架构。通过多个容器,一台机器可以跑多个服务,因此在本机就可以模拟出微服务架构。
Docker的基本概念
Image(镜像)

Docker 镜像可以看作是一个特殊的文件系统,除了提供容器运行时所需的程序、库、资源、配置等文件外,还包含了一些为运行时准备的一些配置参数(如匿名卷、环境变量、用户等)。Docker把应用程序及其依赖打包在images文件里面,通过这个文件进行docker容器的生成。

Container(容器)

image 文件生成的容器实例,本身也是一个文件,称为容器文件。也就是说,一旦容器生成,就会同时存在两个文件: image 文件和容器文件。而且关闭容器并不会删除容器文件,只是容器停止运行而已。可以把镜像看成是一个类,而容器就是一个实例。

Repository(仓库)

Docker 仓库是集中存放镜像文件的场所。镜像构建完成后,可以很容易的在当前宿主上运行。

但是, 如果需要在其他服务器上使用这个镜像,就需要一个集中的存储、分发镜像的服务,Docker Registry(仓库注册服务器)就是这样的服务。

一个 Docker Registry 中可以包含多个仓库(Repository),每个仓库可以包含多个标签(Tag),每个标签对应着一个镜像。

Docker的使用
创建镜像
  • 从无到有开始创建镜像
  • 下载并使用别人创建好的现成的镜像
  • 在现有镜像上创建新的镜像

查看所有镜像:
docker images
删除镜像
docker rmi imageName/image Id

从Docker hub中获取已有的镜像
例如:从Docker Hub中下载最新版本的node

docker pull node:latest

也可以下载指定版本,把latest改成对应版本号就可以了
下载后就可以使用了,例如创建一个容器,运行node命令

docker run -it node:latest node

参数说明:
-i:交互式操作
-t :终端
node:latest使用最新版本的node镜像来运行容器
node 放在镜像后边的是命令,希望有个交互式的node
在这里插入图片描述
Dockerfile文件创建镜像
Dockerfile 是一个用来构建镜像的文本文件,文本内容包含了一条条构建镜像所需的指令和说明。

FROM node
MAINTAINER leopord
ADD ./package.json /home/leo/package.json
ADD ./index.js /home/leo/index.js 
RUN mkdir -p /home/leo
WORKDIR /home/leo
RUN npm set registry https://registry.npm.taobao.org/
RUN npm install
EXPOSE 3002
CMD ["node","index.js"]

Dockerfile基本的语法:

  • 使用#来注释
  • FROM 指令告诉Docker使用哪个镜像作为基础
  • MAINTAINER 维护者的信息
  • ADD 复制指令,从上下文目录中复制文件或者目录到容器里指定路径
  • RUN 用于执行后边跟着的命令
  • WORKDIR 指定工作目录,用 WORKDIR 指定的工作目录,会在构建镜像的每一层中都存在。(WORKDIR 指定的工作目录,必须是提前创建好的)。docker build 构建镜像过程中的,每一个 RUN 命令都是新建的一层。只有通过 WORKDIR 创建的目录才会一直存在。
  • EXPOSE 声明端口
  • CMD 类似RUN命令,用于运行程序,二者运行的时间点不同,CMD是在docker run时执行,RUN是在docker build执行。

使用docker build创建image文件
进入根目录

docker build -t imageName .

imageName为创建的镜像名
.最后面还有个点,用于指定上下文路径

上下文路径,是指 docker 在构建镜像,有时候想要使用到本机的文件(比如复制),docker build 命令得知这个路径后,会将路径下的所有内容打包。

修改已有镜像
使用docker commit命令提交修改

docker commit -m 'update message' -a "user leo" 8a0ba440f776 node:latest

其中, -m 来指定提交的说明信息,跟我们使用的版本控制工具一样; -a 可以指定更新的用户信息;
之后是用来创建镜像的容器的 ID;最后指定目标镜像的仓库名和 tag 信息。创建成功后会返回这个镜像
的 ID 信息

启动容器
docker run -it --name ContainerName node:latest node

containerName 可定义容器名
命令:
查看所有的容器

docker ps -a

查看所有启动的容器:

docker ps

重启一个停止的容器

docker restart containerName/container Id

停止容器

docker stop containerName/container Id

在启动容器时后台运行,添加-d

docker run -it -d --name node_container node:latest node

删除容器
如果容器在运行中,需要先停止在删除,或者添加-f强制停止

docker rm containerName/container Id
docker rm -f containerName/container Id

添加端口映射
-P 大写P表示随机映射,-p小写p需要设置本机端口映射容器的端口 -p ip port: container port

docker run -it -d --name node_container -p 12317:3002 node:latest node
docker run -it -d --name node_container -P node:latest node

通过 docker port containerName/ container Id可以查看端口映射。

进入容器
在使用 -d参数时,容器启动后会进入后台。此时想要进入容器,可以通过以下指令进入:

  • docker attach

  • docker exec:推荐使用 docker exec 命令,因为此退出容器终端,不会导致容器的停止。

查看容器日志

docker logs containerName / container Id
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值