centos 安装docker

其他操作系统自行百度

Image 文件

Docker把应用程序及其依赖打包在一个image文件里面,可以理解为一个容器的说明书. 通过这个image文件可以生成容器的实例.同一个image文件可以生成同时运行的多个实例.

image文件是一个二进制文件,实际上,一个image文件往往继承自另外一个image文件,加上一些个性化设置而成.举例来说:你可以在ubuntu的image基础上加上Apache服务器,形成你自己的image.

# 列出本机的所有 image 文件。
$ docker image ls

# 删除 image 文件
$ docker image rm [imageName]

并且image文件是通用的,一台机器上的image文件拷贝到另一台机器上,照样可以使用.一般来说,我们往往是使用别人制定好的image文件,及时要定制,也可以对已有的image文件进行加工,而不是从头制作,这样可以节省很多时间.

为了方便,image制作完成后,可以上传到网上的仓库,Docker 的官方仓库 https://hub.docker.com/ 是最重要、最常用的 image 仓库。此外,出售自己制作的 image 文件也是可以的。

container 容器文件

image文件生成的实例本身也是一个文件,成为容器文件.也即是说,一旦容器生成,就会存在两个文件:一个image文件,一个容器文件.而且关闭容器并不会删除容器文件,只是容器停止运行而已.

# 列出本机正在运行的容器
$ docker container ls

# 列出本机所有容器,包括终止运行的容器
ig:~ itguang$ docker container ls --all
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS                        PORTS               NAMES
649a6b785a86        ubuntu              "bash"              10 minutes ago      Exited (137) 9 minutes ago                        loving_austin
85b9c705e73f        hello-world         "/hello"            10 minutes ago      Exited (0) 10 minutes ago                         silly_lumiere
c9281ad7f7b8        ubuntu              "bash"              17 minutes ago      Exited (127) 11 minutes ago                       stupefied_curran
e06bf36259ef        hello-world         "/hello"            24 minutes ago      Exited (0) 24 minutes ago                         flamboyant_chaplygin
ig:~ itguang$

可以看出,我现在已经有了四个容器,终止运行的容器文件依然会占用硬盘空间,可以使用docker container rm [container_id]命令删除.

ig:~ itguang$ docker container ls --all
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS                        PORTS               NAMES
c9281ad7f7b8        ubuntu              "bash"              22 minutes ago      Exited (127) 17 minutes ago                       stupefied_curran
e06bf36259ef        hello-world         "/hello"            29 minutes ago      Exited (0) 29 minutes ago                         flamboyant_chaplygin
ig:~ itguang$ docker container rm c9281ad7f7b8 e06bf36259ef

Dockerfile 文件

学会了如何使用image文件和生成容器文件之后,接下来你可能会想直到这个image文件是如何生成的呢?如果你要推广自己的软件,势必要制作自己的image文件.

这时候就要用到Dockerfile文件,他是一个文本文件,用来配置image.Docker容器根据Dockerfile文件生成image二进制文件.

下面通过一个实例,来演示如何编写Dockerfile文件生成自己的image二进制文件.
实例:制作自己的 Docker 容器

下面我以 koa-demos 项目为例,介绍怎么写 Dockerfile 文件,实现让用户在 Docker 容器里面运行 Koa 框架。

1.先下载源代码:

$ git clone https://github.com/ruanyf/koa-demos.git
$ cd koa-demos

2.编写 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 :将当前目录下的所有文件都拷贝到image文件的 /app 目录.

WORKDIR /app : 指定接下来的工作目录为 /app .

RUN npm install:在/app目录下,运行npm install命令安装依赖。注意,安装后所有的依赖,都将打包进入 image 文件。

EXPOSE 3000 : 将容器的3000 端口暴露出来,允许外部连接这个端口.

创建 image 文件.

有了 Dockerfile文件以后就可以使用 docker image build 命令创建image文件了.

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

上面代码中,-t参数用来指定image文件的名字,后面还可以用冒号指定标签,如果不指定,默认标签就是latest,最后那个.表示Dockerfile文件所在的路径.这个例子Dockerfile文件在当前路径,所以就是一个.

如果构建成功,会有如下提示信息:

...
Successfully built 979e0930e4b6
Successfully tagged koa-demo:latest

我们使用docker images 查看当前的image文件

ig:koa-demos itguang$ docker images
REPOSITORY          TAG                 IMAGE ID            CREATED              SIZE
koa-demo            latest              979e0930e4b6        About a minute ago   676MB
ubuntu              latest              452a96d81c30        8 days ago           79.6MB
hello-world         latest              e38bc07ac18e        3 weeks ago          1.85kB
node                8.4                 386940f92d24        8 months ago         673MB

生成容器

前面讲过,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

上面各个参数解释如下:

-p : 容器的3000端口映射到本地的8000端口.

-it : 容器的shell会映射到当前本地的shell,你在本机窗口输入的命令会传入到容器中.

koa-demo:0.0.1 :image 文件的名字(如果有标签,还需要提供标签,默认是 latest 标签)。

