一、Docker概念

  1、操作系统层面的虚拟化技术

  2、隔离的进程独立于宿主和其它的隔离的进程 - 容器

  3、GO语言开发

  4、特点:高效的利用系统资源;快速的启动时间;一致的运行环境;持续交付和部署;更轻松的迁移

  5、核心:镜像、容器、仓库

二、安装docker

  https://yeasy.gitbooks.io/docker_practice/content/install/mac.html?q=

  按照文档安装docker,并且注册账号,当电脑的右上角出现小鲸鱼的图标,且显示Docker Desktop is running,安装启动成功

三、Docker构建一个Nginx服务器

  1、拉取官方镜像

    docker pull nginx

  2、查看

    docker images nginx

  3、新建文件

    mkdir www

    echo 'hello docker!!' >> www/index.html 
 
  4、启动镜像
    docker run -p 80:80 -v $PWD/www:/usr/share/nginx/html -d nginx 
    80:80代表我的宿主机的端口:容器类的端口
    如果运行结果是一串uuid,那么在浏览器打开http://localhost/会看到
    
  5、查看进程
    docker ps

    docker ps -a // 查看全部

  6、 -t 选项让Docker分配一个伪终端(pseudo-tty)并绑定到容器的标准输入上, -i 则让容器的标准输入保持打开,eu9是CONTAINER ID 的前三位

    docker exec -it eu9 /bin/bash

  7、停止镜像
    docker stop eu9
 
  8、删除镜像(前提是镜像已经stop)
    docker rm eu9 

  注意️:也可以使用Dockerfile定制镜像

  1、新建Dockerfile文件

1
2
FROM nginx:latest
RUN echo '<h1>Hello, Kaikeba!</h1>' > /usr/share/nginx/html/index.html

  2、定制镜像

    docker build -t mynginx .

  3、运行:-d 守护态运行

    docker run -p 80:80 -d mynginx

五、使用Docker定制node镜像

  1、node项目下新建Dockerfile

#制定node镜像的版本
FROM node:10-alpine #移动当前目录下面的文件到app目录下 ADD . /app/ #进入到app目录下面,类似cd WORKDIR /app
#安装依赖
RUN npm install
#对外暴露的端口
EXPOSE 3000
#程序启动脚本
CMD ["node", "app.js"]

  2、定制镜像

   docker build -t mynode .

  3、运行:-d 守护态运行

   docker run -p 3000:3000 -d mynode

六、Docker-Compose:部署Mongo + MongoExpress

  添加docker-compose.yml

version: '3.1'
services:
mongo:
image: mongo
restart: always
ports:
- 27017:27017
mongo-express:
image: mongo-express
restart: always
ports:
- 8081:8081
 mongoose.js代码中添加Mongoose调用
// mongoose.js
const mongoose = require("mongoose");
// 1.连接
mongoose.connect("mongodb://mongo:27017/test", { useNewUrlParser: true }); const conn = mongoose.connection;
conn.on("error", () => console.error("连接数据库失败"));

app.js

// app.js
const mongoose = require('mongoose');
mongoose.connect('mongodb://mongo:27017/test', {useNewUrlParser: true});
const Cat = mongoose.model('Cat', { name: String });
Cat.deleteMany({})
const kitty = new Cat({ name: 'Zildjian' });
kitty.save().then(() => console.log('meow'));
app.use(async ctx => {
ctx.body = await Cat.find()
})

  运行

  docker-compose up

  后台运行

  docker-compose up -d

  强制重新构建并启

  docker-compose up -d --force-recreate --build

