Docker学习笔记(二)


一、前言

为了实现环境隔离,想到的办法:虚拟化硬件、操作系统软件、Linux容器

容器的实现原理:

namespace:**限制容器的查看与访问范畴**,Docker会创建多个命名空间供特定容器使用。Docker会创建多个命名空间供特定容器使用(NET、PID、、、)。-----控制容器内部访问外界

控制组:一组进程的资源使用量(包括CPU、内存、磁盘I/O以及网络等)进行隔离、排序与计数。这意味着cgroup能够确保Docker容器只使用其必需的资源——并在必要情况下设置其所能使用的资源上限。另外,cgroups还能够确保单一容器不至于占用太多资源并导致整体系统陷入瘫痪。-------------控制进程资源使用

二、Linux容器

之前使用的是虚拟机,但是由于虚拟机具有启动慢、占用资源多等问题,Linux开发了另一套影响至今的虚拟化技术----LInux容器技术,

Linux容器不是模拟一个完整的操作系统,而是对进程进行隔离,可以看成是在正常的进程之外套了一层保护套,对于容器里面的进程来说,他接触到的资源都是虚拟的,从而实现和底层系统的隔离。

由于容器是进程级别的,相比虚拟机有很多优势;启动快、体积少、耗费资源少

三、Docker

Docker是一个开源的应用容器引擎,是Linux容器的一种封装,并提供了简单易用了容器接口

Docker将应用程序与程序的依赖打包到一个文件当中,运行这个文件就会生成一个虚拟容器,程序在虚拟容器当中运行就好像在真实的物理机上运行一样,解决了环境问题。

3.1 docker安装

安装完成后,运行下面的命令,验证是否安装成功。

$ docker version
# 或者
$ docker info

3.2 docker 启动

Docker 是服务器----客户端架构。命令行运行docker命令的时候,需要本机有 Docker 服务。如果这项服务没有启动,可以用下面的命令启动(官方文档)。

# service 命令的用法
$ sudo service docker start

# systemctl 命令的用法
$ sudo systemctl start docker

3.3 docker容器

#查看所有容器
docker ps 
#查看已运行的容器
docker ps -a
#获得容器信息
docker container ls -a  
#停止容器   
docker container stop <container ID>
#删除容器
docker container rm  <container ID>
    
# 容器运行日志
docker logs --tail 100 tml-hes
docker logs --since 2021-11-09T08:30:00 --until 2021-11-10T20:05:00 tml-hes

3.4 docker 镜像

Docker把应用程序及其依赖打包到一个image文件当中,只有通过这个文件才可以生成Docker容器。同一个Image文件可以生成多个容器,image文件是一个二进制文件,一台机器上的image文件在另一台机器上也可以使用。

#列出本机所有的镜像
docker images
docker image ls
#删除镜像
docker image rm ImagesID          、docker rmi -f f78

$ 从仓库抓取镜像
docker image pull hello-world

# 注意,docker container run命令具有自动抓取 image 文件的功能,如果本地不存在,则抓取,并创建容器运行
docker container run hello-world
    
$ 查看镜像详情
docker inspect redis:3.2

有些容器在运行完毕后,容器自动终止;有些则不会,对于那些不会自动终止的容器,必须使用docker container kill 命令手动终止。

$ docker container kill [containID]

3.5 dockerFile文件

dockerfile文件时一个文本文件,用来配置image文件;docker根据该文件生成image文件

3.5.1 编写dockerfile文件

首先,在项目的根目录下,新建一个文本文件.dockerignore,写入下面的内容

.git
node_modules
npm-debug.log

上面代码表示,这三个路径要排除,不要打包进入 image 文件。如果你没有路径要排除,这个文件可以不新建。

然后,在项目的根目录下,新建一个文本文件 Dockerfile,写入下面的内容

FROM node:8.4
COPY . /app
WORKDIR /app
RUN npm install --registry=https://registry.npm.taobao.org
EXPOSE 3000

上面代码一共五行,含义如下。

  • FROM node:8.4:该 image 文件继承官方的 node image,冒号表示标签,这里标签是8.4,即8.4版本的 node。
  • COPY . /app:将当前目录下的所有文件(除了.dockerignore排除的路径),都拷贝进入 image 文件的/app目录。
  • WORKDIR /app:指定接下来的工作路径为/app
  • RUN npm install:在/app目录下,运行npm install命令安装依赖。注意,安装后所有的依赖,都将打包进入 image 文件。
  • EXPOSE 3000:将容器 3000 端口暴露出来, 允许外部连接这个端口。

3.5.2 创建image文件

有了DockerFile文件,则可以通过命令直接生成image文件

$ docker image build -t koa-demo .
# 或者
$ docker image build -t koa-demo:0.0.1 .

image-20221004164808428

3.5.3 生成容器

docker container run命令会从 image 文件生成容器。

$ docker container run -p 8000:3000 -it koa-demo /bin/bash
# 或者
$ docker container run -p 8000:3000 -it koa-demo:0.0.1 /bin/bash


# 查出容器的 ID
$ docker container ls --all

# 删除指定的容器文件
$ docker container rm [containerID]

上面命令的各个参数含义如下:

  • -p参数:容器的 3000 端口映射到本机的 8000 端口。
  • -it参数:容器的 Shell 映射到当前的 Shell,然后你在本机窗口输入的命令,就会传入容器。
  • koa-demo:0.0.1:image 文件的名字(如果有标签,还需要提供标签,默认是 latest 标签)。
  • /bin/bash:容器启动以后,内部第一个执行的命令。这里是启动 Bash,保证用户可以使用 Shell。

现在,在容器的命令行,按下 Ctrl + c 停止 Node 进程,然后按下 Ctrl + d (或者输入 exit)退出容器。此外,也可以用docker container kill终止容器运行。

3.5.3.4 发布 image 文件

容器运行成功后,就确认了 image 文件的有效性。这时,我们就可以考虑把 image 文件分享到网上,让其他人使用。

首先,去 hub.docker.comcloud.docker.com 注册一个账户。然后,用下面的命令登录。

$ docker login

接着,为本地的 image 标注用户名和版本。

$ docker image tag [imageName] [username]/[repository]:[tag]
# 实例
$ docker image tag koa-demos:0.0.1 ruanyf/koa-demos:0.0.1

也可以不标注用户名,重新构建一下 image 文件。

$ docker image build -t [username]/[repository]:[tag] .

最后,发布 image 文件。

$ docker image push [username]/[repository]:[tag]

发布成功以后,登录 hub.docker.com,就可以看到已经发布的 image 文件。


文章作者: superzqbo
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 superzqbo !
评论
  目录