/bin/bash : 容器启动以后,容器内部第一个执行的命令.这里是启用Bash,以保证用户可以使用shell

如果一切正常,运行上面的命令以后,就会返回一个命令行提示符。

root@6be4c4a279df:/app#

这表示你已经在容器里面了,返回的提示符就是容器内部的 Shell 提示符。执行下面的命令。

root@6be4c4a279df:/app# node demos/01.js

这时,Koa 框架已经运行起来了。打开本机的浏览器,访问 http://127.0.0.1:8000,网页显示”Not Found”,这是因为这个 demo 没有写路由。

这个例子中node进程运行在Docker容器的虚拟环境里面,进程接触到的文件系统和网络接口都是虚拟的,与本机文件系统和网络接口都是隔离的,因此需要定义容器与物理机的端口映射(map).

现在,在容器的命令行下,按ctrl+c停止node进程,按ctrl+d(或者exit)退出容器.此外,也可以使用docker container kill [container-id]终止容器的运行.

# 在本机的另一个终端窗口,查出容器的 ID
$ docker container ls

# 停止指定的容器运行
$ docker container kill [containerID]

也可以使用docker container run 命令的 --rm 参数,在容器终止运行后自动删除容器文件.

$ docker container run --rm -p 8000:3000 -it koa-demo /bin/bash

CMD 命令

上一节的例子里面,容器启动以后,需要手动输入命令node demos/01.js。我们可以把这个命令写在 Dockerfile 里面,这样容器启动以后,这个命令就已经执行了,不用再手动输入了。

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

上面的Dockerfile文件最后面多了一行CMD node demos/01.js,表示容器启动后,自动执行node demos/01.js.

你可能会问RUN 命令和 CMD 命令的区别是什么呢?

简单来说:RUN命令在image文件的构建阶段执行,执行结果会打包进image文件;CMD命令则是在容器启动后执行.另外一个Dockerfile文件只能包含多个RUN命令,但只能包含一个CMD命令,

注意:制定了CMD命令后,docker container run命令就不能附加命令了,比如前面的/bin/bash,否则,它会覆盖CMD命令

现在启动容器可以用下面的命令:

$ docker container run --rm -p 8000:3000 -it koa-demo:0.0.1

发布image文件

容器运行成功后,就确认了image文件的有效性,这是我们就可以考虑把image文件分享到网上.
首先,去 hub.docker.com 或 cloud.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 文件。
其他有用的命令

docker的主要用法就是上面这些,另外还有一些常见的命令:

docker container start
    前面的docker container run命令是新建容器,每运行一次,就会新建一个容器.同样的命令运行两次就会生成两个一模一样的容器文件.如果希望重复使用容器,就需要使用docker container start命令,它用来启动已经生成,已经停止运行的容器文件.

$ docker container start [container_id]

docker container stop

前面的docker container kill命令终止容器的运行,相当于向容器的主进程发送SIGKILL信号,而docker container stop也是用来终止容器的运行,相当于向容器的主进程发送SIGTERM信号,然后过一段时间在发送SIGKILL信号.

$ docker container stop [container_id]

这个信号的差别就是,程序收到SIGTERM信号后,可自行进行收尾清理工作,但也可以不理会这个信号;但如果收到SIGKILL信号,就会立即终止这个容器的运行,那些正在进行的操作会全部丢失

docker container logs

docker container logs用来查看容器的输出,即容器里shell的标准输出.比如: 如果docker run命令运行容器的时候,没有使用-it参数,就要使用这个命令查看输出.

$ docker container logs [container_id]

docker container exec

docker container exec命令用于进行一个正在运行的容器.如果docker container run命令运行容器的时候,没有使用-it参数,就要使用这个命令进入进入容器,一旦进入容器,就可以在容器的shell执行命令了.

$ docker container exec [container_id] /bin/bash

docker container cp

docker container cp命令用于从正在运行的容器里,将文件拷贝到本机.下面是拷贝当前 目录的写法:

$ docker container cp [container_id]:[/path/to/file] .
************************************************************************************************************************************************

上面摘录了https://blog.csdn.net/itguangit/article/details/80222387此篇,

接下来说一下具体在python环境中如何使用,

docker 简单操作相同,在创建Dockerfile 文件是

先把自己脚本中第三方库 录入到 requirements.txt 具体方法

pip freeze > requirements.txt

文件写入:

FROM python:3.7
COPY . /app
WORKDIR /appRUN pip install -r requirements.txt
EXPOSE 3000

然后登录打包执行上传:

docker login
docker image build -t xxx/xx:tag
docker push xxx/xx:tag

部署到其他机器上:

只需要其他机器安装docker 然后下载该镜像

docker pull xxx/xx:tag

运行即可:

docker comtainer run -p 8000:3000 -it xxx/xx:tag /bin/bash