使用Docker部署服务的更多相关文章

  1. docker 部署服务时,node(结点)显示no such image

    1. 问题描述 ID NAME IMAGE NODE DESIRED STATE CURRENT STATE ERROR PORTS 9cn5x84lnmga getstartedlab_web.1 ...

  2. Docker | 部署nginx服务

    容器时相互隔离的,docker启动的nginx是容器内的服务,不影响我原先服务器上的nginx服务,小伙伴们可大胆尝试 本篇实在linux环境下操作的,主要目的是夺人眼目,对使用Docker部署服务尝 ...

  3. docker部署rockermq集群(docker-compose版本)

    此处采用docker-compose部署 rockermq主主集群模式 创建相关文件夹 此处创建的文件一一对应docker-compose.yml文件中的映射文件夹,酌情创建,主要需要创建配置文件夹. ...

  4. Docker Swarm Mode 学习笔记 (部署服务)

    使用 docker service 命令来管理 Swarm 集群中的服务,该命令只能在管理节点上执行. 新建服务 docker service create --replicas 3 -p 80:80 ...

  5. docker swarm 部署服务时,限制服务启动后所在的机器

    借助容器技术,可以方便的在不同环境下部署服务,保证服务环境的一致性.docker swarm这个东西,可以方便的对容器进行编排管理. docker swarm集群中,有manager节点与worker ...

  6. 教你使用docker部署淘宝rap2服务

    什么是rap2 先来说说起因,在上一个星期的分享会上,谈到前后端联调上,有同事提到了rap2,特意去了解了一下,觉得使用这个东西来进行前后端的接口联调来真是太方便了,对比我们之前公司内部开发的API ...

  7. docker swarm英文文档学习-8-在集群中部署服务

    Deploy services to a swarm在集群中部署服务 集群服务使用声明式模型,这意味着你需要定义服务的所需状态,并依赖Docker来维护该状态.该状态包括以下信息(但不限于): 应该运 ...

  8. 【docker】docker部署spring boot服务,但是docker logs查看容器输出控制台日志,没有日志打印,日志未打印,docker logs不打印容器日志

    如题: docker部署spring boot服务,但是docker logs查看容器输出控制台日志,没有日志打印,日志未打印,docker logs不打印容器日志 场景再现: docker部署并启动 ...

  9. Docker部署微服务

    部署时需要注!意!: 打开防火墙对应的应用端口!!用于外部访问!!内部互访问则不需要. 和对应数据库,缓存,消息中间件服务等的端口(当然这些服务必须先开启,它们也可使用docker部署开启) ,用于容 ...

  10. 零基础用Docker部署微服务

    1. docker架构 这里的Client和DOCKER_HOST(docker server)都是在本地的,docker仓库Registry是在远程的: Client的docker命令通过Docke ...

随机推荐

  1. 让element的el-dialog居中显示

    我发现element的弹窗偏上,有点不太美观,所以就让它居中显示,直接更改css样式就可以 /deep/.el-dialog__wrapper { text-align: center; white- ...

  2. Note -「基本子串结构」速通笔记

      学习自 crashed 的<一类基础子串数据结构>摘抄及注解, 略过了一些 crashed 口中 "用不上" 的东西. 这里是速通笔记, 希望快速学习技巧的读者可以 ...

  3. Solution Set - “带我去看极光与大海吧”

    目录 0.「AGC 062C」Mex of Subset Sum 1.「THUPC 2021 初赛」「洛谷 P7136」方格游戏 2.「THUPC 2023 初赛」「洛谷 P9139」喵了个喵 II ...

  4. kubernetes 使用ceph实现动态持久卷存储

    k8s使用ceph存储 ceph提供底层存储功能,cephfs方式支持k8s的pv的3种访问模式​​ReadWriteOnce,ReadOnlyMany ,ReadWriteMany​​​ ,RBD支 ...

  5. Vector不推荐使用的原因

    线程安全可以自己这么用:

  6. flutter设置导航栏顶部标题与组件Text和Center和Container详解

    无状态组件和有状态组件的介绍 StatelessWidget 是无状态组件,状态是不可以改变的 StatefulWidget 是有状态组件 持有的状态可能在 widge 生命周期中改变 Statele ...

  7. 效率起飞!天翼云并行文件服务HPFS高效应对AI时代大模型训练存储挑战!

    国内外AI大模型层出不穷,训练数据复杂程度更是呈指数级增加.如今,在万亿级参数时代,单个资源池已无法满足大模型训练场景中动辄PB级的数据存储量,对于企业来说,启用多个资源池构成的分布式存储势在必行. ...

  8. linux系统ntp时间同步

    linux系统ntp时间同步 概要 linux系统时间同步有ntp和chrony两种不同实现方式. 两者相比chrony性能更优,如果系统支持,那么能够使用chrony尽量使用它. chrony 具有 ...

  9. 5. Docker 本地镜像发布到阿里云

    5. Docker 本地镜像发布到阿里云 @ 目录 5. Docker 本地镜像发布到阿里云 1. 本地镜像发布到阿里云流程 最后: 1. 本地镜像发布到阿里云流程 镜像的生成方法: 基于当前容器创建 ...

  10. DeepSeek 解答了困扰我五年的技术问题。时代确实变了!

    你好呀,我是歪歪. 五年前,2020 年,我写文章的时候曾经遇到过一个技术问题,百思不得其解,当时把那个问题归类为玄学问题. 后来也会偶尔想起这个问题,但是我早就不纠结于这个问题了,没再去研究过. 前 ...