Docker打包应用部署相关推荐

  1. Docker打包项目部署的时候后端生成的图片验证码不显示

    原因是因为大部分的docker打包教程给予的项目中的docker配置文件中的jdk依赖都不是完整版,导致会有一些包没有   所以会导致标题之类的问题 搭建教程:https://blog.csdn.ne ...

  2. 将你的前端应用打包成docker镜像并部署到服务器?仅需一个脚本搞定

    1.前言 前段时间,自己搞了个阿里云的服务器.想自己在上面折腾,但是不想因为自己瞎折腾而污染了现有的环境.毕竟,现在的阿里云已经没有免费的快照服务了.要想还原的话,最简单的办法就是重新装系统.而一旦重 ...

  3. docker image name 更改_将前端应用打包成docker镜像并部署?仅需一个脚本就搞定

    1.前言 前段时间,自己搞了个阿里云的服务器.想自己在上面折腾,但是不想因为自己瞎折腾而污染了现有的环境.毕竟,现在的阿里云已经没有免费的快照服务了.要想还原的话,最简单的办法就是重新装系统.而一旦重 ...

  4. docker 打包镜像_Spring Boot2 系列教程(四十一)部署 Spring Boot 到远程 Docker 容器

    不知道各位小伙伴在生产环境都是怎么部署 Spring Boot 的,打成 jar 直接一键运行?打成 war 扔到 Tomcat 容器中运行?不过据松哥了解,容器化部署应该是目前的主流方案. 不同于传 ...

  5. docker打包镜像上传_Jenkins | 一键打包部署Spring Boot 应用的Docker镜像

    一.前言 1.本文主要内容 将在项目中实际使用到的相关东西整理记录一波,同时可以方便其他同学在使用到的时候参考一下(自己也备忘),有不对的地方,欢迎指出~~ Docker部署SpringBoot 项目 ...

  6. BI系统打包Docker镜像及部署的技术难度和实现

    BI系统打包Docker镜像及部署的技术难度和实现 随着容器化技术盛行,Docker在前端领域也有着越来越广泛的应用:传统的前端部署方式需要我们将项目打包生成一系列的静态文件,然后上传到服务器,配置n ...

  7. docker 打包_Springboot2.0学习11 使用maven插件打包docker部署应用

    一.本文目标 使用Maven插件构建SpringBoot应用的docker镜像 镜像推送至Docker Registry 启动容器 本文开发环境 : jdk1.8 maven idea SpringB ...

  8. docker安装以及部署springboot项目

    一.docker安装 1.安装 Docker Engine-Community 安装最新版本的 Docker Engine-Community 和 containerd,或者转到下一步安装特定版本: ...

  9. Spring Boot应用的打包和部署

    现在的IT开发,DevOps渐渐获得技术管理人员支持.云计算从ECS转向Docker容器技术.微服务的概念和讨论也越来越热,以上这些研究方面,最终都聚焦于软件的打包.分发和部署上. [Twelve-F ...

最新文章

  1. AI学会灌水和造假!Google新研究揭露了AI现实应用的陷阱
  2. Centos 7.2安装FTP服务并进行相关设置
  3. l293d电机驱动原理_一文搞懂步进电机特性、原理及驱动器设计
  4. mysql数据库在什么上运行_mysql – 在所有数据库上运行SQL查询
  5. HP DL360 G7安装esxi 6.0
  6. Mysql 会导致锁表的语法
  7. php代码上线,实现版本切换
  8. mysql试题错误记录字段_MySQL这三道常见的面试题,你有被问过吗?
  9. 笑跪!博士写论文解释科学擀面,学霸们每天都在想些啥…
  10. 用计算机探索规律反思,用计算器探索规律教学反思
  11. 安全员b本计算机考试,2019年安全员B证考试题库试题资料一.doc
  12. 松露菌行业调研报告 - 市场现状分析与发展前景预测
  13. 【排序算法】归并排序-递归方法
  14. 2022互联网年终奖大赏!你们年终奖发了多少?
  15. 矩阵的java程序怎么编写_如何编写Java程序以添加两个矩阵
  16. webstorm快捷键生成html页面,webStorm快捷键总结
  17. 软考高项:十大知识领域47个过程组速记
  18. 学习Android开发只要这些东西,Android篇
  19. 密码学之RSA加密原理解析
  20. 能力素质有所欠缺_表达能力至关重要

热门文章

  1. 计算机在英语口语教学中的应用,计算机在高职高专英语口语教学中的运用
  2. 电影里感动你我的对白(不断收集更新中)
  3. 用Qt将一组静态连续图片制作成动图(定时器和QPixmap实现)
  4. php excel多级下拉菜单自动匹配,让Excel如程序般酷炫,两步让多级下拉菜单自动匹配内容...
  5. 害怕JAVA技术面_字节跳动Java岗三面,鬼知道我经历了些什么,泪谈一下面试过程(附面试解析)!...
  6. 基于区块链的供应链金融服务平台
  7. 使用YOLOv3实现目标检测
  8. 浏览器中禁用某些js加载_禁用加载项以加快Internet Explorer 9中的浏览
  9. java 遥控_用树莓派和JAVA实现4路遥控控制
  10. Java研发工程师知识点总结